diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java index 18a76408fa245..8a0ae65267a32 100644 --- a/services/core/java/com/android/server/wm/TaskOrganizerController.java +++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java @@ -602,7 +602,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { void onTaskVanished(ITaskOrganizer organizer, Task task) { final TaskOrganizerState state = mTaskOrganizerStates.get(organizer.asBinder()); - if (state != null && state.removeTask(task, false /* removeFromSystem */)) { + if (state != null && state.removeTask(task, task.mRemoveWithTaskOrganizer)) { onTaskVanishedInternal(organizer, task); } } diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java index eb91d5ec4d964..832bd2d8b9517 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java @@ -246,6 +246,42 @@ public class WindowOrganizerTests extends WindowTestsBase { assertFalse(rootTask.isOrganized()); } + @Test + public void testRemoveWithOrganizerRemovesTask() throws RemoteException { + final ITaskOrganizer organizer = registerMockOrganizer(); + final Task rootTask = createRootTask(); + final Task task = createTask(rootTask); + rootTask.mRemoveWithTaskOrganizer = true; + + mWm.mAtmService.mTaskOrganizerController.dispatchPendingEvents(); + verify(organizer).onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); + assertTrue(rootTask.isOrganized()); + + spyOn(mWm.mAtmService); + rootTask.setTaskOrganizer(null); + mWm.mAtmService.mTaskOrganizerController.dispatchPendingEvents(); + + verify(mWm.mAtmService).removeTask(eq(rootTask.mTaskId)); + } + + @Test + public void testNoRemoveWithOrganizerNoRemoveTask() throws RemoteException { + final ITaskOrganizer organizer = registerMockOrganizer(); + final Task rootTask = createRootTask(); + final Task task = createTask(rootTask); + rootTask.mRemoveWithTaskOrganizer = false; + + mWm.mAtmService.mTaskOrganizerController.dispatchPendingEvents(); + verify(organizer).onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class)); + assertTrue(rootTask.isOrganized()); + + spyOn(mWm.mAtmService); + rootTask.setTaskOrganizer(null); + mWm.mAtmService.mTaskOrganizerController.dispatchPendingEvents(); + + verify(mWm.mAtmService, never()).removeTask(eq(rootTask.mTaskId)); + } + @Test public void testUnregisterOrganizer() throws RemoteException { final ITaskOrganizer organizer = registerMockOrganizer();