Loading libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java +8 −1 Original line number Diff line number Diff line Loading @@ -541,7 +541,14 @@ public class ShellTaskOrganizer extends TaskOrganizer { synchronized (mLock) { ProtoLog.v(WM_SHELL_TASK_ORG, "Remove listener=%s", listener); // Remove all occurrences of the pending listener // Remove all occurrences of the pending listener by launch cookie for (int i = mLaunchCookieToListener.size() - 1; i >= 0; --i) { if (mLaunchCookieToListener.valueAt(i) == listener) { mLaunchCookieToListener.removeAt(i); } } // Remove all occurrences of the pending listener by task id for (int i = mPendingTaskToListener.size() - 1; i >= 0; --i) { if (mPendingTaskToListener.valueAt(i) == listener) { mPendingTaskToListener.removeAt(i); Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java +27 −0 Original line number Diff line number Diff line Loading @@ -372,6 +372,33 @@ public class ShellTaskOrganizerTests extends ShellTestCase { assertTrue(mOrganizer.hasTaskListener(task1.taskId)); } @Test public void testRemoveListenerBeforeCookieMigration() { // Add a generic listener for MW tasks TrackingTaskListener mwListener = new TrackingTaskListener(); mOrganizer.addListenerForType(mwListener, TASK_LISTENER_TYPE_MULTI_WINDOW); // Create a new task with a specific launch cookie IBinder cookie = new Binder(); RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_MULTI_WINDOW); task1.addLaunchCookie(cookie); // Add a pending listener based on the same launch cookie TrackingTaskListener cookieListener = new TrackingTaskListener(); mOrganizer.setPendingLaunchCookieListener(cookie, cookieListener); // Remove the listener before the task appears mOrganizer.removeListener(cookieListener); // Report the task appearing mOrganizer.onTaskAppeared(task1, /* leash= */ null); // Verify that the cookie listener was actually removed and that the generic MW listener // received the task assertTrue(mwListener.appeared.contains(task1)); assertFalse(cookieListener.appeared.contains(task1)); } @Test public void testGetTaskListener() { RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_MULTI_WINDOW); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java +8 −1 Original line number Diff line number Diff line Loading @@ -541,7 +541,14 @@ public class ShellTaskOrganizer extends TaskOrganizer { synchronized (mLock) { ProtoLog.v(WM_SHELL_TASK_ORG, "Remove listener=%s", listener); // Remove all occurrences of the pending listener // Remove all occurrences of the pending listener by launch cookie for (int i = mLaunchCookieToListener.size() - 1; i >= 0; --i) { if (mLaunchCookieToListener.valueAt(i) == listener) { mLaunchCookieToListener.removeAt(i); } } // Remove all occurrences of the pending listener by task id for (int i = mPendingTaskToListener.size() - 1; i >= 0; --i) { if (mPendingTaskToListener.valueAt(i) == listener) { mPendingTaskToListener.removeAt(i); Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java +27 −0 Original line number Diff line number Diff line Loading @@ -372,6 +372,33 @@ public class ShellTaskOrganizerTests extends ShellTestCase { assertTrue(mOrganizer.hasTaskListener(task1.taskId)); } @Test public void testRemoveListenerBeforeCookieMigration() { // Add a generic listener for MW tasks TrackingTaskListener mwListener = new TrackingTaskListener(); mOrganizer.addListenerForType(mwListener, TASK_LISTENER_TYPE_MULTI_WINDOW); // Create a new task with a specific launch cookie IBinder cookie = new Binder(); RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_MULTI_WINDOW); task1.addLaunchCookie(cookie); // Add a pending listener based on the same launch cookie TrackingTaskListener cookieListener = new TrackingTaskListener(); mOrganizer.setPendingLaunchCookieListener(cookie, cookieListener); // Remove the listener before the task appears mOrganizer.removeListener(cookieListener); // Report the task appearing mOrganizer.onTaskAppeared(task1, /* leash= */ null); // Verify that the cookie listener was actually removed and that the generic MW listener // received the task assertTrue(mwListener.appeared.contains(task1)); assertFalse(cookieListener.appeared.contains(task1)); } @Test public void testGetTaskListener() { RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_MULTI_WINDOW); Loading