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

Commit 5e30b007 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Vertically center app in landscape size compat mode" into sc-v2-dev

parents 3708e854 c657575c
Loading
Loading
Loading
Loading
+8 −5
Original line number Original line Diff line number Diff line
@@ -7511,7 +7511,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
    /**
    /**
     * Adjusts horizontal position of resolved bounds if they doesn't fill the parent using gravity
     * Adjusts horizontal position of resolved bounds if they doesn't fill the parent using gravity
     * requested in the config or via an ADB command. For more context see {@link
     * requested in the config or via an ADB command. For more context see {@link
     * WindowManagerService#getLetterboxHorizontalPositionMultiplier}.
     * LetterboxUiController#getHorizontalPositionMultiplier(Configuration)}.
     */
     */
    private void updateResolvedBoundsHorizontalPosition(Configuration newParentConfiguration) {
    private void updateResolvedBoundsHorizontalPosition(Configuration newParentConfiguration) {
        final Configuration resolvedConfig = getResolvedOverrideConfiguration();
        final Configuration resolvedConfig = getResolvedOverrideConfiguration();
@@ -7848,7 +7848,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        // Below figure is an example that puts an activity which was launched in a larger container
        // Below figure is an example that puts an activity which was launched in a larger container
        // into a smaller container.
        // into a smaller container.
        //   The outermost rectangle is the real display bounds.
        //   The outermost rectangle is the real display bounds.
        //   "@" is the container app bounds (parent bounds or fixed orientation bouds)
        //   "@" is the container app bounds (parent bounds or fixed orientation bounds)
        //   "#" is the {@code resolvedBounds} that applies to application.
        //   "#" is the {@code resolvedBounds} that applies to application.
        //   "*" is the {@code mSizeCompatBounds} that used to show on screen if scaled.
        //   "*" is the {@code mSizeCompatBounds} that used to show on screen if scaled.
        // ------------------------------
        // ------------------------------
@@ -7891,12 +7891,15 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            mSizeCompatBounds = null;
            mSizeCompatBounds = null;
        }
        }


        // Align to top of parent (bounds) - this is a UX choice and exclude the horizontal decor
        // Vertically center within parent (bounds) - this is a UX choice and exclude the horizontal
        // if needed. Horizontal position is adjusted in updateResolvedBoundsHorizontalPosition.
        // decor if needed. Horizontal position is adjusted in
        // updateResolvedBoundsHorizontalPosition.
        // Above coordinates are in "@" space, now place "*" and "#" to screen space.
        // Above coordinates are in "@" space, now place "*" and "#" to screen space.
        final boolean fillContainer = resolvedBounds.equals(containingBounds);
        final boolean fillContainer = resolvedBounds.equals(containingBounds);
        final int screenPosX = fillContainer ? containerBounds.left : containerAppBounds.left;
        final int screenPosX = fillContainer ? containerBounds.left : containerAppBounds.left;
        final int screenPosY = containerBounds.top;
        final int screenPosY = mSizeCompatBounds == null
                ? (containerBounds.height() - resolvedBounds.height()) / 2
                : (containerBounds.height() - mSizeCompatBounds.height()) / 2;
        if (screenPosX != 0 || screenPosY != 0) {
        if (screenPosX != 0 || screenPosY != 0) {
            if (mSizeCompatBounds != null) {
            if (mSizeCompatBounds != null) {
                mSizeCompatBounds.offset(screenPosX, screenPosY);
                mSizeCompatBounds.offset(screenPosX, screenPosY);
+9 −7
Original line number Original line Diff line number Diff line
@@ -174,7 +174,9 @@ public class SizeCompatTests extends WindowTestsBase {


        // The activity should be able to accept negative x position [-150, 100 - 150, 600].
        // The activity should be able to accept negative x position [-150, 100 - 150, 600].
        final int dx = bounds.left + bounds.width() / 2;
        final int dx = bounds.left + bounds.width() / 2;
        mTask.setBounds(bounds.left - dx, bounds.top, bounds.right - dx, bounds.bottom);
        final int dy = bounds.top + bounds.height() / 2;
        mTask.setBounds(bounds.left - dx, bounds.top - dy, bounds.right - dx, bounds.bottom - dy);
        // expected:<Rect(-150, 100 - 150, 600)> but was:<Rect(-150, 0 - 150, 500)>
        assertEquals(mTask.getBounds(), mActivity.getBounds());
        assertEquals(mTask.getBounds(), mActivity.getBounds());


        final int density = mActivity.getConfiguration().densityDpi;
        final int density = mActivity.getConfiguration().densityDpi;
@@ -1850,7 +1852,7 @@ public class SizeCompatTests extends WindowTestsBase {
                // At launch.
                // At launch.
                /* fixedOrientationLetterbox */ new Rect(0, 0, 700, 1400),
                /* fixedOrientationLetterbox */ new Rect(0, 0, 700, 1400),
                // After 90 degree rotation.
                // After 90 degree rotation.
                /* sizeCompatUnscaled */ new Rect(0, 0, 700, 1400),
                /* sizeCompatUnscaled */ new Rect(0, 700, 700, 2100),
                // After the display is resized to (700, 1400).
                // After the display is resized to (700, 1400).
                /* sizeCompatScaled */ new Rect(0, 0, 350, 700));
                /* sizeCompatScaled */ new Rect(0, 0, 350, 700));
    }
    }
@@ -1863,7 +1865,7 @@ public class SizeCompatTests extends WindowTestsBase {
                // At launch.
                // At launch.
                /* fixedOrientationLetterbox */ new Rect(1050, 0, 1750, 1400),
                /* fixedOrientationLetterbox */ new Rect(1050, 0, 1750, 1400),
                // After 90 degree rotation.
                // After 90 degree rotation.
                /* sizeCompatUnscaled */ new Rect(350, 0, 1050, 1400),
                /* sizeCompatUnscaled */ new Rect(350, 700, 1050, 2100),
                // After the display is resized to (700, 1400).
                // After the display is resized to (700, 1400).
                /* sizeCompatScaled */ new Rect(525, 0, 875, 700));
                /* sizeCompatScaled */ new Rect(525, 0, 875, 700));
    }
    }
