Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9532635b authored by Chris Li's avatar Chris Li Committed by Android (Google) Code Review
Browse files

Merge "Allow non-resizable apps in split-screen (2/n)"

parents 8df3b4e9 0ed6fd06
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -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();
    }

    /**
@@ -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);
    }

    /**
+3 −5
Original line number Diff line number Diff line
@@ -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) {
+7 −19
Original line number Diff line number Diff line
@@ -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);
    }

    /**
@@ -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;
    }

    /**
+2 −2
Original line number Diff line number Diff line
@@ -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.
@@ -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();
            }
        }

+2 −2
Original line number Diff line number Diff line
@@ -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);
@@ -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;