diff options
-rw-r--r-- | services/core/java/com/android/server/wm/ActivityRecord.java | 29 | ||||
-rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java | 19 |
2 files changed, 42 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 5372abe970c7..5c2515502f91 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -286,6 +286,9 @@ import android.app.servertransaction.StopActivityItem; import android.app.servertransaction.TopResumedActivityChangeItem; import android.app.servertransaction.TransferSplashScreenViewStateItem; import android.app.usage.UsageEvents.Event; +import android.compat.annotation.ChangeId; +import android.compat.annotation.EnabledAfter; +import android.compat.annotation.Overridable; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -465,6 +468,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // finished destroying itself. private static final int DESTROY_TIMEOUT = 10 * 1000; + @ChangeId + @Overridable + @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM) + static final long UNIVERSAL_RESIZABLE_BY_DEFAULT = 357141415; + final ActivityTaskManagerService mAtmService; final ActivityCallerState mCallerState; @NonNull @@ -3179,11 +3187,20 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A * 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(); + if (info.applicationInfo.category == ApplicationInfo.CATEGORY_GAME) { + return false; + } + final boolean compatEnabled = Flags.universalResizableByDefault() + && mDisplayContent != null && mDisplayContent.getConfiguration() + .smallestScreenWidthDp >= WindowManager.LARGE_SCREEN_SMALLEST_SCREEN_WIDTH_DP + && mDisplayContent.getIgnoreOrientationRequest() + && info.isChangeEnabled(UNIVERSAL_RESIZABLE_BY_DEFAULT); + if (!compatEnabled && !mWmService.mConstants.mIgnoreActivityOrientationRequest) { + return false; + } + // If the user preference respects aspect ratio, then it becomes non-resizable. + return !mAppCompatController.getAppCompatOverrides().getAppCompatAspectRatioOverrides() + .shouldApplyUserMinAspectRatioOverride(); } boolean isResizeable() { @@ -8179,7 +8196,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A @ActivityInfo.ScreenOrientation protected int getOverrideOrientation() { int candidateOrientation = super.getOverrideOrientation(); - if (isUniversalResizeable() && ActivityInfo.isFixedOrientation(candidateOrientation)) { + if (ActivityInfo.isFixedOrientation(candidateOrientation) && isUniversalResizeable()) { candidateOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; } return mAppCompatController.getOrientationPolicy() diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java index adc969c40e35..72f4fa9158fb 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java @@ -4881,6 +4881,25 @@ public class SizeCompatTests extends WindowTestsBase { assertNotEquals(SCREEN_ORIENTATION_UNSPECIFIED, mActivity.getOverrideOrientation()); } + + @Test + @EnableCompatChanges({ActivityRecord.UNIVERSAL_RESIZABLE_BY_DEFAULT}) + public void testUniversalResizeableByDefault() { + mSetFlagsRule.enableFlags(Flags.FLAG_UNIVERSAL_RESIZABLE_BY_DEFAULT); + mDisplayContent.setIgnoreOrientationRequest(false); + setUpApp(mDisplayContent); + assertFalse(mActivity.isUniversalResizeable()); + + mDisplayContent.setIgnoreOrientationRequest(true); + final int swDp = mDisplayContent.getConfiguration().smallestScreenWidthDp; + if (swDp < WindowManager.LARGE_SCREEN_SMALLEST_SCREEN_WIDTH_DP) { + final int height = 100 + (int) (mDisplayContent.getDisplayMetrics().density + * WindowManager.LARGE_SCREEN_SMALLEST_SCREEN_WIDTH_DP); + resizeDisplay(mDisplayContent, 100 + height, height); + } + assertTrue(mActivity.isUniversalResizeable()); + } + @Test public void testClearSizeCompat_resetOverrideConfig() { final int origDensity = 480; |