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

Commit 5406617b authored by Wei Sheng Shih's avatar Wei Sheng Shih Committed by Automerger Merge Worker
Browse files

Merge "Fix the root task of secondary split screen could be overwritten." into...

Merge "Fix the root task of secondary split screen could be overwritten." into rvc-dev am: 67a056a9

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11716093

Change-Id: Ia0619f4429508d84386f68e16871a294dcf248e6
parents 6da6bf84 67a056a9
Loading
Loading
Loading
Loading
+22 −9
Original line number Diff line number Diff line
@@ -1742,21 +1742,23 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> {
        // reparenting stack finished.
        // Keep the order from bottom to top.
        int numStacks = getStackCount();

        final boolean splitScreenActivated = toDisplayArea.isSplitScreenModeActivated();
        final ActivityStack rootStack = splitScreenActivated ? toDisplayArea
                .getTopStackInWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY) : null;
        for (int stackNdx = 0; stackNdx < numStacks; stackNdx++) {
            final ActivityStack stack = getStackAt(stackNdx);
            // Always finish non-standard type stacks.
            if (destroyContentOnRemoval || !stack.isActivityTypeStandardOrUndefined()) {
                stack.finishAllActivitiesImmediately();
            } else {
                // If default display is in split-window mode, set windowing mode of the
                // stack to split-screen secondary. Otherwise, set the windowing mode to
                // undefined by default to let stack inherited the windowing mode from the
                // new display.
                final int windowingMode = toDisplayArea.isSplitScreenModeActivated()
                        ? WINDOWING_MODE_SPLIT_SCREEN_SECONDARY
                        : WINDOWING_MODE_UNDEFINED;
                stack.reparent(toDisplayArea, true /* onTop */);
                stack.setWindowingMode(windowingMode);
                // Reparent the stack to the root task of secondary-split-screen or display area.
                stack.reparent(stack.supportsSplitScreenWindowingMode() && rootStack != null
                        ? rootStack : toDisplayArea, POSITION_TOP);

                // Set the windowing mode to undefined by default to let the stack inherited the
                // windowing mode.
                stack.setWindowingMode(WINDOWING_MODE_UNDEFINED);
                lastReparentedStack = stack;
            }
            // Stacks may be removed from this display. Ensure each stack will be processed
@@ -1764,6 +1766,17 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> {
            stackNdx -= numStacks - getStackCount();
            numStacks = getStackCount();
        }
        if (lastReparentedStack != null && splitScreenActivated) {
            if (!lastReparentedStack.supportsSplitScreenWindowingMode()) {
                mAtmService.getTaskChangeNotificationController()
                        .notifyActivityDismissingDockedStack();
                toDisplayArea.onSplitScreenModeDismissed(lastReparentedStack);
            } else if (rootStack != null) {
                // update focus
                rootStack.moveToFront("display-removed");
            }
        }

        mRemoved = true;

        return lastReparentedStack;