Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f2ef6b54 authored by ryanlwlin's avatar ryanlwlin
Browse files

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
parent 5082dcb7
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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>
+6 −3
Original line number Diff line number Diff line
@@ -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);
+44 −0
Original line number Diff line number Diff line
@@ -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() {