When calling removeTask pass mRemoveWithTaskOrganizer

In this one case of calling removeTask false was always being passed
instead of the value on mRemoveWithTaskOrganizer. This caused
the bubble activity to remain on the display after a sysui crash/
runtime restart. The fix is to use the value on the task.

Test: atest WindowOrganizerTests
Test: manual - expand a bubble
             - adb shell am crash com.android.systemui
             => observe that the expanded bubble view isn't hanging
                around onscreen and opening the bubble works fine
Bug: 227520971
Change-Id: I8b2861da82cf5eda56aa58015c1f11c5d6aed2c0
This commit is contained in:
Mady Mellor
2022-03-31 21:25:27 +00:00
parent 30deaa8bf8
commit 671e62aa47
2 changed files with 37 additions and 1 deletions

View File

@@ -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);
}
}

View File

@@ -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();