Loading libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java +13 −9 Original line number Diff line number Diff line Loading @@ -233,6 +233,7 @@ public class ShellTaskOrganizer extends TaskOrganizer implements + " already exists"); } mTaskListeners.put(listenerType, listener); } // Notify the listener of all existing tasks with the given type. for (int i = mTasks.size() - 1; i >= 0; --i) { Loading @@ -243,7 +244,6 @@ public class ShellTaskOrganizer extends TaskOrganizer implements } } } } /** * Removes a registered listener. Loading @@ -266,8 +266,12 @@ public class ShellTaskOrganizer extends TaskOrganizer implements tasks.add(data); } // Remove listener mTaskListeners.removeAt(index); // Remove listener, there can be the multiple occurrences, so search the whole list. for (int i = mTaskListeners.size() - 1; i >= 0; --i) { if (mTaskListeners.valueAt(i) == listener) { mTaskListeners.removeAt(i); } } // Associate tasks with new listeners if needed. for (int i = tasks.size() - 1; i >= 0; --i) { Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java +37 −0 Original line number Diff line number Diff line Loading @@ -196,6 +196,43 @@ public class ShellTaskOrganizerTests { assertTrue(listener.appeared.contains(taskInfo)); } @Test public void testAddListenerForMultipleTypes() { RunningTaskInfo taskInfo1 = createTaskInfo(1, WINDOWING_MODE_FULLSCREEN); mOrganizer.onTaskAppeared(taskInfo1, null); RunningTaskInfo taskInfo2 = createTaskInfo(2, WINDOWING_MODE_MULTI_WINDOW); mOrganizer.onTaskAppeared(taskInfo2, null); TrackingTaskListener listener = new TrackingTaskListener(); mOrganizer.addListenerForType(listener, TASK_LISTENER_TYPE_MULTI_WINDOW, TASK_LISTENER_TYPE_FULLSCREEN); // onTaskAppeared event should be delivered once for each taskInfo. assertTrue(listener.appeared.contains(taskInfo1)); assertTrue(listener.appeared.contains(taskInfo2)); assertEquals(2, listener.appeared.size()); } @Test public void testRemoveListenerForMultipleTypes() { RunningTaskInfo taskInfo1 = createTaskInfo(1, WINDOWING_MODE_FULLSCREEN); mOrganizer.onTaskAppeared(taskInfo1, null); RunningTaskInfo taskInfo2 = createTaskInfo(2, WINDOWING_MODE_MULTI_WINDOW); mOrganizer.onTaskAppeared(taskInfo2, null); TrackingTaskListener listener = new TrackingTaskListener(); mOrganizer.addListenerForType(listener, TASK_LISTENER_TYPE_MULTI_WINDOW, TASK_LISTENER_TYPE_FULLSCREEN); mOrganizer.removeListener(listener); // If listener is removed properly, onTaskInfoChanged event shouldn't be delivered. mOrganizer.onTaskInfoChanged(taskInfo1); assertTrue(listener.infoChanged.isEmpty()); mOrganizer.onTaskInfoChanged(taskInfo2); assertTrue(listener.infoChanged.isEmpty()); } @Test public void testWindowingModeChange() { RunningTaskInfo taskInfo = createTaskInfo(1, WINDOWING_MODE_MULTI_WINDOW); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java +13 −9 Original line number Diff line number Diff line Loading @@ -233,6 +233,7 @@ public class ShellTaskOrganizer extends TaskOrganizer implements + " already exists"); } mTaskListeners.put(listenerType, listener); } // Notify the listener of all existing tasks with the given type. for (int i = mTasks.size() - 1; i >= 0; --i) { Loading @@ -243,7 +244,6 @@ public class ShellTaskOrganizer extends TaskOrganizer implements } } } } /** * Removes a registered listener. Loading @@ -266,8 +266,12 @@ public class ShellTaskOrganizer extends TaskOrganizer implements tasks.add(data); } // Remove listener mTaskListeners.removeAt(index); // Remove listener, there can be the multiple occurrences, so search the whole list. for (int i = mTaskListeners.size() - 1; i >= 0; --i) { if (mTaskListeners.valueAt(i) == listener) { mTaskListeners.removeAt(i); } } // Associate tasks with new listeners if needed. for (int i = tasks.size() - 1; i >= 0; --i) { Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java +37 −0 Original line number Diff line number Diff line Loading @@ -196,6 +196,43 @@ public class ShellTaskOrganizerTests { assertTrue(listener.appeared.contains(taskInfo)); } @Test public void testAddListenerForMultipleTypes() { RunningTaskInfo taskInfo1 = createTaskInfo(1, WINDOWING_MODE_FULLSCREEN); mOrganizer.onTaskAppeared(taskInfo1, null); RunningTaskInfo taskInfo2 = createTaskInfo(2, WINDOWING_MODE_MULTI_WINDOW); mOrganizer.onTaskAppeared(taskInfo2, null); TrackingTaskListener listener = new TrackingTaskListener(); mOrganizer.addListenerForType(listener, TASK_LISTENER_TYPE_MULTI_WINDOW, TASK_LISTENER_TYPE_FULLSCREEN); // onTaskAppeared event should be delivered once for each taskInfo. assertTrue(listener.appeared.contains(taskInfo1)); assertTrue(listener.appeared.contains(taskInfo2)); assertEquals(2, listener.appeared.size()); } @Test public void testRemoveListenerForMultipleTypes() { RunningTaskInfo taskInfo1 = createTaskInfo(1, WINDOWING_MODE_FULLSCREEN); mOrganizer.onTaskAppeared(taskInfo1, null); RunningTaskInfo taskInfo2 = createTaskInfo(2, WINDOWING_MODE_MULTI_WINDOW); mOrganizer.onTaskAppeared(taskInfo2, null); TrackingTaskListener listener = new TrackingTaskListener(); mOrganizer.addListenerForType(listener, TASK_LISTENER_TYPE_MULTI_WINDOW, TASK_LISTENER_TYPE_FULLSCREEN); mOrganizer.removeListener(listener); // If listener is removed properly, onTaskInfoChanged event shouldn't be delivered. mOrganizer.onTaskInfoChanged(taskInfo1); assertTrue(listener.infoChanged.isEmpty()); mOrganizer.onTaskInfoChanged(taskInfo2); assertTrue(listener.infoChanged.isEmpty()); } @Test public void testWindowingModeChange() { RunningTaskInfo taskInfo = createTaskInfo(1, WINDOWING_MODE_MULTI_WINDOW); Loading