Loading core/api/test-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -798,6 +798,7 @@ package android.content.pm { field public static final long OVERRIDE_MIN_ASPECT_RATIO_MEDIUM = 180326845L; // 0xabf91bdL field public static final float OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE = 1.5f; field public static final long OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY = 203647190L; // 0xc2368d6L field public static final long OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN = 208648326L; // 0xc6fb886L field public static final int RESIZE_MODE_RESIZEABLE = 2; // 0x2 } Loading core/java/android/content/pm/ActivityInfo.java +23 −29 Original line number Diff line number Diff line Loading @@ -1108,6 +1108,17 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { @TestApi public static final float OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE = 16 / 9f; /** * Enables the use of split screen aspect ratio. This allows an app to use all the available * space in split mode avoiding letterboxing. * @hide */ @ChangeId @Disabled @Overridable @TestApi public static final long OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN = 208648326L; /** * Compares activity window layout min width/height with require space for multi window to * determine if it can be put into multi window mode. Loading Loading @@ -1317,8 +1328,8 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { * Returns true if the activity has maximum or minimum aspect ratio. * @hide */ public boolean hasFixedAspectRatio(@ScreenOrientation int orientation) { return getMaxAspectRatio() != 0 || getMinAspectRatio(orientation) != 0; public boolean hasFixedAspectRatio() { return getMaxAspectRatio() != 0 || getMinAspectRatio() != 0; } /** Loading Loading @@ -1460,30 +1471,10 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { } /** * Returns the min aspect ratio of this activity. * * This takes into account the minimum aspect ratio as defined in the app's manifest and * possible overrides as per OVERRIDE_MIN_ASPECT_RATIO. * * In the rare cases where the manifest minimum aspect ratio is required, use * {@code getManifestMinAspectRatio}. * Returns the min aspect ratio of this activity as defined in the manifest file. * @hide */ public float getMinAspectRatio(@ScreenOrientation int orientation) { if (applicationInfo == null || !isChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO) || ( isChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY) && !isFixedOrientationPortrait(orientation))) { return mMinAspectRatio; } if (isChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO_LARGE)) { return Math.max(OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE, mMinAspectRatio); } if (isChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO_MEDIUM)) { return Math.max(OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE, mMinAspectRatio); } public float getMinAspectRatio() { return mMinAspectRatio; } Loading Loading @@ -1512,7 +1503,13 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { } } private boolean isChangeEnabled(long changeId) { /** * Checks if a changeId is enabled for the current user * @param changeId The changeId to verify * @return True of the changeId is enabled * @hide */ public boolean isChangeEnabled(long changeId) { return CompatChanges.isChangeEnabled(changeId, applicationInfo.packageName, UserHandle.getUserHandleForUid(applicationInfo.uid)); } Loading Loading @@ -1633,12 +1630,9 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { if (getMaxAspectRatio() != 0) { pw.println(prefix + "maxAspectRatio=" + getMaxAspectRatio()); } final float minAspectRatio = getMinAspectRatio(screenOrientation); final float minAspectRatio = getMinAspectRatio(); if (minAspectRatio != 0) { pw.println(prefix + "minAspectRatio=" + minAspectRatio); if (getManifestMinAspectRatio() != minAspectRatio) { pw.println(prefix + "getManifestMinAspectRatio=" + getManifestMinAspectRatio()); } } if (supportsSizeChanges) { pw.println(prefix + "supportsSizeChanges=true"); Loading services/core/java/com/android/server/wm/ActivityRecord.java +28 −3 Original line number Diff line number Diff line Loading @@ -78,6 +78,11 @@ import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_ALWAYS; import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_DEFAULT; import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_IF_ALLOWLISTED; import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_NEVER; import static android.content.pm.ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO; 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_TO_ALIGN_WITH_SPLIT_SCREEN; import static android.content.pm.ActivityInfo.PERSIST_ACROSS_REBOOTS; import static android.content.pm.ActivityInfo.PERSIST_ROOT_ONLY; import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZEABLE; Loading Loading @@ -8751,15 +8756,35 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A /** * Returns the min aspect ratio of this activity. */ private float getMinAspectRatio() { return info.getMinAspectRatio(getRequestedOrientation()); float getMinAspectRatio() { if (info.applicationInfo == null || !info.isChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO) || ( info.isChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY) && !ActivityInfo.isFixedOrientationPortrait(getRequestedOrientation()))) { return info.getMinAspectRatio(); } if (info.isChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN)) { return Math.max(mLetterboxUiController.getSplitScreenAspectRatio(), info.getMinAspectRatio()); } if (info.isChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO_LARGE)) { return Math.max(ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE, info.getMinAspectRatio()); } if (info.isChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO_MEDIUM)) { return Math.max(ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE, info.getMinAspectRatio()); } return info.getMinAspectRatio(); } /** * Returns true if the activity has maximum or minimum aspect ratio. */ private boolean hasFixedAspectRatio() { return info.hasFixedAspectRatio(getRequestedOrientation()); return info.getMaxAspectRatio() != 0 || getMinAspectRatio() != 0; } /** Loading services/core/java/com/android/server/wm/LaunchParamsUtil.java +3 −3 Original line number Diff line number Diff line Loading @@ -63,7 +63,7 @@ class LaunchParamsUtil { * Calculate the default size for a freeform environment. |defaultSize| is used as the default * DP size, but if this is null, the portrait phone size is used. */ static Size getDefaultFreeformSize(@NonNull ActivityInfo info, static Size getDefaultFreeformSize(@NonNull ActivityRecord activityRecord, @NonNull TaskDisplayArea displayArea, @NonNull ActivityInfo.WindowLayout layout, int orientation, @NonNull Rect stableBounds) { Loading Loading @@ -98,8 +98,8 @@ class LaunchParamsUtil { final float aspectRatio = (float) Math.max(width, height) / (float) Math.min(width, height); // Aspect ratio requirements. final float minAspectRatio = info.getMinAspectRatio(orientation); final float maxAspectRatio = info.getMaxAspectRatio(); final float minAspectRatio = activityRecord.getMinAspectRatio(); final float maxAspectRatio = activityRecord.info.getMaxAspectRatio(); // Adjust the width and height to the aspect ratio requirements. int adjWidth = width; Loading services/core/java/com/android/server/wm/LetterboxUiController.java +4 −0 Original line number Diff line number Diff line Loading @@ -257,6 +257,10 @@ final class LetterboxUiController { : mLetterboxConfiguration.getFixedOrientationLetterboxAspectRatio(); } return getSplitScreenAspectRatio(); } float getSplitScreenAspectRatio() { int dividerWindowWidth = getResources().getDimensionPixelSize(R.dimen.docked_stack_divider_thickness); int dividerInsets = Loading Loading
core/api/test-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -798,6 +798,7 @@ package android.content.pm { field public static final long OVERRIDE_MIN_ASPECT_RATIO_MEDIUM = 180326845L; // 0xabf91bdL field public static final float OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE = 1.5f; field public static final long OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY = 203647190L; // 0xc2368d6L field public static final long OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN = 208648326L; // 0xc6fb886L field public static final int RESIZE_MODE_RESIZEABLE = 2; // 0x2 } Loading
core/java/android/content/pm/ActivityInfo.java +23 −29 Original line number Diff line number Diff line Loading @@ -1108,6 +1108,17 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { @TestApi public static final float OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE = 16 / 9f; /** * Enables the use of split screen aspect ratio. This allows an app to use all the available * space in split mode avoiding letterboxing. * @hide */ @ChangeId @Disabled @Overridable @TestApi public static final long OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN = 208648326L; /** * Compares activity window layout min width/height with require space for multi window to * determine if it can be put into multi window mode. Loading Loading @@ -1317,8 +1328,8 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { * Returns true if the activity has maximum or minimum aspect ratio. * @hide */ public boolean hasFixedAspectRatio(@ScreenOrientation int orientation) { return getMaxAspectRatio() != 0 || getMinAspectRatio(orientation) != 0; public boolean hasFixedAspectRatio() { return getMaxAspectRatio() != 0 || getMinAspectRatio() != 0; } /** Loading Loading @@ -1460,30 +1471,10 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { } /** * Returns the min aspect ratio of this activity. * * This takes into account the minimum aspect ratio as defined in the app's manifest and * possible overrides as per OVERRIDE_MIN_ASPECT_RATIO. * * In the rare cases where the manifest minimum aspect ratio is required, use * {@code getManifestMinAspectRatio}. * Returns the min aspect ratio of this activity as defined in the manifest file. * @hide */ public float getMinAspectRatio(@ScreenOrientation int orientation) { if (applicationInfo == null || !isChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO) || ( isChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY) && !isFixedOrientationPortrait(orientation))) { return mMinAspectRatio; } if (isChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO_LARGE)) { return Math.max(OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE, mMinAspectRatio); } if (isChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO_MEDIUM)) { return Math.max(OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE, mMinAspectRatio); } public float getMinAspectRatio() { return mMinAspectRatio; } Loading Loading @@ -1512,7 +1503,13 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { } } private boolean isChangeEnabled(long changeId) { /** * Checks if a changeId is enabled for the current user * @param changeId The changeId to verify * @return True of the changeId is enabled * @hide */ public boolean isChangeEnabled(long changeId) { return CompatChanges.isChangeEnabled(changeId, applicationInfo.packageName, UserHandle.getUserHandleForUid(applicationInfo.uid)); } Loading Loading @@ -1633,12 +1630,9 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { if (getMaxAspectRatio() != 0) { pw.println(prefix + "maxAspectRatio=" + getMaxAspectRatio()); } final float minAspectRatio = getMinAspectRatio(screenOrientation); final float minAspectRatio = getMinAspectRatio(); if (minAspectRatio != 0) { pw.println(prefix + "minAspectRatio=" + minAspectRatio); if (getManifestMinAspectRatio() != minAspectRatio) { pw.println(prefix + "getManifestMinAspectRatio=" + getManifestMinAspectRatio()); } } if (supportsSizeChanges) { pw.println(prefix + "supportsSizeChanges=true"); Loading
services/core/java/com/android/server/wm/ActivityRecord.java +28 −3 Original line number Diff line number Diff line Loading @@ -78,6 +78,11 @@ import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_ALWAYS; import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_DEFAULT; import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_IF_ALLOWLISTED; import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_NEVER; import static android.content.pm.ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO; 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_TO_ALIGN_WITH_SPLIT_SCREEN; import static android.content.pm.ActivityInfo.PERSIST_ACROSS_REBOOTS; import static android.content.pm.ActivityInfo.PERSIST_ROOT_ONLY; import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZEABLE; Loading Loading @@ -8751,15 +8756,35 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A /** * Returns the min aspect ratio of this activity. */ private float getMinAspectRatio() { return info.getMinAspectRatio(getRequestedOrientation()); float getMinAspectRatio() { if (info.applicationInfo == null || !info.isChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO) || ( info.isChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY) && !ActivityInfo.isFixedOrientationPortrait(getRequestedOrientation()))) { return info.getMinAspectRatio(); } if (info.isChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN)) { return Math.max(mLetterboxUiController.getSplitScreenAspectRatio(), info.getMinAspectRatio()); } if (info.isChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO_LARGE)) { return Math.max(ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE, info.getMinAspectRatio()); } if (info.isChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO_MEDIUM)) { return Math.max(ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE, info.getMinAspectRatio()); } return info.getMinAspectRatio(); } /** * Returns true if the activity has maximum or minimum aspect ratio. */ private boolean hasFixedAspectRatio() { return info.hasFixedAspectRatio(getRequestedOrientation()); return info.getMaxAspectRatio() != 0 || getMinAspectRatio() != 0; } /** Loading
services/core/java/com/android/server/wm/LaunchParamsUtil.java +3 −3 Original line number Diff line number Diff line Loading @@ -63,7 +63,7 @@ class LaunchParamsUtil { * Calculate the default size for a freeform environment. |defaultSize| is used as the default * DP size, but if this is null, the portrait phone size is used. */ static Size getDefaultFreeformSize(@NonNull ActivityInfo info, static Size getDefaultFreeformSize(@NonNull ActivityRecord activityRecord, @NonNull TaskDisplayArea displayArea, @NonNull ActivityInfo.WindowLayout layout, int orientation, @NonNull Rect stableBounds) { Loading Loading @@ -98,8 +98,8 @@ class LaunchParamsUtil { final float aspectRatio = (float) Math.max(width, height) / (float) Math.min(width, height); // Aspect ratio requirements. final float minAspectRatio = info.getMinAspectRatio(orientation); final float maxAspectRatio = info.getMaxAspectRatio(); final float minAspectRatio = activityRecord.getMinAspectRatio(); final float maxAspectRatio = activityRecord.info.getMaxAspectRatio(); // Adjust the width and height to the aspect ratio requirements. int adjWidth = width; Loading
services/core/java/com/android/server/wm/LetterboxUiController.java +4 −0 Original line number Diff line number Diff line Loading @@ -257,6 +257,10 @@ final class LetterboxUiController { : mLetterboxConfiguration.getFixedOrientationLetterboxAspectRatio(); } return getSplitScreenAspectRatio(); } float getSplitScreenAspectRatio() { int dividerWindowWidth = getResources().getDimensionPixelSize(R.dimen.docked_stack_divider_thickness); int dividerInsets = Loading