diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java index e28e4ad9ae9f4..a02fdd303dd83 100644 --- a/core/java/android/content/pm/ActivityInfo.java +++ b/core/java/android/content/pm/ActivityInfo.java @@ -22,6 +22,7 @@ import android.app.Activity; import android.app.compat.CompatChanges; import android.compat.annotation.ChangeId; import android.compat.annotation.Disabled; +import android.compat.annotation.EnabledSince; import android.compat.annotation.Overridable; import android.compat.annotation.UnsupportedAppUsage; import android.content.ComponentName; @@ -1040,6 +1041,14 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { @TestApi public static final float OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE = 16 / 9f; + /** + * Compares activity window layout min width/height with require space for multi window to + * determine if it can be put into multi window mode. + */ + @ChangeId + @EnabledSince(targetSdkVersion = Build.VERSION_CODES.S) + private static final long CHECK_MIN_WIDTH_HEIGHT_FOR_MULTI_WINDOW = 197654537L; + /** * Convert Java change bits to native. * @@ -1480,6 +1489,17 @@ public class ActivityInfo extends ComponentInfo implements Parcelable { } } + /** + * Whether we should compare activity window layout min width/height with require space for + * multi window to determine if it can be put into multi window mode. + * @hide + */ + public boolean shouldCheckMinWidthHeightForMultiWindow() { + return CompatChanges.isChangeEnabled(CHECK_MIN_WIDTH_HEIGHT_FOR_MULTI_WINDOW, + applicationInfo.packageName, + UserHandle.getUserHandleForUid(applicationInfo.uid)); + } + public void dump(Printer pw, String prefix) { dump(pw, prefix, DUMP_FLAG_ALL); } diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 8ace5e4aff87c..9133d8403ed6a 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -2801,7 +2801,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A final ActivityInfo.WindowLayout windowLayout = info.windowLayout; return windowLayout == null || tda.supportsActivityMinWidthHeightMultiWindow(windowLayout.minWidth, - windowLayout.minHeight); + windowLayout.minHeight, info); } /** diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java index 662b3d578b304..1e367dc78198f 100644 --- a/services/core/java/com/android/server/wm/TaskDisplayArea.java +++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java @@ -48,6 +48,7 @@ import android.annotation.ColorInt; import android.annotation.Nullable; import android.app.ActivityOptions; import android.app.WindowConfiguration; +import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.os.UserHandle; import android.util.IntArray; @@ -1705,13 +1706,17 @@ final class TaskDisplayArea extends DisplayArea { * Whether we can show activity requesting the given min width/height in multi window below * this {@link TaskDisplayArea}. */ - boolean supportsActivityMinWidthHeightMultiWindow(int minWidth, int minHeight) { - final int configRespectsActivityMinWidthHeightMultiWindow = - mAtmService.mRespectsActivityMinWidthHeightMultiWindow; + boolean supportsActivityMinWidthHeightMultiWindow(int minWidth, int minHeight, + @Nullable ActivityInfo activityInfo) { + if (activityInfo != null && !activityInfo.shouldCheckMinWidthHeightForMultiWindow()) { + return true; + } if (minWidth <= 0 && minHeight <= 0) { // No request min width/height. return true; } + final int configRespectsActivityMinWidthHeightMultiWindow = + mAtmService.mRespectsActivityMinWidthHeightMultiWindow; if (configRespectsActivityMinWidthHeightMultiWindow == -1) { // Device override to ignore min width/height. return true; diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java index f08ebba7839ed..bdcda825860f4 100644 --- a/services/core/java/com/android/server/wm/TaskFragment.java +++ b/services/core/java/com/android/server/wm/TaskFragment.java @@ -1772,7 +1772,9 @@ class TaskFragment extends WindowContainer { return false; } - return tda.supportsActivityMinWidthHeightMultiWindow(mMinWidth, mMinHeight); + final ActivityRecord rootActivity = getTask().getRootActivity(); + return tda.supportsActivityMinWidthHeightMultiWindow(mMinWidth, mMinHeight, + rootActivity != null ? rootActivity.info : null); } private int getTaskId() {