diff options
3 files changed, 64 insertions, 0 deletions
diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java index 4f062090ca40..57ffed47bbe3 100644 --- a/core/java/android/content/pm/ActivityInfo.java +++ b/core/java/android/content/pm/ActivityInfo.java @@ -1331,6 +1331,7 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { * This change id is the gatekeeper for all treatments that force a given min aspect ratio. * Enabling this change will allow the following min aspect ratio treatments to be applied: * <ul> + * <li>OVERRIDE_MIN_ASPECT_RATIO_SMALL * <li>OVERRIDE_MIN_ASPECT_RATIO_MEDIUM * <li>OVERRIDE_MIN_ASPECT_RATIO_LARGE * </ul> @@ -1372,6 +1373,22 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { public static final long OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY = 203647190L; // buganizer id /** + * This change id sets the activity's min aspect ratio to a small value as defined by + * OVERRIDE_MIN_ASPECT_RATIO_SMALL_VALUE. + * + * This treatment only takes effect if OVERRIDE_MIN_ASPECT_RATIO is also enabled. + * @hide + */ + @ChangeId + @Overridable + @Disabled + // TODO(b/349060719): Add CTS tests. + public static final long OVERRIDE_MIN_ASPECT_RATIO_SMALL = 349045028L; // buganizer id + + /** @hide Small override aspect ratio, currently 4:3. */ + public static final float OVERRIDE_MIN_ASPECT_RATIO_SMALL_VALUE = 4 / 3f; + + /** * This change id sets the activity's min aspect ratio to a medium value as defined by * OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE. * diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 21155bb7e29e..4075632cd1c5 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -93,6 +93,7 @@ import static android.content.pm.ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_ import static android.content.pm.ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_LARGE; import static android.content.pm.ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_MEDIUM; import static android.content.pm.ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY; +import static android.content.pm.ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_SMALL; import static android.content.pm.ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN; import static android.content.pm.ActivityInfo.PERSIST_ACROSS_REBOOTS; import static android.content.pm.ActivityInfo.PERSIST_ROOT_ONLY; @@ -9921,6 +9922,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A return Math.max(ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE, info.getMinAspectRatio()); } + + if (info.isChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO_SMALL)) { + return Math.max(ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_SMALL_VALUE, + info.getMinAspectRatio()); + } return info.getMinAspectRatio(); } 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 3a854511e3de..64527cb63e45 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java @@ -1315,6 +1315,47 @@ public class SizeCompatTests extends WindowTestsBase { @Test @EnableCompatChanges({ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO, + ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_SMALL}) + public void testOverrideMinAspectRatioSmall_overridden() { + final int dh = 1200; + final int dw = 1000; + setUpDisplaySizeWithApp(dw, dh); + + // Create a size compat activity on the same task. + final ActivityRecord activity = getActivityBuilderOnSameTask() + .setScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) + .build(); + + final Rect bounds = activity.getBounds(); + assertEquals(dh, bounds.height()); + assertEquals(dh / ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_SMALL_VALUE, + bounds.width(), 0.5f); + } + + @Test + @EnableCompatChanges({ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO, + ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_SMALL}) + public void testOverrideMinAspectRatioSmall_notOverridden() { + final int dh = 1200; + final int dw = 1000; + setUpDisplaySizeWithApp(dw, dh); + + // Create a size compat activity on the same task. + final ActivityRecord activity = getActivityBuilderOnSameTask() + .setScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) + .setMinAspectRatio(OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE) + .build(); + + // Activity's requested aspect ratio is larger than OVERRIDE_MIN_ASPECT_RATIO_SMALL, + // so OVERRIDE_MIN_ASPECT_RATIO_SMALL is ignored. + final Rect bounds = activity.getBounds(); + assertEquals(dh, bounds.height()); + assertEquals(dh / OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE, + bounds.width(), 0.5f); + } + + @Test + @EnableCompatChanges({ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO, ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_MEDIUM}) public void testOverrideMinAspectRatioMedium() { setUpDisplaySizeWithApp(1000, 1200); |