@@ -1878,7 +1880,7 @@ public class SizeCompatTests extends WindowTestsBase {
                // At launch.
                // At launch.
                /* fixedOrientationLetterbox */ new Rect(1050, 0, 1750, 1400),
                /* fixedOrientationLetterbox */ new Rect(1050, 0, 1750, 1400),
                // After 90 degree rotation.
                // After 90 degree rotation.
                /* sizeCompatUnscaled */ new Rect(350, 0, 1050, 1400),
                /* sizeCompatUnscaled */ new Rect(350, 700, 1050, 2100),
                // After the display is resized to (700, 1400).
                // After the display is resized to (700, 1400).
                /* sizeCompatScaled */ new Rect(525, 0, 875, 700));
                /* sizeCompatScaled */ new Rect(525, 0, 875, 700));


@@ -1888,7 +1890,7 @@ public class SizeCompatTests extends WindowTestsBase {
                // At launch.
                // At launch.
                /* fixedOrientationLetterbox */ new Rect(1050, 0, 1750, 1400),
                /* fixedOrientationLetterbox */ new Rect(1050, 0, 1750, 1400),
                // After 90 degree rotation.
                // After 90 degree rotation.
                /* sizeCompatUnscaled */ new Rect(350, 0, 1050, 1400),
                /* sizeCompatUnscaled */ new Rect(350, 700, 1050, 2100),
                // After the display is resized to (700, 1400).
                // After the display is resized to (700, 1400).
                /* sizeCompatScaled */ new Rect(525, 0, 875, 700));
                /* sizeCompatScaled */ new Rect(525, 0, 875, 700));
    }
    }
@@ -1901,7 +1903,7 @@ public class SizeCompatTests extends WindowTestsBase {
                // At launch.
                // At launch.
                /* fixedOrientationLetterbox */ new Rect(2100, 0, 2800, 1400),
                /* fixedOrientationLetterbox */ new Rect(2100, 0, 2800, 1400),
                // After 90 degree rotation.
                // After 90 degree rotation.
                /* sizeCompatUnscaled */ new Rect(700, 0, 1400, 1400),
                /* sizeCompatUnscaled */ new Rect(700, 700, 1400, 2100),
                // After the display is resized to (700, 1400).
                // After the display is resized to (700, 1400).
                /* sizeCompatScaled */ new Rect(1050, 0, 1400, 700));
                /* sizeCompatScaled */ new Rect(1050, 0, 1400, 700));
    }
    }
@@ -2093,7 +2095,7 @@ public class SizeCompatTests extends WindowTestsBase {


        assertTrue(mActivity.inSizeCompatMode());
        assertTrue(mActivity.inSizeCompatMode());
        // Activity is in size compat mode but not scaled.
        // Activity is in size compat mode but not scaled.
        assertEquals(new Rect(0, 0, 1400, 700), mActivity.getBounds());
        assertEquals(new Rect(0, 1050, 1400, 1750), mActivity.getBounds());
    }
    }


    private static WindowState addWindowToActivity(ActivityRecord activity) {
    private static WindowState addWindowToActivity(ActivityRecord activity) {