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

Commit 201ec7ec authored by Riddle Hsu's avatar Riddle Hsu Committed by Android (Google) Code Review
Browse files

Merge "Ignore fixed aspect ratio and resizability for universal resizable" into main

parents 611e4316 19cf6c63
Loading
Loading
Loading
Loading
+15 −9
Original line number Diff line number Diff line
@@ -3174,14 +3174,23 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        return getWindowConfiguration().canReceiveKeys() && !mWaitForEnteringPinnedMode;
    }

    boolean isResizeable() {
        return isResizeable(/* checkPictureInPictureSupport */ true);
    /**
     * Returns {@code true} if the fixed orientation, aspect ratio, resizability of this activity
     * will be ignored.
     */
    boolean isUniversalResizeable() {
        return mWmService.mConstants.mIgnoreActivityOrientationRequest
                && info.applicationInfo.category != ApplicationInfo.CATEGORY_GAME
                // If the user preference respects aspect ratio, then it becomes non-resizable.
                && !mAppCompatController.getAppCompatOverrides().getAppCompatAspectRatioOverrides()
                        .shouldApplyUserMinAspectRatioOverride();
    }

    boolean isResizeable(boolean checkPictureInPictureSupport) {
    boolean isResizeable() {
        return mAtmService.mForceResizableActivities
                || ActivityInfo.isResizeableMode(info.resizeMode)
                || (info.supportsPictureInPicture() && checkPictureInPictureSupport)
                || info.supportsPictureInPicture()
                || isUniversalResizeable()
                // If the activity can be embedded, it should inherit the bounds of task fragment.
                || isEmbedded();
    }
@@ -8165,11 +8174,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
    @Override
    @ActivityInfo.ScreenOrientation
    protected int getOverrideOrientation() {
        final int candidateOrientation;
        if (!mWmService.mConstants.mIgnoreActivityOrientationRequest
                || info.applicationInfo.category == ApplicationInfo.CATEGORY_GAME) {
            candidateOrientation = super.getOverrideOrientation();
        } else {
        int candidateOrientation = super.getOverrideOrientation();
        if (isUniversalResizeable() && ActivityInfo.isFixedOrientation(candidateOrientation)) {
            candidateOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
        }
        return mAppCompatController.getOrientationPolicy()
+6 −3
Original line number Diff line number Diff line
@@ -114,9 +114,6 @@ class AppCompatAspectRatioPolicy {
            return mTransparentPolicy.getInheritedMinAspectRatio();
        }
        final ActivityInfo info = mActivityRecord.info;
        if (info.applicationInfo == null) {
            return info.getMinAspectRatio();
        }
        final AppCompatAspectRatioOverrides aspectRatioOverrides =
                mAppCompatOverrides.getAppCompatAspectRatioOverrides();
        if (aspectRatioOverrides.shouldApplyUserMinAspectRatioOverride()) {
@@ -128,6 +125,9 @@ class AppCompatAspectRatioPolicy {
                        mActivityRecord);
        if (!aspectRatioOverrides.shouldOverrideMinAspectRatio()
                && !shouldOverrideMinAspectRatioForCamera) {
            if (mActivityRecord.isUniversalResizeable()) {
                return 0;
            }
            return info.getMinAspectRatio();
        }

@@ -170,6 +170,9 @@ class AppCompatAspectRatioPolicy {
        if (mTransparentPolicy.isRunning()) {
            return mTransparentPolicy.getInheritedMaxAspectRatio();
        }
        if (mActivityRecord.isUniversalResizeable()) {
            return 0;
        }
        return mActivityRecord.info.getMaxAspectRatio();
    }

+6 −4
Original line number Diff line number Diff line
@@ -188,10 +188,6 @@ public class DesktopAppCompatAspectRatioPolicy {
        }

        final ActivityInfo info = mActivityRecord.info;
        if (info.applicationInfo == null) {
            return info.getMinAspectRatio();
        }

        final AppCompatAspectRatioOverrides aspectRatioOverrides =
                mAppCompatOverrides.getAppCompatAspectRatioOverrides();
        if (shouldApplyUserMinAspectRatioOverride(task)) {
@@ -203,6 +199,9 @@ public class DesktopAppCompatAspectRatioPolicy {
                && dc.mAppCompatCameraPolicy.shouldOverrideMinAspectRatioForCamera(mActivityRecord);
        if (!aspectRatioOverrides.shouldOverrideMinAspectRatio()
                && !shouldOverrideMinAspectRatioForCamera) {
            if (mActivityRecord.isUniversalResizeable()) {
                return 0;
            }
            return info.getMinAspectRatio();
        }

@@ -246,6 +245,9 @@ public class DesktopAppCompatAspectRatioPolicy {
        if (mTransparentPolicy.isRunning()) {
            return mTransparentPolicy.getInheritedMaxAspectRatio();
        }
        if (mActivityRecord.isUniversalResizeable()) {
            return 0;
        }
        return mActivityRecord.info.getMaxAspectRatio();
    }

+33 −0
Original line number Diff line number Diff line
@@ -4848,6 +4848,39 @@ public class SizeCompatTests extends WindowTestsBase {
                computeAspectRatio(sizeCompatAppBounds), DELTA_ASPECT_RATIO_TOLERANCE);
    }

    @Test
    public void testUniversalResizeable() {
        mWm.mConstants.mIgnoreActivityOrientationRequest = true;
        setUpApp(mDisplayContent);
        final float maxAspect = 1.8f;
        final float minAspect = 1.5f;
        prepareLimitedBounds(mActivity, maxAspect, minAspect,
                ActivityInfo.SCREEN_ORIENTATION_LOCKED, true /* isUnresizable */);

        assertTrue(mActivity.isUniversalResizeable());
        assertTrue(mActivity.isResizeable());
        assertFalse(mActivity.shouldCreateAppCompatDisplayInsets());
        assertEquals(SCREEN_ORIENTATION_UNSPECIFIED, mActivity.getOverrideOrientation());
        assertEquals(mActivity.getTask().getBounds(), mActivity.getBounds());
        final AppCompatAspectRatioPolicy aspectRatioPolicy = mActivity.mAppCompatController
                .getAppCompatAspectRatioPolicy();
        assertEquals(0, aspectRatioPolicy.getMaxAspectRatio(), 0 /* delta */);
        assertEquals(0, aspectRatioPolicy.getMinAspectRatio(), 0 /* delta */);

        // Compat override can still take effect.
        final AppCompatAspectRatioOverrides aspectRatioOverrides =
                mActivity.mAppCompatController.getAppCompatAspectRatioOverrides();
        spyOn(aspectRatioOverrides);
        doReturn(true).when(aspectRatioOverrides).shouldOverrideMinAspectRatio();
        assertEquals(minAspect, aspectRatioPolicy.getMinAspectRatio(), 0 /* delta */);

        // User override can still take effect.
        doReturn(true).when(aspectRatioOverrides).shouldApplyUserMinAspectRatioOverride();
        assertFalse(mActivity.isResizeable());
        assertEquals(maxAspect, aspectRatioPolicy.getMaxAspectRatio(), 0 /* delta */);
        assertNotEquals(SCREEN_ORIENTATION_UNSPECIFIED, mActivity.getOverrideOrientation());
    }

    @Test
    public void testClearSizeCompat_resetOverrideConfig() {
        final int origDensity = 480;