Loading services/core/java/com/android/server/wm/ActivityRecord.java +5 −7 Original line number Diff line number Diff line Loading @@ -2288,7 +2288,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // An activity can not be docked even if it is considered resizeable because it only // supports picture-in-picture mode but has a non-resizeable resizeMode return super.supportsSplitScreenWindowingMode() && mAtmService.mSupportsSplitScreenMultiWindow && supportsResizeableMultiWindow(); && mAtmService.mSupportsSplitScreenMultiWindow && supportsMultiWindow(); } /** Loading @@ -2298,17 +2298,15 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A boolean supportsFreeform() { return mAtmService.mSupportsFreeformWindowManagement // Either the activity is resizable, or we allow size compat in freeform. && (supportsResizeableMultiWindow() || mAtmService.mSizeCompatFreeform); && (supportsMultiWindow() || mAtmService.mSizeCompatFreeform); } /** * @return whether this activity supports non-PiP multi-window. * @return whether this activity supports multi-window. */ boolean supportsResizeableMultiWindow() { boolean supportsMultiWindow() { return mAtmService.mSupportsMultiWindow && !isActivityTypeHome() && (ActivityInfo.isResizeableMode(info.resizeMode) || mAtmService.mForceResizableActivities || mAtmService.mSupportsNonResizableMultiWindow); && (isResizeable() || mAtmService.mSupportsNonResizableMultiWindow); } /** Loading services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +3 −5 Original line number Diff line number Diff line Loading @@ -1704,15 +1704,13 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { + " task=" + task); } // It is ok to move the task to multi window only if the task supports multi window. if (inMultiWindowMode && !stack.inPinnedWindowingMode() && task.supportsNonPipMultiWindow()) { return stack; if (stack.inPinnedWindowingMode()) { throw new IllegalArgumentException("No support to reparent to PIP, task=" + task); } // Leave the task in its current stack or a fullscreen stack if it isn't resizeable and the // preferred stack is in multi-window mode. if (inMultiWindowMode && !task.isResizeable()) { if (inMultiWindowMode && !task.supportsMultiWindow()) { Slog.w(TAG, "Can not move unresizeable task=" + task + " to multi-window stack=" + stack + " Moving to a fullscreen stack instead."); if (prevStack != null) { Loading services/core/java/com/android/server/wm/Task.java +7 −19 Original line number Diff line number Diff line Loading @@ -1966,26 +1966,18 @@ class Task extends WindowContainer<WindowContainer> { } private boolean supportsSplitScreenWindowingModeInner() { // A task can not be docked even if it is considered resizeable because it only supports // picture-in-picture mode but has a non-resizeable resizeMode return super.supportsSplitScreenWindowingMode() && mAtmService.mSupportsSplitScreenMultiWindow && (mAtmService.mForceResizableActivities || (isResizeable(false /* checkSupportsPip */) && !ActivityInfo.isPreserveOrientationMode(mResizeMode)) || mAtmService.mSupportsNonResizableMultiWindow); && supportsMultiWindow(); } boolean supportsFreeform() { return mAtmService.mSupportsFreeformWindowManagement && (isResizeable(false /* checkSupportsPip */) || mAtmService.mSupportsNonResizableMultiWindow); return mAtmService.mSupportsFreeformWindowManagement && supportsMultiWindow(); } boolean supportsNonPipMultiWindow() { boolean supportsMultiWindow() { return mAtmService.mSupportsMultiWindow && (isResizeable(false /* checkSupportsPip */) || mAtmService.mSupportsNonResizableMultiWindow); && (isResizeable() || mAtmService.mSupportsNonResizableMultiWindow); } /** Loading Loading @@ -3396,15 +3388,11 @@ class Task extends WindowContainer<WindowContainer> { } } boolean isResizeable(boolean checkSupportsPip) { boolean isResizeable() { final boolean forceResizable = mAtmService.mForceResizableActivities && getActivityType() == ACTIVITY_TYPE_STANDARD; return (forceResizable || ActivityInfo.isResizeableMode(mResizeMode) || (checkSupportsPip && mSupportsPictureInPicture)); } boolean isResizeable() { return isResizeable(true /* checkSupportsPip */); return forceResizable || ActivityInfo.isResizeableMode(mResizeMode) || mSupportsPictureInPicture; } /** Loading services/core/java/com/android/server/wm/TaskDisplayArea.java +2 −2 Original line number Diff line number Diff line Loading @@ -1486,7 +1486,7 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> { if (task != null) { supportsSplitScreen = task.supportsSplitScreenWindowingMode(); supportsFreeform = task.supportsFreeform(); supportsMultiWindow = task.supportsNonPipMultiWindow() supportsMultiWindow = task.supportsMultiWindow() // When the activity needs to be moved to PIP while the Task is not in PIP, // it can be moved to a new created PIP Task, so WINDOWING_MODE_PINNED is // always valid for Task as long as the device supports it. Loading @@ -1495,7 +1495,7 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> { supportsSplitScreen = r.supportsSplitScreenWindowingMode(); supportsFreeform = r.supportsFreeform(); supportsPip = r.supportsPictureInPicture(); supportsMultiWindow = r.supportsResizeableMultiWindow() || supportsPip; supportsMultiWindow = r.supportsMultiWindow(); } } Loading services/core/java/com/android/server/wm/WindowOrganizerController.java +2 −2 Original line number Diff line number Diff line Loading @@ -500,7 +500,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub + " newParent=" + newParent + " task=" + task); return 0; } if (!task.supportsNonPipMultiWindow()) { if (!task.supportsMultiWindow()) { Slog.w(TAG, "Can't support task that doesn't support multi-window" + " mode in multi-window mode... newParent=" + newParent + " task=" + task); Loading Loading @@ -580,7 +580,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub // are reparenting from. return; } if (newParentInMultiWindow && !task.supportsNonPipMultiWindow()) { if (newParentInMultiWindow && !task.supportsMultiWindow()) { Slog.e(TAG, "reparentChildrenTasksHierarchyOp non-resizeable task to multi window," + " task=" + task); return; Loading Loading
services/core/java/com/android/server/wm/ActivityRecord.java +5 −7 Original line number Diff line number Diff line Loading @@ -2288,7 +2288,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // An activity can not be docked even if it is considered resizeable because it only // supports picture-in-picture mode but has a non-resizeable resizeMode return super.supportsSplitScreenWindowingMode() && mAtmService.mSupportsSplitScreenMultiWindow && supportsResizeableMultiWindow(); && mAtmService.mSupportsSplitScreenMultiWindow && supportsMultiWindow(); } /** Loading @@ -2298,17 +2298,15 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A boolean supportsFreeform() { return mAtmService.mSupportsFreeformWindowManagement // Either the activity is resizable, or we allow size compat in freeform. && (supportsResizeableMultiWindow() || mAtmService.mSizeCompatFreeform); && (supportsMultiWindow() || mAtmService.mSizeCompatFreeform); } /** * @return whether this activity supports non-PiP multi-window. * @return whether this activity supports multi-window. */ boolean supportsResizeableMultiWindow() { boolean supportsMultiWindow() { return mAtmService.mSupportsMultiWindow && !isActivityTypeHome() && (ActivityInfo.isResizeableMode(info.resizeMode) || mAtmService.mForceResizableActivities || mAtmService.mSupportsNonResizableMultiWindow); && (isResizeable() || mAtmService.mSupportsNonResizableMultiWindow); } /** Loading
services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +3 −5 Original line number Diff line number Diff line Loading @@ -1704,15 +1704,13 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { + " task=" + task); } // It is ok to move the task to multi window only if the task supports multi window. if (inMultiWindowMode && !stack.inPinnedWindowingMode() && task.supportsNonPipMultiWindow()) { return stack; if (stack.inPinnedWindowingMode()) { throw new IllegalArgumentException("No support to reparent to PIP, task=" + task); } // Leave the task in its current stack or a fullscreen stack if it isn't resizeable and the // preferred stack is in multi-window mode. if (inMultiWindowMode && !task.isResizeable()) { if (inMultiWindowMode && !task.supportsMultiWindow()) { Slog.w(TAG, "Can not move unresizeable task=" + task + " to multi-window stack=" + stack + " Moving to a fullscreen stack instead."); if (prevStack != null) { Loading
services/core/java/com/android/server/wm/Task.java +7 −19 Original line number Diff line number Diff line Loading @@ -1966,26 +1966,18 @@ class Task extends WindowContainer<WindowContainer> { } private boolean supportsSplitScreenWindowingModeInner() { // A task can not be docked even if it is considered resizeable because it only supports // picture-in-picture mode but has a non-resizeable resizeMode return super.supportsSplitScreenWindowingMode() && mAtmService.mSupportsSplitScreenMultiWindow && (mAtmService.mForceResizableActivities || (isResizeable(false /* checkSupportsPip */) && !ActivityInfo.isPreserveOrientationMode(mResizeMode)) || mAtmService.mSupportsNonResizableMultiWindow); && supportsMultiWindow(); } boolean supportsFreeform() { return mAtmService.mSupportsFreeformWindowManagement && (isResizeable(false /* checkSupportsPip */) || mAtmService.mSupportsNonResizableMultiWindow); return mAtmService.mSupportsFreeformWindowManagement && supportsMultiWindow(); } boolean supportsNonPipMultiWindow() { boolean supportsMultiWindow() { return mAtmService.mSupportsMultiWindow && (isResizeable(false /* checkSupportsPip */) || mAtmService.mSupportsNonResizableMultiWindow); && (isResizeable() || mAtmService.mSupportsNonResizableMultiWindow); } /** Loading Loading @@ -3396,15 +3388,11 @@ class Task extends WindowContainer<WindowContainer> { } } boolean isResizeable(boolean checkSupportsPip) { boolean isResizeable() { final boolean forceResizable = mAtmService.mForceResizableActivities && getActivityType() == ACTIVITY_TYPE_STANDARD; return (forceResizable || ActivityInfo.isResizeableMode(mResizeMode) || (checkSupportsPip && mSupportsPictureInPicture)); } boolean isResizeable() { return isResizeable(true /* checkSupportsPip */); return forceResizable || ActivityInfo.isResizeableMode(mResizeMode) || mSupportsPictureInPicture; } /** Loading
services/core/java/com/android/server/wm/TaskDisplayArea.java +2 −2 Original line number Diff line number Diff line Loading @@ -1486,7 +1486,7 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> { if (task != null) { supportsSplitScreen = task.supportsSplitScreenWindowingMode(); supportsFreeform = task.supportsFreeform(); supportsMultiWindow = task.supportsNonPipMultiWindow() supportsMultiWindow = task.supportsMultiWindow() // When the activity needs to be moved to PIP while the Task is not in PIP, // it can be moved to a new created PIP Task, so WINDOWING_MODE_PINNED is // always valid for Task as long as the device supports it. Loading @@ -1495,7 +1495,7 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> { supportsSplitScreen = r.supportsSplitScreenWindowingMode(); supportsFreeform = r.supportsFreeform(); supportsPip = r.supportsPictureInPicture(); supportsMultiWindow = r.supportsResizeableMultiWindow() || supportsPip; supportsMultiWindow = r.supportsMultiWindow(); } } Loading
services/core/java/com/android/server/wm/WindowOrganizerController.java +2 −2 Original line number Diff line number Diff line Loading @@ -500,7 +500,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub + " newParent=" + newParent + " task=" + task); return 0; } if (!task.supportsNonPipMultiWindow()) { if (!task.supportsMultiWindow()) { Slog.w(TAG, "Can't support task that doesn't support multi-window" + " mode in multi-window mode... newParent=" + newParent + " task=" + task); Loading Loading @@ -580,7 +580,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub // are reparenting from. return; } if (newParentInMultiWindow && !task.supportsNonPipMultiWindow()) { if (newParentInMultiWindow && !task.supportsMultiWindow()) { Slog.e(TAG, "reparentChildrenTasksHierarchyOp non-resizeable task to multi window," + " task=" + task); return; Loading