From 77840f9122750a650388551a4efac5990ddb94ff Mon Sep 17 00:00:00 2001 From: Andrii Kulian Date: Tue, 9 May 2017 14:20:42 -0700 Subject: [PATCH] Organize multi-window enabling Use AMS#mSupportsMultiWindow to indicate if some form of multi-window is supported. - If no multi-window implementation is enabled, this will be always set to false. - If a corresponding config is set to false, it will disable all forms of multi-window. Bug: 38173505 Test: android.server.cts Change-Id: I7efe07e2fe073891dd55844979156831097c28b7 --- .../android/server/am/ActivityManagerService.java | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index b5f8a092f805..c9df7c9e7249 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -1472,6 +1472,20 @@ public class ActivityManagerService extends IActivityManager.Stub boolean mOrigWaitForDebugger = false; boolean mAlwaysFinishActivities = false; boolean mForceResizableActivities; + /** + * Flag that indicates if multi-window is enabled. + * + * For any particular form of multi-window to be enabled, generic multi-window must be enabled + * in {@link com.android.internal.R.bool.config_supportsMultiWindow} config or + * {@link Settings.Global#DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES} development option set. + * At least one of the forms of multi-window must be enabled in order for this flag to be + * initialized to 'true'. + * + * @see #mSupportsSplitScreenMultiWindow + * @see #mSupportsFreeformWindowManagement + * @see #mSupportsPictureInPicture + * @see #mSupportsMultiDisplay + */ boolean mSupportsMultiWindow; boolean mSupportsSplitScreenMultiWindow; boolean mSupportsFreeformWindowManagement; @@ -13923,16 +13937,23 @@ public class ActivityManagerService extends IActivityManager.Stub mAlwaysFinishActivities = alwaysFinishActivities; mSupportsLeanbackOnly = supportsLeanbackOnly; mForceResizableActivities = forceResizable; - if (supportsMultiWindow || forceResizable) { + final boolean multiWindowFormEnabled = freeformWindowManagement + || supportsSplitScreenMultiWindow + || supportsPictureInPicture + || supportsMultiDisplay; + if ((supportsMultiWindow || forceResizable) && multiWindowFormEnabled) { mSupportsMultiWindow = true; - mSupportsFreeformWindowManagement = freeformWindowManagement || forceResizable; + mSupportsFreeformWindowManagement = freeformWindowManagement; + mSupportsSplitScreenMultiWindow = supportsSplitScreenMultiWindow; + mSupportsPictureInPicture = supportsPictureInPicture; + mSupportsMultiDisplay = supportsMultiDisplay; } else { mSupportsMultiWindow = false; mSupportsFreeformWindowManagement = false; + mSupportsSplitScreenMultiWindow = false; + mSupportsPictureInPicture = false; + mSupportsMultiDisplay = false; } - mSupportsSplitScreenMultiWindow = supportsSplitScreenMultiWindow; - mSupportsPictureInPicture = supportsPictureInPicture; - mSupportsMultiDisplay = supportsMultiDisplay; mWindowManager.setForceResizableTasks(mForceResizableActivities); mWindowManager.setSupportsPictureInPicture(mSupportsPictureInPicture); // This happens before any activities are started, so we can change global configuration -- 2.11.0