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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user