diff options
| author | 2021-08-25 16:21:45 +0800 | |
|---|---|---|
| committer | 2021-08-27 15:34:10 +0800 | |
| commit | f2ef6b540c553615624ef1255421fa81b5aa03c3 (patch) | |
| tree | 9d9b826677a8ee0ccd5697fccb4217d3aa82d5fd | |
| parent | 5082dcb7fd5832181620cd69173fcd320043a2db (diff) | |
Constranit the magnification window size for large screen devices
The window size depends on the screen size. However, it is too
big for fodlables. We constraint the window size to avoid it.
Bug: 194268185
Test: WindowMagnificationControllerTest
Change-Id: I16b25560e2a7db324433530a9fa4f310fe2fe529
3 files changed, 51 insertions, 3 deletions
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 689f8f7abf4f..45869e66bc6d 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -1339,6 +1339,7 @@ <dimen name="magnifier_up_down_controls_height">40dp</dimen> <!-- The extra padding to show the whole outer border --> <dimen name="magnifier_drag_handle_padding">3dp</dimen> + <dimen name="magnification_max_frame_size">300dp</dimen> <!-- Home Controls --> <dimen name="controls_header_side_margin">4dp</dimen> diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java index a51e3fcfd50b..0893e895b102 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java @@ -499,9 +499,12 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold } private void setMagnificationFrameWith(Rect windowBounds, int centerX, int centerY) { - // Sets the initial frame area for the mirror and places it in the center of the display. - final int initSize = Math.min(windowBounds.width(), windowBounds.height()) / 2 - + 2 * mMirrorSurfaceMargin; + // Sets the initial frame area for the mirror and place it to the given center on the + // display. + int initSize = Math.min(windowBounds.width(), windowBounds.height()) / 2; + initSize = Math.min(mResources.getDimensionPixelSize(R.dimen.magnification_max_frame_size), + initSize); + initSize += 2 * mMirrorSurfaceMargin; final int initX = centerX - initSize / 2; final int initY = centerY - initSize / 2; mMagnificationFrame.set(initX, initY, initX + initSize, initY + initSize); 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 77941366b4d3..b03587fdfa85 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java @@ -171,6 +171,29 @@ public class WindowMagnificationControllerTest extends SysuiTestCase { } @Test + public void enableWindowMagnification_LargeScreen_windowSizeIsConstrained() { + final int screenSize = mContext.getResources().getDimensionPixelSize( + R.dimen.magnification_max_frame_size) * 10; + mWindowManager.setWindowBounds(new Rect(0, 0, screenSize, screenSize)); + //We need to initialize new one because the window size is determined when initialization. + final WindowMagnificationController controller = new WindowMagnificationController(mContext, + mHandler, mSfVsyncFrameProvider, + mMirrorWindowControl, mTransaction, mWindowMagnifierCallback, mSysUiState); + + mInstrumentation.runOnMainSync(() -> { + controller.enableWindowMagnification(Float.NaN, Float.NaN, + Float.NaN); + }); + + final int halfScreenSize = screenSize / 2; + WindowManager.LayoutParams params = mWindowManager.getLayoutParamsFromAttachedView(); + // The frame size should be the half of smaller value of window height/width unless it + //exceed the max frame size. + assertTrue(params.width < halfScreenSize); + assertTrue(params.height < halfScreenSize); + } + + @Test public void deleteWindowMagnification_destroyControl() { mInstrumentation.runOnMainSync(() -> { mWindowMagnificationController.enableWindowMagnification(Float.NaN, Float.NaN, @@ -316,6 +339,27 @@ public class WindowMagnificationControllerTest extends SysuiTestCase { mWindowMagnificationController.getCenterY() / testWindowBounds.height(), 0); } + @Test + public void screenSizeIsChangedToLarge_enabled_windowSizeIsConstrained() { + mInstrumentation.runOnMainSync(() -> { + mWindowMagnificationController.enableWindowMagnification(Float.NaN, Float.NaN, + Float.NaN); + }); + final int screenSize = mContext.getResources().getDimensionPixelSize( + R.dimen.magnification_max_frame_size) * 10; + mWindowManager.setWindowBounds(new Rect(0, 0, screenSize, screenSize)); + + mInstrumentation.runOnMainSync(() -> { + mWindowMagnificationController.onConfigurationChanged(ActivityInfo.CONFIG_SCREEN_SIZE); + }); + + final int halfScreenSize = screenSize / 2; + WindowManager.LayoutParams params = mWindowManager.getLayoutParamsFromAttachedView(); + // The frame size should be the half of smaller value of window height/width unless it + //exceed the max frame size. + assertTrue(params.width < halfScreenSize); + assertTrue(params.height < halfScreenSize); + } @Test public void onDensityChanged_enabled_updateDimensionsAndResetWindowMagnification() { |