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

Commit 28bfa974 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Reuse and reparent one-level root task to another display" into rvc-dev am: 46f0be1f

Change-Id: Iee5182eae95b3c3ef833be4cbd5a5a9781f3eaba
parents 02690f94 46f0be1f
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -4432,6 +4432,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
            position = findPositionForStack(position, stack, true /* adding */);

            super.addChild(stack, position);
            mAtmService.updateSleepIfNeededLocked();

            // The reparenting case is handled in WindowContainer.
            if (!stack.mReparenting) {
@@ -4443,6 +4444,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
        protected void removeChild(ActivityStack stack) {
            super.removeChild(stack);
            mDisplayContent.onStackRemoved(stack);
            mAtmService.updateSleepIfNeededLocked();
            removeStackReferenceIfNeeded(stack);
        }

@@ -5648,7 +5650,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
    void addStack(ActivityStack stack, int position) {
        setStackOnDisplay(stack, position);
        positionStackAt(stack, position);
        mAtmService.updateSleepIfNeededLocked();
    }

    void addStackReferenceIfNeeded(ActivityStack stack) {
@@ -5667,7 +5668,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
            mPreferredTopFocusableStack = null;
        }
        releaseSelfIfNeeded();
        mAtmService.updateSleepIfNeededLocked();
        onStackOrderChanged(stack);
    }

+9 −1
Original line number Diff line number Diff line
@@ -2852,7 +2852,8 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
     * @param candidateTask The possible task the activity might be put in.
     * @return Existing stack if there is a valid one, new dynamic stack if it is valid or null.
     */
    private ActivityStack getValidLaunchStackOnDisplay(int displayId, @NonNull ActivityRecord r,
    @VisibleForTesting
    ActivityStack getValidLaunchStackOnDisplay(int displayId, @NonNull ActivityRecord r,
            @Nullable Task candidateTask, @Nullable ActivityOptions options,
            @Nullable LaunchParamsController.LaunchParams launchParams) {
        final DisplayContent displayContent = getDisplayContentOrCreate(displayId);
@@ -2873,6 +2874,13 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
            if (attachedDisplayId == INVALID_DISPLAY || attachedDisplayId == displayId) {
                return candidateTask.getStack();
            }
            // Or the candidate task is already a root task that can be reused by reparenting
            // it to the target display.
            if (candidateTask.isRootTask()) {
                final ActivityStack stack = candidateTask.getStack();
                displayContent.moveStackToDisplay(stack, true /* onTop */);
                return stack;
            }
        }

        int windowingMode;
+16 −0
Original line number Diff line number Diff line
@@ -787,6 +787,22 @@ public class RootActivityContainerTests extends ActivityTestsBase {
                secondaryDisplay.mDisplayId, result.getDisplayId());
    }

    @Test
    public void testGetValidLaunchStackOnDisplayWithCandidateRootTask() {
        // Create a root task with an activity on secondary display.
        final TestDisplayContent secondaryDisplay = new TestDisplayContent.Builder(mService, 300,
                600).build();
        final Task task = new ActivityTestsBase.StackBuilder(mRootWindowContainer).setDisplay(
                secondaryDisplay).build();
        final ActivityRecord activity = new ActivityTestsBase.ActivityBuilder(mService)
                .setTask(task).build();

        // Make sure the root task is valid and can be reused on default display.
        final ActivityStack stack = mRootWindowContainer.getValidLaunchStackOnDisplay(
                DEFAULT_DISPLAY, activity, task, null, null);
        assertEquals(task, stack);
    }

    @Test
    public void testSwitchUser_missingHomeRootTask() {
        doReturn(mFullscreenStack).when(mRootWindowContainer).getTopDisplayFocusedStack();