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

Commit f72ccde6 authored by Riddle Hsu's avatar Riddle Hsu Committed by Automerger Merge Worker
Browse files

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

Change-Id: I4ebd5fd4bc57a1d4899ea843c38b0a2a84445642
parents 904ccaa4 35f762fb
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(