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

Commit 43608217 authored by Vali Calinescu's avatar Vali Calinescu Committed by Android (Google) Code Review
Browse files

Merge "Fix updateResolvedBoundsPosition offset computation" into tm-qpr-dev

parents b9446e1e e3198265
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -8242,8 +8242,12 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            if (screenResolvedBounds.width() <= parentAppBounds.width()) {
                float positionMultiplier = mLetterboxUiController.getHorizontalPositionMultiplier(
                        newParentConfiguration);
                offsetX = (int) Math.ceil((parentAppBounds.width() - screenResolvedBounds.width())
                        * positionMultiplier);
                offsetX = Math.max(0, (int) Math.ceil((parentAppBounds.width()
                        - screenResolvedBounds.width()) * positionMultiplier)
                        // This is added to make sure that insets added inside
                        // CompatDisplayInsets#getContainerBounds() do not break the alignment
                        // provided by the positionMultiplier
                        - screenResolvedBounds.left + parentAppBounds.left);
            }
        }

@@ -8253,8 +8257,12 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            if (screenResolvedBounds.height() <= parentAppBounds.height()) {
                float positionMultiplier = mLetterboxUiController.getVerticalPositionMultiplier(
                        newParentConfiguration);
                offsetY = (int) Math.ceil((parentAppBounds.height() - screenResolvedBounds.height())
                        * positionMultiplier);
                offsetY = Math.max(0, (int) Math.ceil((parentAppBounds.height()
                        - screenResolvedBounds.height()) * positionMultiplier)
                        // This is added to make sure that insets added inside
                        // CompatDisplayInsets#getContainerBounds() do not break the alignment
                        // provided by the positionMultiplier
                        - screenResolvedBounds.top + parentAppBounds.top);
            }
        }

@@ -10037,6 +10045,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
                    isLandscape ? shortSide : longSide);
        }

        // TODO(b/267151420): Explore removing getContainerBounds() from CompatDisplayInsets.
        /** Gets the horizontal centered container bounds for size compatibility mode. */
        void getContainerBounds(Rect outAppBounds, Rect outBounds, int rotation, int orientation,
                boolean orientationRequested, boolean isFixedToUserRotation) {
+66 −0
Original line number Diff line number Diff line
@@ -2909,6 +2909,39 @@ public class SizeCompatTests extends WindowTestsBase {
                mActivity.getLetterboxInsets());
    }

    @Test
    public void testUpdateResolvedBoundsHorizontalPosition_leftInsets_appCentered() {
        // Set up folded display
        final DisplayContent display = new TestDisplayContent.Builder(mAtm, 1100, 2100)
                .setCanRotate(true)
                .build();
        display.setIgnoreOrientationRequest(true);
        final DisplayPolicy policy = display.getDisplayPolicy();
        DisplayPolicy.DecorInsets.Info decorInfo = policy.getDecorInsetsInfo(ROTATION_90,
                display.mBaseDisplayHeight, display.mBaseDisplayWidth);
        decorInfo.mNonDecorInsets.set(130, 0,  60, 0);
        spyOn(policy);
        doReturn(decorInfo).when(policy).getDecorInsetsInfo(ROTATION_90,
                display.mBaseDisplayHeight, display.mBaseDisplayWidth);
        mWm.mLetterboxConfiguration.setLetterboxVerticalPositionMultiplier(0.5f);

        setUpApp(display);
        prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT);

        // Resize the display to simulate unfolding in portrait
        resizeDisplay(mTask.mDisplayContent, 2200, 1800);
        assertTrue(mActivity.inSizeCompatMode());

        // Simulate real display not taking non-decor insets into consideration
        display.getWindowConfiguration().setAppBounds(0, 0, 2200, 1800);

        // Rotate display to landscape
        rotateDisplay(mActivity.mDisplayContent, ROTATION_90);

        // App is centered
        assertEquals(mActivity.getBounds(), new Rect(350, 50, 1450, 2150));
    }

    @Test
    public void testUpdateResolvedBoundsHorizontalPosition_left() {
        // Display configured as (2800, 1400).
@@ -3079,6 +3112,39 @@ public class SizeCompatTests extends WindowTestsBase {
                /* letterboxHorizontalPositionMultiplier */ 1.0f);
    }

    @Test
    public void testUpdateResolvedBoundsVerticalPosition_topInsets_appCentered() {
        // Set up folded display
        final DisplayContent display = new TestDisplayContent.Builder(mAtm, 2100, 1100)
                .setCanRotate(true)
                .build();
        display.setIgnoreOrientationRequest(true);
        final DisplayPolicy policy = display.getDisplayPolicy();
        DisplayPolicy.DecorInsets.Info decorInfo = policy.getDecorInsetsInfo(ROTATION_90,
                display.mBaseDisplayHeight, display.mBaseDisplayWidth);
        decorInfo.mNonDecorInsets.set(0, 130,  0, 60);
        spyOn(policy);
        doReturn(decorInfo).when(policy).getDecorInsetsInfo(ROTATION_90,
                display.mBaseDisplayHeight, display.mBaseDisplayWidth);
        mWm.mLetterboxConfiguration.setLetterboxVerticalPositionMultiplier(0.5f);

        setUpApp(display);
        prepareUnresizable(mActivity, SCREEN_ORIENTATION_LANDSCAPE);

        // Resize the display to simulate unfolding in portrait
        resizeDisplay(mTask.mDisplayContent, 1800, 2200);
        assertTrue(mActivity.inSizeCompatMode());

        // Simulate real display not taking non-decor insets into consideration
        display.getWindowConfiguration().setAppBounds(0, 0, 1800, 2200);

        // Rotate display to landscape
        rotateDisplay(mActivity.mDisplayContent, ROTATION_90);

        // App is centered
        assertEquals(mActivity.getBounds(), new Rect(50, 350, 2150, 1450));
    }

    @Test
    public void testUpdateResolvedBoundsVerticalPosition_top() {
        // Display configured as (1400, 2800).