summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/ActivityManager.java10
-rw-r--r--core/res/res/values-watch/config.xml1
-rw-r--r--core/res/res/values/config.xml3
-rw-r--r--core/res/res/values/symbols.xml1
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java4
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerShellCommand.java30
-rw-r--r--services/core/java/com/android/server/am/TaskRecord.java2
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);
}