From bbbbc3660f41403f6b7dbc38e8710fb6bbd60ce6 Mon Sep 17 00:00:00 2001 From: mincheli Date: Thu, 24 Mar 2022 10:11:46 +0800 Subject: [PATCH] Fallback magnification mode settings if window magnification feature is not supported When the platform does not support window magnification feature, AccessibilityManagerService should fallback magnification mode settings if the magnification mode of userState is window mode that is invalid. Bug: 213414385 Test: manual test Change-Id: I810131f7b1925b6b010c21d822b521d29ee3a646 --- .../server/accessibility/AccessibilityUserState.java | 12 +++++++----- .../accessibility/AccessibilityUserStateTest.java | 6 ++++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java index 51b49ed1e3bcc..55dc196fc18d7 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java @@ -37,6 +37,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.content.ComponentName; import android.content.Context; +import android.content.pm.PackageManager; import android.os.Binder; import android.os.RemoteCallbackList; import android.provider.Settings; @@ -123,8 +124,8 @@ class AccessibilityUserState { private int mInteractiveUiTimeout = 0; private int mLastSentClientState = -1; - /** {@code true} if the device config supports magnification area. */ - private final boolean mSupportMagnificationArea; + /** {@code true} if the device config supports window magnification. */ + private final boolean mSupportWindowMagnification; // The magnification modes on displays. private final SparseIntArray mMagnificationModes = new SparseIntArray(); // The magnification capabilities used to know magnification mode could be switched. @@ -148,7 +149,7 @@ class AccessibilityUserState { boolean isValidMagnificationModeLocked(int displayId) { final int mode = getMagnificationModeLocked(displayId); - if (!mSupportMagnificationArea + if (!mSupportWindowMagnification && mode == Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW) { return false; } @@ -170,8 +171,9 @@ class AccessibilityUserState { R.color.accessibility_focus_highlight_color); mFocusStrokeWidth = mFocusStrokeWidthDefaultValue; mFocusColor = mFocusColorDefaultValue; - mSupportMagnificationArea = mContext.getResources().getBoolean( - R.bool.config_magnification_area); + mSupportWindowMagnification = mContext.getResources().getBoolean( + R.bool.config_magnification_area) && mContext.getPackageManager().hasSystemFeature( + PackageManager.FEATURE_WINDOW_MAGNIFICATION); } boolean isHandlingAccessibilityEventsLocked() { diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityUserStateTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityUserStateTest.java index 27637c2ba5d57..ed0336a5a4ea7 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityUserStateTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityUserStateTest.java @@ -21,6 +21,7 @@ import static android.accessibilityservice.AccessibilityService.SHOW_MODE_HARD_K import static android.accessibilityservice.AccessibilityService.SHOW_MODE_HARD_KEYBOARD_OVERRIDDEN; import static android.accessibilityservice.AccessibilityService.SHOW_MODE_HIDDEN; import static android.accessibilityservice.AccessibilityService.SHOW_MODE_IGNORE_HARD_KEYBOARD; +import static android.content.pm.PackageManager.FEATURE_WINDOW_MAGNIFICATION; import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN; import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW; import static android.view.accessibility.AccessibilityManager.STATE_FLAG_ACCESSIBILITY_ENABLED; @@ -42,6 +43,7 @@ import static org.mockito.Mockito.when; import android.accessibilityservice.AccessibilityServiceInfo; import android.content.ComponentName; import android.content.Context; +import android.content.pm.PackageManager; import android.content.res.Resources; import android.graphics.Color; import android.provider.Settings; @@ -92,6 +94,8 @@ public class AccessibilityUserStateTest { @Mock private AccessibilityUserState.ServiceInfoChangeListener mMockListener; + @Mock private PackageManager mMockPackageManager; + @Mock private Context mMockContext; private MockContentResolver mMockResolver; @@ -113,6 +117,8 @@ public class AccessibilityUserStateTest { when(mMockServiceInfo.getComponentName()).thenReturn(COMPONENT_NAME); when(mMockConnection.getServiceInfo()).thenReturn(mMockServiceInfo); when(mMockContext.getResources()).thenReturn(resources); + when(mMockContext.getPackageManager()).thenReturn(mMockPackageManager); + when(mMockPackageManager.hasSystemFeature(FEATURE_WINDOW_MAGNIFICATION)).thenReturn(true); mFocusStrokeWidthDefaultValue = resources.getDimensionPixelSize(R.dimen.accessibility_focus_highlight_stroke_width);