Loading services/core/java/com/android/server/wm/ActivityRecord.java +15 −9 Original line number Diff line number Diff line Loading @@ -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(); } Loading Loading @@ -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() Loading services/core/java/com/android/server/wm/AppCompatAspectRatioPolicy.java +6 −3 Original line number Diff line number Diff line Loading @@ -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()) { Loading @@ -128,6 +125,9 @@ class AppCompatAspectRatioPolicy { mActivityRecord); if (!aspectRatioOverrides.shouldOverrideMinAspectRatio() && !shouldOverrideMinAspectRatioForCamera) { if (mActivityRecord.isUniversalResizeable()) { return 0; } return info.getMinAspectRatio(); } Loading Loading @@ -170,6 +170,9 @@ class AppCompatAspectRatioPolicy { if (mTransparentPolicy.isRunning()) { return mTransparentPolicy.getInheritedMaxAspectRatio(); } if (mActivityRecord.isUniversalResizeable()) { return 0; } return mActivityRecord.info.getMaxAspectRatio(); } Loading services/core/java/com/android/server/wm/DesktopAppCompatAspectRatioPolicy.java +6 −4 Original line number Diff line number Diff line Loading @@ -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)) { Loading @@ -203,6 +199,9 @@ public class DesktopAppCompatAspectRatioPolicy { && dc.mAppCompatCameraPolicy.shouldOverrideMinAspectRatioForCamera(mActivityRecord); if (!aspectRatioOverrides.shouldOverrideMinAspectRatio() && !shouldOverrideMinAspectRatioForCamera) { if (mActivityRecord.isUniversalResizeable()) { return 0; } return info.getMinAspectRatio(); } Loading Loading @@ -246,6 +245,9 @@ public class DesktopAppCompatAspectRatioPolicy { if (mTransparentPolicy.isRunning()) { return mTransparentPolicy.getInheritedMaxAspectRatio(); } if (mActivityRecord.isUniversalResizeable()) { return 0; } return mActivityRecord.info.getMaxAspectRatio(); } Loading services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +33 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading
services/core/java/com/android/server/wm/ActivityRecord.java +15 −9 Original line number Diff line number Diff line Loading @@ -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(); } Loading Loading @@ -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() Loading
services/core/java/com/android/server/wm/AppCompatAspectRatioPolicy.java +6 −3 Original line number Diff line number Diff line Loading @@ -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()) { Loading @@ -128,6 +125,9 @@ class AppCompatAspectRatioPolicy { mActivityRecord); if (!aspectRatioOverrides.shouldOverrideMinAspectRatio() && !shouldOverrideMinAspectRatioForCamera) { if (mActivityRecord.isUniversalResizeable()) { return 0; } return info.getMinAspectRatio(); } Loading Loading @@ -170,6 +170,9 @@ class AppCompatAspectRatioPolicy { if (mTransparentPolicy.isRunning()) { return mTransparentPolicy.getInheritedMaxAspectRatio(); } if (mActivityRecord.isUniversalResizeable()) { return 0; } return mActivityRecord.info.getMaxAspectRatio(); } Loading
services/core/java/com/android/server/wm/DesktopAppCompatAspectRatioPolicy.java +6 −4 Original line number Diff line number Diff line Loading @@ -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)) { Loading @@ -203,6 +199,9 @@ public class DesktopAppCompatAspectRatioPolicy { && dc.mAppCompatCameraPolicy.shouldOverrideMinAspectRatioForCamera(mActivityRecord); if (!aspectRatioOverrides.shouldOverrideMinAspectRatio() && !shouldOverrideMinAspectRatioForCamera) { if (mActivityRecord.isUniversalResizeable()) { return 0; } return info.getMinAspectRatio(); } Loading Loading @@ -246,6 +245,9 @@ public class DesktopAppCompatAspectRatioPolicy { if (mTransparentPolicy.isRunning()) { return mTransparentPolicy.getInheritedMaxAspectRatio(); } if (mActivityRecord.isUniversalResizeable()) { return 0; } return mActivityRecord.info.getMaxAspectRatio(); } Loading
services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +33 −0 Original line number Diff line number Diff line Loading @@ -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; Loading