diff options
| author | 2020-11-03 01:23:38 +0000 | |
|---|---|---|
| committer | 2020-11-03 01:23:38 +0000 | |
| commit | d6dcb08f012961f4b2256e6858f09b4a338367af (patch) | |
| tree | 95e34a0e69f7effdc9499477905a40b8aa0119df | |
| parent | a7cbc53d3a3251e258e68bddf677398451e7849c (diff) | |
| parent | 315713f216a1d5346ca7dbefd3900c2930ceb062 (diff) | |
Merge "set accessibility window title"
5 files changed, 120 insertions, 25 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java index 64a2acab79ee..e40185c279a8 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java @@ -32,6 +32,7 @@ import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import android.view.WindowManager; +import android.view.WindowManager.LayoutParams; import android.view.accessibility.AccessibilityManager; import android.view.accessibility.AccessibilityNodeInfo; import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; @@ -67,7 +68,7 @@ class MagnificationModeSwitch { private final int mTapTimeout = ViewConfiguration.getTapTimeout(); private final int mTouchSlop; private int mMagnificationMode = Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN; - private final WindowManager.LayoutParams mParams; + private final LayoutParams mParams; private boolean mIsVisible = false; MagnificationModeSwitch(Context context) { @@ -80,7 +81,7 @@ class MagnificationModeSwitch { mAccessibilityManager = mContext.getSystemService(AccessibilityManager.class); mWindowManager = (WindowManager) mContext.getSystemService( Context.WINDOW_SERVICE); - mParams = createLayoutParams(); + mParams = createLayoutParams(context); mImageView = imageView; mTouchSlop = ViewConfiguration.get(mContext).getScaledTouchSlop(); applyResourcesValues(); @@ -221,11 +222,22 @@ class MagnificationModeSwitch { } void onConfigurationChanged(int configDiff) { - if ((configDiff & ActivityInfo.CONFIG_DENSITY) == 0) { + if ((configDiff & ActivityInfo.CONFIG_DENSITY) != 0) { + applyResourcesValues(); + mImageView.setImageResource(getIconResId(mMagnificationMode)); + return; + } + if ((configDiff & ActivityInfo.CONFIG_LOCALE) != 0) { + updateAccessibilityWindowTitle(); return; } - applyResourcesValues(); - mImageView.setImageResource(getIconResId(mMagnificationMode)); + } + + private void updateAccessibilityWindowTitle() { + mParams.accessibilityTitle = getAccessibilityWindowTitle(mContext); + if (mIsVisible) { + mWindowManager.updateViewLayout(mImageView, mParams); + } } private void toggleMagnificationMode() { @@ -261,14 +273,19 @@ class MagnificationModeSwitch { : R.drawable.ic_open_in_new_fullscreen; } - private static WindowManager.LayoutParams createLayoutParams() { - final WindowManager.LayoutParams params = new WindowManager.LayoutParams( - WindowManager.LayoutParams.WRAP_CONTENT, - WindowManager.LayoutParams.WRAP_CONTENT, - WindowManager.LayoutParams.TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY, - WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, + private static LayoutParams createLayoutParams(Context context) { + final LayoutParams params = new LayoutParams( + LayoutParams.WRAP_CONTENT, + LayoutParams.WRAP_CONTENT, + LayoutParams.TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY, + LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSPARENT); params.gravity = Gravity.BOTTOM | Gravity.RIGHT; + params.accessibilityTitle = getAccessibilityWindowTitle(context); return params; } + + private static String getAccessibilityWindowTitle(Context context) { + return context.getString(com.android.internal.R.string.android_system_label); + } } diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java index e9e453b3d981..98424beab14e 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java @@ -53,7 +53,8 @@ public class WindowMagnification extends SystemUI implements WindowMagnifierCall CommandQueue.Callbacks { private static final String TAG = "WindowMagnification"; private static final int CONFIG_MASK = - ActivityInfo.CONFIG_DENSITY | ActivityInfo.CONFIG_ORIENTATION; + ActivityInfo.CONFIG_DENSITY | ActivityInfo.CONFIG_ORIENTATION + | ActivityInfo.CONFIG_LOCALE; @VisibleForTesting protected WindowMagnificationAnimationController mWindowMagnificationAnimationController; diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java index 340ca044a1ef..fd89baa61657 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java @@ -16,7 +16,7 @@ package com.android.systemui.accessibility; -import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; +import static android.view.WindowManager.LayoutParams; import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_2BUTTON; import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL; @@ -254,9 +254,18 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold } } else if ((configDiff & ActivityInfo.CONFIG_ORIENTATION) != 0) { onRotate(); + } else if ((configDiff & ActivityInfo.CONFIG_LOCALE) != 0) { + updateAccessibilityWindowTitleIfNeeded(); } } + private void updateAccessibilityWindowTitleIfNeeded() { + if (!isWindowVisible()) return; + LayoutParams params = (LayoutParams) mMirrorView.getLayoutParams(); + params.accessibilityTitle = getAccessibilityWindowTitle(); + mWm.updateViewLayout(mMirrorView, params); + } + /** Handles MirrorWindow position when the navigation bar mode changed. */ public void onNavigationModeChanged(int mode) { mNavBarMode = mode; @@ -290,8 +299,8 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold return; } // The rect of MirrorView is going to be transformed. - WindowManager.LayoutParams params = - (WindowManager.LayoutParams) mMirrorView.getLayoutParams(); + LayoutParams params = + (LayoutParams) mMirrorView.getLayoutParams(); mTmpRect.set(params.x, params.y, params.x + params.width, params.y + params.height); final RectF transformedRect = new RectF(mTmpRect); matrix.mapRect(transformedRect); @@ -313,17 +322,18 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold int windowWidth = mMagnificationFrame.width() + 2 * mMirrorSurfaceMargin; int windowHeight = mMagnificationFrame.height() + 2 * mMirrorSurfaceMargin; - WindowManager.LayoutParams params = new WindowManager.LayoutParams( + LayoutParams params = new LayoutParams( windowWidth, windowHeight, - WindowManager.LayoutParams.TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY, - WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL - | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, + LayoutParams.TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY, + LayoutParams.FLAG_NOT_TOUCH_MODAL + | LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSPARENT); params.gravity = Gravity.TOP | Gravity.LEFT; params.x = mMagnificationFrame.left - mMirrorSurfaceMargin; params.y = mMagnificationFrame.top - mMirrorSurfaceMargin; - params.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; + params.layoutInDisplayCutoutMode = LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; params.setTitle(mContext.getString(R.string.magnification_window_title)); + params.accessibilityTitle = getAccessibilityWindowTitle(); mMirrorView = LayoutInflater.from(mContext).inflate(R.layout.window_magnifier_view, null); mMirrorSurfaceView = mMirrorView.findViewById(R.id.surface_view); @@ -369,6 +379,10 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold return regionInsideDragBorder; } + private String getAccessibilityWindowTitle() { + return mResources.getString(com.android.internal.R.string.android_system_label); + } + private void showControls() { if (mMirrorWindowControl != null) { mMirrorWindowControl.showControl(); @@ -432,8 +446,8 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold } final int maxMirrorViewX = mDisplaySize.x - mMirrorView.getWidth(); final int maxMirrorViewY = mDisplaySize.y - mMirrorView.getHeight() - mNavGestureHeight; - WindowManager.LayoutParams params = - (WindowManager.LayoutParams) mMirrorView.getLayoutParams(); + LayoutParams params = + (LayoutParams) mMirrorView.getLayoutParams(); params.x = mMagnificationFrame.left - mMirrorSurfaceMargin; params.y = mMagnificationFrame.top - mMirrorSurfaceMargin; // If nav bar mode supports swipe-up gesture, the Y position of mirror view should not diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java index c923515fc8cc..a0ae35ffef00 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java @@ -287,6 +287,33 @@ public class MagnificationModeSwitchTest extends SysuiTestCase { assertShowFadingAnimation(FADE_OUT_ALPHA); } + @Test + public void showButton_hasAccessibilityWindowTitle() { + mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); + + ArgumentCaptor<WindowManager.LayoutParams> paramsArgumentCaptor = ArgumentCaptor.forClass( + WindowManager.LayoutParams.class); + verify(mWindowManager).addView(eq(mSpyImageView), paramsArgumentCaptor.capture()); + assertEquals(getContext().getResources().getString( + com.android.internal.R.string.android_system_label), + paramsArgumentCaptor.getValue().accessibilityTitle); + } + + @Test + public void onLocaleChanged_buttonIsShowing_updateA11yWindowTitle() { + final String newA11yWindowTitle = "new a11y window title"; + mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); + + getContext().getOrCreateTestableResources().addOverride( + com.android.internal.R.string.android_system_label, newA11yWindowTitle); + mMagnificationModeSwitch.onConfigurationChanged(ActivityInfo.CONFIG_LOCALE); + + ArgumentCaptor<WindowManager.LayoutParams> paramsArgumentCaptor = ArgumentCaptor.forClass( + WindowManager.LayoutParams.class); + verify(mWindowManager).updateViewLayout(eq(mSpyImageView), paramsArgumentCaptor.capture()); + assertEquals(newA11yWindowTitle, paramsArgumentCaptor.getValue().accessibilityTitle); + } + private void assertModeUnchanged(int expectedMode) { final int actualMode = Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE, 0); diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java index f1606c5660ed..a39bc702900e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java @@ -41,6 +41,7 @@ import android.content.pm.ActivityInfo; import android.content.res.Resources; import android.os.Handler; import android.testing.AndroidTestingRunner; +import android.testing.TestableResources; import android.view.Display; import android.view.Surface; import android.view.SurfaceControl; @@ -114,8 +115,7 @@ public class WindowMagnificationControllerTest extends SysuiTestCase { when(mTransaction.remove(any())).thenReturn(mTransaction); when(mTransaction.setGeometry(any(), any(), any(), anyInt())).thenReturn(mTransaction); - mResources = Mockito.spy(mContext.getResources()); - when(mContext.getResources()).thenReturn(mResources); + mResources = getContext().getOrCreateTestableResources().getResources(); mWindowMagnificationController = new WindowMagnificationController(mContext, mHandler, mSfVsyncFrameProvider, mMirrorWindowControl, mTransaction, mWindowMagnifierCallback); @@ -222,7 +222,6 @@ public class WindowMagnificationControllerTest extends SysuiTestCase { assertEquals(Surface.ROTATION_90, mWindowMagnificationController.mRotation); } - @Test public void onDensityChanged_enabled_updateDimensionsAndResetWindowMagnification() { mInstrumentation.runOnMainSync(() -> { @@ -310,4 +309,41 @@ public class WindowMagnificationControllerTest extends SysuiTestCase { verify(mWindowManager).updateViewLayout(eq(mMirrorView), any()); } + + @Test + public void enableWindowMagnification_hasA11yWindowTitle() { + mInstrumentation.runOnMainSync(() -> { + mWindowMagnificationController.enableWindowMagnification(Float.NaN, Float.NaN, + Float.NaN); + }); + + ArgumentCaptor<WindowManager.LayoutParams> paramsArgumentCaptor = ArgumentCaptor.forClass( + WindowManager.LayoutParams.class); + verify(mWindowManager).addView(eq(mMirrorView), paramsArgumentCaptor.capture()); + assertEquals(getContext().getResources().getString( + com.android.internal.R.string.android_system_label), + paramsArgumentCaptor.getValue().accessibilityTitle); + } + + @Test + public void onLocaleChanged_enabled_updateA11yWindowTitle() { + final String newA11yWindowTitle = "new a11y window title"; + mInstrumentation.runOnMainSync(() -> { + mWindowMagnificationController.enableWindowMagnification(Float.NaN, Float.NaN, + Float.NaN); + }); + final TestableResources testableResources = getContext().getOrCreateTestableResources(); + testableResources.addOverride(com.android.internal.R.string.android_system_label, + newA11yWindowTitle); + when(mContext.getResources()).thenReturn(testableResources.getResources()); + + mInstrumentation.runOnMainSync(() -> { + mWindowMagnificationController.onConfigurationChanged(ActivityInfo.CONFIG_LOCALE); + }); + + ArgumentCaptor<WindowManager.LayoutParams> paramsArgumentCaptor = ArgumentCaptor.forClass( + WindowManager.LayoutParams.class); + verify(mWindowManager).updateViewLayout(eq(mMirrorView), paramsArgumentCaptor.capture()); + assertEquals(newA11yWindowTitle, paramsArgumentCaptor.getValue().accessibilityTitle); + } } |