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
This commit is contained in:
ryanlwlin
2021-08-25 16:21:45 +08:00
parent 5082dcb7fd
commit f2ef6b540c
3 changed files with 51 additions and 3 deletions

View File

@@ -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>

View File

@@ -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);

View File

@@ -170,6 +170,29 @@ public class WindowMagnificationControllerTest extends SysuiTestCase {
assertFalse(rects.isEmpty());
}
@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(() -> {
@@ -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() {