Don't reparent stack created by organizer.
An organizer controlls its stacks. The system should not move them to another display. With this CL, for stacks created by organizer, the system tries reparenting their direct children, then removed the stacks. Bug: 162825804 Test: atest TaskDisplayAreaTests Change-Id: I18fcae7a8c61d83014d5ab227a5a9ab9683299a7
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user