diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/TaskDisplayArea.java | 8 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java | 31 |
2 files changed, 37 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java index bda575974728..9d14e0d5d984 100644 --- a/services/core/java/com/android/server/wm/TaskDisplayArea.java +++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java @@ -1851,8 +1851,12 @@ final class TaskDisplayArea extends DisplayArea<Task> { .getTopStackInWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY) : null; for (int stackNdx = 0; stackNdx < numStacks; stackNdx++) { final Task stack = getStackAt(stackNdx); - // Always finish non-standard type stacks. - if (destroyContentOnRemoval || !stack.isActivityTypeStandardOrUndefined()) { + // Always finish non-standard type stacks and stacks created by a organizer. + // TODO: For stacks created by organizer, consider reparenting children tasks if the use + // case arises in the future. + if (destroyContentOnRemoval + || !stack.isActivityTypeStandardOrUndefined() + || stack.mCreatedByOrganizer) { stack.finishAllActivitiesImmediately(); } else { // Reparent the stack to the root task of secondary-split-screen or display area. diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java index c5c947bf21d8..4bd8edd44f5c 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java @@ -296,6 +296,37 @@ public class TaskDisplayAreaTests extends WindowTestsBase { assertThat(taskDisplayArea.getOrientation()).isEqualTo(SCREEN_ORIENTATION_UNSET); } + @Test + @UseTestDisplay + public void testRemove_reparentToDefault() { + final Task task = createTaskStackOnDisplay(mDisplayContent); + final TaskDisplayArea displayArea = task.getDisplayArea(); + displayArea.remove(); + assertTrue(displayArea.isRemoved()); + assertFalse(displayArea.hasChild()); + + final RootWindowContainer rootWindowContainer = mWm.mAtmService.mRootWindowContainer; + final TaskDisplayArea defaultTaskDisplayArea = + rootWindowContainer.getDefaultTaskDisplayArea(); + assertTrue(defaultTaskDisplayArea.mChildren.contains(task)); + } + + @Test + @UseTestDisplay + public void testRemove_stackCreatedByOrganizer() { + final Task task = createTaskStackOnDisplay(mDisplayContent); + task.mCreatedByOrganizer = true; + final TaskDisplayArea displayArea = task.getDisplayArea(); + displayArea.remove(); + assertTrue(displayArea.isRemoved()); + assertFalse(displayArea.hasChild()); + + final RootWindowContainer rootWindowContainer = mWm.mAtmService.mRootWindowContainer; + final TaskDisplayArea defaultTaskDisplayArea = + rootWindowContainer.getDefaultTaskDisplayArea(); + assertFalse(defaultTaskDisplayArea.mChildren.contains(task)); + } + private void assertGetOrCreateStack(int windowingMode, int activityType, Task candidateTask, boolean reuseCandidate) { final TaskDisplayArea taskDisplayArea = candidateTask.getDisplayArea(); |