Loading services/core/java/com/android/server/wm/TaskDisplayArea.java +6 −2 Original line number Diff line number Diff line Loading @@ -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. Loading services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java +31 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading
services/core/java/com/android/server/wm/TaskDisplayArea.java +6 −2 Original line number Diff line number Diff line Loading @@ -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. Loading
services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java +31 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading