Merge "Fix addListenerForType/removeListener in ShellTaskOranizer." into sc-v2-dev
This commit is contained in:
@@ -233,6 +233,7 @@ public class ShellTaskOrganizer extends TaskOrganizer implements
|
|||||||
+ " already exists");
|
+ " already exists");
|
||||||
}
|
}
|
||||||
mTaskListeners.put(listenerType, listener);
|
mTaskListeners.put(listenerType, listener);
|
||||||
|
}
|
||||||
|
|
||||||
// Notify the listener of all existing tasks with the given type.
|
// Notify the listener of all existing tasks with the given type.
|
||||||
for (int i = mTasks.size() - 1; i >= 0; --i) {
|
for (int i = mTasks.size() - 1; i >= 0; --i) {
|
||||||
@@ -243,7 +244,6 @@ public class ShellTaskOrganizer extends TaskOrganizer implements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes a registered listener.
|
* Removes a registered listener.
|
||||||
@@ -266,8 +266,12 @@ public class ShellTaskOrganizer extends TaskOrganizer implements
|
|||||||
tasks.add(data);
|
tasks.add(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove listener
|
// Remove listener, there can be the multiple occurrences, so search the whole list.
|
||||||
mTaskListeners.removeAt(index);
|
for (int i = mTaskListeners.size() - 1; i >= 0; --i) {
|
||||||
|
if (mTaskListeners.valueAt(i) == listener) {
|
||||||
|
mTaskListeners.removeAt(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Associate tasks with new listeners if needed.
|
// Associate tasks with new listeners if needed.
|
||||||
for (int i = tasks.size() - 1; i >= 0; --i) {
|
for (int i = tasks.size() - 1; i >= 0; --i) {
|
||||||
|
|||||||
@@ -196,6 +196,43 @@ public class ShellTaskOrganizerTests {
|
|||||||
assertTrue(listener.appeared.contains(taskInfo));
|
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
|
@Test
|
||||||
public void testWindowingModeChange() {
|
public void testWindowingModeChange() {
|
||||||
RunningTaskInfo taskInfo = createTaskInfo(1, WINDOWING_MODE_MULTI_WINDOW);
|
RunningTaskInfo taskInfo = createTaskInfo(1, WINDOWING_MODE_MULTI_WINDOW);
|
||||||
|
|||||||
Reference in New Issue
Block a user