diff options
| -rw-r--r-- | core/java/android/app/ActivityManager.java | 10 | ||||
| -rw-r--r-- | core/res/res/values-watch/config.xml | 1 | ||||
| -rw-r--r-- | core/res/res/values/config.xml | 3 | ||||
| -rw-r--r-- | core/res/res/values/symbols.xml | 1 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 4 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerShellCommand.java | 30 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/TaskRecord.java | 2 |
7 files changed, 45 insertions, 6 deletions
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index f6f5472fda80..f04455b7306d 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -1002,6 +1002,16 @@ public class ActivityManager { } /** + * Returns true if the system supports split screen multi-window. + * @hide + */ + static public boolean supportsSplitScreenMultiWindow() { + return supportsMultiWindow() + && Resources.getSystem().getBoolean( + com.android.internal.R.bool.config_supportsSplitScreenMultiWindow); + } + + /** * Information you can set and retrieve about the current activity within the recent task list. */ public static class TaskDescription implements Parcelable { diff --git a/core/res/res/values-watch/config.xml b/core/res/res/values-watch/config.xml index d13d15468825..ac7b236ba981 100644 --- a/core/res/res/values-watch/config.xml +++ b/core/res/res/values-watch/config.xml @@ -65,4 +65,5 @@ <!-- The small screens of watch devices makes multi-window support undesireable. --> <bool name="config_supportsMultiWindow">false</bool> + <bool name="config_supportsSplitScreenMultiWindow">false</bool> </resources> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 9e75ff9d7b59..69c7b6012740 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2568,6 +2568,9 @@ E.g. freeform, split-screen, picture-in-picture. --> <bool name="config_supportsMultiWindow">true</bool> + <!-- True if the device supports split screen as a form of multi-window. --> + <bool name="config_supportsSplitScreenMultiWindow">true</bool> + <!-- True if the device requires AppWidgetService even if it does not have the PackageManager.FEATURE_APP_WIDGETS feature --> <bool name="config_enableAppWidgetService">false</bool> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index a85ddf1e54d6..dcb44d32bd15 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -307,6 +307,7 @@ <java-symbol type="bool" name="config_supportAudioSourceUnprocessed" /> <java-symbol type="bool" name="config_freeformWindowManagement" /> <java-symbol type="bool" name="config_supportsMultiWindow" /> + <java-symbol type="bool" name="config_supportsSplitScreenMultiWindow" /> <java-symbol type="bool" name="config_guestUserEphemeral" /> <java-symbol type="bool" name="config_localDisplaysMirrorContent" /> <java-symbol type="integer" name="config_defaultDisplayDefaultColorMode" /> diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 6e69e340eff8..4ea73e7399a3 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -1378,6 +1378,7 @@ public class ActivityManagerService extends IActivityManager.Stub boolean mAlwaysFinishActivities = false; boolean mForceResizableActivities; boolean mSupportsMultiWindow; + boolean mSupportsSplitScreenMultiWindow; boolean mSupportsFreeformWindowManagement; boolean mSupportsPictureInPicture; boolean mSupportsLeanbackOnly; @@ -13141,6 +13142,8 @@ public class ActivityManagerService extends IActivityManager.Stub mContext.getPackageManager().hasSystemFeature(FEATURE_PICTURE_IN_PICTURE); final boolean supportsMultiWindow = ActivityManager.supportsMultiWindow(); + final boolean supportsSplitScreenMultiWindow = + ActivityManager.supportsSplitScreenMultiWindow(); final String debugApp = Settings.Global.getString(resolver, DEBUG_APP); final boolean waitForDebugger = Settings.Global.getInt(resolver, WAIT_FOR_DEBUGGER, 0) != 0; final boolean alwaysFinishActivities = @@ -13176,6 +13179,7 @@ public class ActivityManagerService extends IActivityManager.Stub mSupportsFreeformWindowManagement = false; mSupportsPictureInPicture = false; } + mSupportsSplitScreenMultiWindow = supportsSplitScreenMultiWindow; mWindowManager.setForceResizableTasks(mForceResizableActivities); mWindowManager.setSupportsPictureInPicture(mSupportsPictureInPicture); // This happens before any activities are started, so we can change global configuration diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java index 14b843a8f638..814b05a95936 100644 --- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java +++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java @@ -233,6 +233,8 @@ final class ActivityManagerShellCommand extends ShellCommand { return runAttachAgent(pw); case "supports-multiwindow": return runSupportsMultiwindow(pw); + case "supports-split-screen-multi-window": + return runSupportsSplitScreenMultiwindow(pw); default: return handleDefaultCommands(cmd); } @@ -2300,20 +2302,36 @@ final class ActivityManagerShellCommand extends ShellCommand { } int runSupportsMultiwindow(PrintWriter pw) throws RemoteException { + final Resources res = getResources(pw); + if (res == null) { + return -1; + } + pw.println(res.getBoolean(com.android.internal.R.bool.config_supportsMultiWindow)); + return 0; + } + + int runSupportsSplitScreenMultiwindow(PrintWriter pw) throws RemoteException { + final Resources res = getResources(pw); + if (res == null) { + return -1; + } + pw.println( + res.getBoolean(com.android.internal.R.bool.config_supportsSplitScreenMultiWindow)); + return 0; + } + + private Resources getResources(PrintWriter pw) throws RemoteException { // system resources does not contain all the device configuration, construct it manually. Configuration config = mInterface.getConfiguration(); if (config == null) { pw.println("Error: Activity manager has no configuration"); - return -1; + return null; } final DisplayMetrics metrics = new DisplayMetrics(); metrics.setToDefaults(); - Resources res = new Resources(AssetManager.getSystem(), metrics, config); - - pw.println(res.getBoolean(com.android.internal.R.bool.config_supportsMultiWindow)); - return 0; + return new Resources(AssetManager.getSystem(), metrics, config); } @Override @@ -2495,6 +2513,8 @@ final class ActivityManagerShellCommand extends ShellCommand { pw.println(" Rtrieve the configuration and any recent configurations of the device."); pw.println(" supports-multiwindow"); pw.println(" Returns true if the device supports multiwindow."); + pw.println(" supports-split-screen-multi-window"); + pw.println(" Returns true if the device supports split screen multiwindow."); pw.println(" suppress-resize-config-changes <true|false>"); pw.println(" Suppresses configuration changes due to user resizing an activity/task."); pw.println(" set-inactive [--user <USER_ID>] <PACKAGE> true|false"); diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java index a6444bc88fed..9e28068b8b73 100644 --- a/services/core/java/com/android/server/am/TaskRecord.java +++ b/services/core/java/com/android/server/am/TaskRecord.java @@ -1104,7 +1104,7 @@ final class TaskRecord extends ConfigurationContainer { } boolean canGoInDockedStack() { - return isResizeable() && + return isResizeable() && mService.mSupportsSplitScreenMultiWindow && !ActivityInfo.isPreserveOrientationMode(mResizeMode); } |