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

Commit 35f762fb authored by Riddle Hsu's avatar Riddle Hsu Committed by Android (Google) Code Review
Browse files

Merge "Fix stack reference is not updated if the task is organized" into rvc-dev

parents 8862ee38 9adc55fd
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -1431,15 +1431,15 @@ class Task extends WindowContainer<WindowContainer> {

    @Override
    void removeChild(WindowContainer child) {
        // A rootable child task that is now being removed from an organized task. Making sure
        // the stack references is keep updated.
        if (mTaskOrganizer != null && mCreatedByOrganizer && child.asTask() != null) {
            getDisplayArea().removeStackReferenceIfNeeded((ActivityStack) child);
        }
        removeChild(child, "removeChild");
    }

    void removeChild(WindowContainer r, String reason) {
        // A rootable child task that is now being removed from an organized task. Making sure
        // the stack references is keep updated.
        if (mTaskOrganizer != null && mCreatedByOrganizer && r.asTask() != null) {
            getDisplayArea().removeStackReferenceIfNeeded((ActivityStack) r);
        }
        if (!mChildren.contains(r)) {
            Slog.e(TAG, "removeChild: r=" + r + " not found in t=" + this);
            return;
+19 −0
Original line number Diff line number Diff line
@@ -233,6 +233,25 @@ public class ActivityStackTests extends ActivityTestsBase {
        assertEquals(homeRoot.getParent(), secondaryTask.getParent());
    }

    @Test
    public void testRemoveOrganizedTask_UpdateStackReference() {
        final ActivityStack rootHomeTask = mDefaultTaskDisplayArea.getRootHomeTask();
        final ActivityRecord homeActivity = new ActivityBuilder(mService)
                .setStack(rootHomeTask)
                .setCreateTask(true)
                .build();
        final ActivityStack secondaryStack = (ActivityStack) WindowContainer.fromBinder(
                mService.mTaskOrganizerController.createRootTask(rootHomeTask.getDisplayId(),
                        WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).token.asBinder());

        rootHomeTask.reparent(secondaryStack, POSITION_TOP);
        assertEquals(secondaryStack, rootHomeTask.getParent());

        // This should call to {@link TaskDisplayArea#removeStackReferenceIfNeeded}.
        homeActivity.removeImmediately();
        assertNull(mDefaultTaskDisplayArea.getRootHomeTask());
    }

    @Test
    public void testStackInheritsDisplayWindowingMode() {
        final ActivityStack primarySplitScreen = mDefaultTaskDisplayArea.createStack(