diff options
4 files changed, 116 insertions, 59 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java index 3244837324b6..f2095b130989 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java @@ -552,10 +552,12 @@ public class ShellTaskOrganizer extends TaskOrganizer implements // Notify the compat UI if the listener or task info changed. notifyCompatUI(taskInfo, newListener); } - if (data.getTaskInfo().getWindowingMode() != taskInfo.getWindowingMode()) { - // Notify the recent tasks when a task changes windowing modes + final boolean windowModeChanged = + data.getTaskInfo().getWindowingMode() != taskInfo.getWindowingMode(); + final boolean visibilityChanged = data.getTaskInfo().isVisible != taskInfo.isVisible; + if (windowModeChanged || visibilityChanged) { mRecentTasks.ifPresent(recentTasks -> - recentTasks.onTaskWindowingModeChanged(taskInfo)); + recentTasks.onTaskRunningInfoChanged(taskInfo)); } // TODO (b/207687679): Remove check for HOME once bug is fixed final boolean isFocusedOrHome = taskInfo.isFocused diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java index c53e7fe00598..d8f2c02b5399 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java @@ -253,8 +253,12 @@ public class RecentTasksController implements TaskStackListenerCallback, notifyRunningTaskVanished(taskInfo); } - /** Notify listeners that the windowing mode of the given Task was updated. */ - public void onTaskWindowingModeChanged(ActivityManager.RunningTaskInfo taskInfo) { + /** + * Notify listeners that the running infos related to recent tasks was updated. + * + * This currently includes windowing mode and visibility. + */ + public void onTaskRunningInfoChanged(ActivityManager.RunningTaskInfo taskInfo) { notifyRecentTasksChanged(); notifyRunningTaskChanged(taskInfo); } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java index 82c070cbf1c3..f9b4108bc8c2 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java @@ -20,6 +20,7 @@ import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED; import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; +import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; @@ -62,6 +63,7 @@ import androidx.test.filters.SmallTest; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.compatui.CompatUIController; +import com.android.wm.shell.recents.RecentTasksController; import com.android.wm.shell.sysui.ShellCommandHandler; import com.android.wm.shell.sysui.ShellInit; @@ -78,7 +80,7 @@ import java.util.Optional; * Tests for the shell task organizer. * * Build/Install/Run: - * atest WMShellUnitTests:ShellTaskOrganizerTests + * atest WMShellUnitTests:ShellTaskOrganizerTests */ @SmallTest @RunWith(AndroidJUnit4.class) @@ -92,6 +94,8 @@ public class ShellTaskOrganizerTests extends ShellTestCase { private ShellExecutor mTestExecutor; @Mock private ShellCommandHandler mShellCommandHandler; + @Mock + private RecentTasksController mRecentTasksController; private ShellTaskOrganizer mOrganizer; private ShellInit mShellInit; @@ -120,6 +124,7 @@ public class ShellTaskOrganizerTests extends ShellTestCase { private class TrackingLocusIdListener implements ShellTaskOrganizer.LocusIdListener { final SparseArray<LocusId> visibleLocusTasks = new SparseArray<>(); final SparseArray<LocusId> invisibleLocusTasks = new SparseArray<>(); + @Override public void onVisibilityChanged(int taskId, LocusId locus, boolean visible) { if (visible) { @@ -130,18 +135,18 @@ public class ShellTaskOrganizerTests extends ShellTestCase { } } - @Before public void setUp() { MockitoAnnotations.initMocks(this); try { doReturn(ParceledListSlice.<TaskAppearedInfo>emptyList()) .when(mTaskOrganizerController).registerTaskOrganizer(any()); - } catch (RemoteException e) {} + } catch (RemoteException e) { + } mShellInit = spy(new ShellInit(mTestExecutor)); mOrganizer = spy(new ShellTaskOrganizer(mShellInit, mShellCommandHandler, - mTaskOrganizerController, mCompatUI, Optional.empty(), Optional.empty(), - mTestExecutor)); + mTaskOrganizerController, mCompatUI, Optional.empty(), + Optional.of(mRecentTasksController), mTestExecutor)); mShellInit.init(); } @@ -163,7 +168,7 @@ public class ShellTaskOrganizerTests extends ShellTestCase { @Test public void testTaskLeashReleasedAfterVanished() throws RemoteException { assumeFalse(ENABLE_SHELL_TRANSITIONS); - RunningTaskInfo taskInfo = createTaskInfo(1, WINDOWING_MODE_MULTI_WINDOW); + RunningTaskInfo taskInfo = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_MULTI_WINDOW); SurfaceControl taskLeash = new SurfaceControl.Builder(new SurfaceSession()) .setName("task").build(); mOrganizer.registerOrganizer(); @@ -188,8 +193,8 @@ public class ShellTaskOrganizerTests extends ShellTestCase { @Test public void testRegisterWithExistingTasks() throws RemoteException { // Setup some tasks - RunningTaskInfo task1 = createTaskInfo(1, WINDOWING_MODE_MULTI_WINDOW); - RunningTaskInfo task2 = createTaskInfo(2, WINDOWING_MODE_MULTI_WINDOW); + RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_MULTI_WINDOW); + RunningTaskInfo task2 = createTaskInfo(/* taskId= */ 2, WINDOWING_MODE_MULTI_WINDOW); ArrayList<TaskAppearedInfo> taskInfos = new ArrayList<>(); taskInfos.add(new TaskAppearedInfo(task1, new SurfaceControl())); taskInfos.add(new TaskAppearedInfo(task2, new SurfaceControl())); @@ -208,10 +213,10 @@ public class ShellTaskOrganizerTests extends ShellTestCase { @Test public void testAppearedVanished() { - RunningTaskInfo taskInfo = createTaskInfo(1, WINDOWING_MODE_MULTI_WINDOW); + RunningTaskInfo taskInfo = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_MULTI_WINDOW); TrackingTaskListener listener = new TrackingTaskListener(); mOrganizer.addListenerForType(listener, TASK_LISTENER_TYPE_MULTI_WINDOW); - mOrganizer.onTaskAppeared(taskInfo, null); + mOrganizer.onTaskAppeared(taskInfo, /* leash= */ null); assertTrue(listener.appeared.contains(taskInfo)); mOrganizer.onTaskVanished(taskInfo); @@ -220,7 +225,7 @@ public class ShellTaskOrganizerTests extends ShellTestCase { @Test public void testAddListenerExistingTasks() { - RunningTaskInfo taskInfo = createTaskInfo(1, WINDOWING_MODE_MULTI_WINDOW); + RunningTaskInfo taskInfo = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_MULTI_WINDOW); mOrganizer.onTaskAppeared(taskInfo, null); TrackingTaskListener listener = new TrackingTaskListener(); @@ -230,9 +235,9 @@ public class ShellTaskOrganizerTests extends ShellTestCase { @Test public void testAddListenerForMultipleTypes() { - RunningTaskInfo taskInfo1 = createTaskInfo(1, WINDOWING_MODE_FULLSCREEN); + RunningTaskInfo taskInfo1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_FULLSCREEN); mOrganizer.onTaskAppeared(taskInfo1, null); - RunningTaskInfo taskInfo2 = createTaskInfo(2, WINDOWING_MODE_MULTI_WINDOW); + RunningTaskInfo taskInfo2 = createTaskInfo(/* taskId= */ 2, WINDOWING_MODE_MULTI_WINDOW); mOrganizer.onTaskAppeared(taskInfo2, null); TrackingTaskListener listener = new TrackingTaskListener(); @@ -247,10 +252,10 @@ public class ShellTaskOrganizerTests extends ShellTestCase { @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); + RunningTaskInfo taskInfo1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_FULLSCREEN); + mOrganizer.onTaskAppeared(taskInfo1, /* leash= */ null); + RunningTaskInfo taskInfo2 = createTaskInfo(/* taskId= */ 2, WINDOWING_MODE_MULTI_WINDOW); + mOrganizer.onTaskAppeared(taskInfo2, /* leash= */ null); TrackingTaskListener listener = new TrackingTaskListener(); mOrganizer.addListenerForType(listener, @@ -267,12 +272,12 @@ public class ShellTaskOrganizerTests extends ShellTestCase { @Test public void testWindowingModeChange() { - RunningTaskInfo taskInfo = createTaskInfo(1, WINDOWING_MODE_MULTI_WINDOW); + RunningTaskInfo taskInfo = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_MULTI_WINDOW); TrackingTaskListener mwListener = new TrackingTaskListener(); TrackingTaskListener pipListener = new TrackingTaskListener(); mOrganizer.addListenerForType(mwListener, TASK_LISTENER_TYPE_MULTI_WINDOW); mOrganizer.addListenerForType(pipListener, TASK_LISTENER_TYPE_PIP); - mOrganizer.onTaskAppeared(taskInfo, null); + mOrganizer.onTaskAppeared(taskInfo, /* leash= */ null); assertTrue(mwListener.appeared.contains(taskInfo)); assertTrue(pipListener.appeared.isEmpty()); @@ -284,11 +289,11 @@ public class ShellTaskOrganizerTests extends ShellTestCase { @Test public void testAddListenerForTaskId_afterTypeListener() { - RunningTaskInfo task1 = createTaskInfo(1, WINDOWING_MODE_MULTI_WINDOW); + RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_MULTI_WINDOW); TrackingTaskListener mwListener = new TrackingTaskListener(); TrackingTaskListener task1Listener = new TrackingTaskListener(); mOrganizer.addListenerForType(mwListener, TASK_LISTENER_TYPE_MULTI_WINDOW); - mOrganizer.onTaskAppeared(task1, null); + mOrganizer.onTaskAppeared(task1, /* leash= */ null); assertTrue(mwListener.appeared.contains(task1)); // Add task 1 specific listener @@ -299,11 +304,11 @@ public class ShellTaskOrganizerTests extends ShellTestCase { @Test public void testAddListenerForTaskId_beforeTypeListener() { - RunningTaskInfo task1 = createTaskInfo(1, WINDOWING_MODE_MULTI_WINDOW); + RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_MULTI_WINDOW); TrackingTaskListener mwListener = new TrackingTaskListener(); TrackingTaskListener task1Listener = new TrackingTaskListener(); - mOrganizer.onTaskAppeared(task1, null); - mOrganizer.addListenerForTaskId(task1Listener, 1); + mOrganizer.onTaskAppeared(task1, /* leash= */ null); + mOrganizer.addListenerForTaskId(task1Listener, /* taskId= */ 1); assertTrue(task1Listener.appeared.contains(task1)); mOrganizer.addListenerForType(mwListener, TASK_LISTENER_TYPE_MULTI_WINDOW); @@ -312,7 +317,7 @@ public class ShellTaskOrganizerTests extends ShellTestCase { @Test public void testGetTaskListener() { - RunningTaskInfo task1 = createTaskInfo(1, WINDOWING_MODE_MULTI_WINDOW); + RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_MULTI_WINDOW); TrackingTaskListener mwListener = new TrackingTaskListener(); mOrganizer.addListenerForType(mwListener, TASK_LISTENER_TYPE_MULTI_WINDOW); @@ -324,7 +329,7 @@ public class ShellTaskOrganizerTests extends ShellTestCase { // Priority goes to the cookie listener so we would expect the task appear to show up there // instead of the multi-window type listener. - mOrganizer.onTaskAppeared(task1, null); + mOrganizer.onTaskAppeared(task1, /* leash= */ null); assertTrue(cookieListener.appeared.contains(task1)); assertFalse(mwListener.appeared.contains(task1)); @@ -332,7 +337,7 @@ public class ShellTaskOrganizerTests extends ShellTestCase { boolean gotException = false; try { - mOrganizer.addListenerForTaskId(task1Listener, 1); + mOrganizer.addListenerForTaskId(task1Listener, /* taskId= */ 1); } catch (Exception e) { gotException = true; } @@ -343,26 +348,27 @@ public class ShellTaskOrganizerTests extends ShellTestCase { @Test public void testGetParentTaskListener() { - RunningTaskInfo task1 = createTaskInfo(1, WINDOWING_MODE_MULTI_WINDOW); + RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_MULTI_WINDOW); TrackingTaskListener mwListener = new TrackingTaskListener(); - mOrganizer.onTaskAppeared(task1, null); + mOrganizer.onTaskAppeared(task1, /* leash= */ null); mOrganizer.addListenerForTaskId(mwListener, task1.taskId); RunningTaskInfo task2 = createTaskInfo(1, WINDOWING_MODE_MULTI_WINDOW); task2.parentTaskId = task1.taskId; - mOrganizer.onTaskAppeared(task2, null); + mOrganizer.onTaskAppeared(task2, /* leash= */ null); assertTrue(mwListener.appeared.contains(task2)); } @Test public void testOnSizeCompatActivityChanged() { - final RunningTaskInfo taskInfo1 = createTaskInfo(12, WINDOWING_MODE_FULLSCREEN); + final RunningTaskInfo taskInfo1 = createTaskInfo(/* taskId= */ 12, + WINDOWING_MODE_FULLSCREEN); taskInfo1.displayId = DEFAULT_DISPLAY; taskInfo1.appCompatTaskInfo.topActivityInSizeCompat = false; final TrackingTaskListener taskListener = new TrackingTaskListener(); mOrganizer.addListenerForType(taskListener, TASK_LISTENER_TYPE_FULLSCREEN); - mOrganizer.onTaskAppeared(taskInfo1, null); + mOrganizer.onTaskAppeared(taskInfo1, /* leash= */ null); // sizeCompatActivity is null if top activity is not in size compat. verify(mCompatUI).onCompatInfoChanged(taskInfo1, null /* taskListener */); @@ -394,12 +400,13 @@ public class ShellTaskOrganizerTests extends ShellTestCase { @Test public void testOnEligibleForLetterboxEducationActivityChanged() { - final RunningTaskInfo taskInfo1 = createTaskInfo(12, WINDOWING_MODE_FULLSCREEN); + final RunningTaskInfo taskInfo1 = createTaskInfo(/* taskId= */ 12, + WINDOWING_MODE_FULLSCREEN); taskInfo1.displayId = DEFAULT_DISPLAY; taskInfo1.appCompatTaskInfo.topActivityEligibleForLetterboxEducation = false; final TrackingTaskListener taskListener = new TrackingTaskListener(); mOrganizer.addListenerForType(taskListener, TASK_LISTENER_TYPE_FULLSCREEN); - mOrganizer.onTaskAppeared(taskInfo1, null); + mOrganizer.onTaskAppeared(taskInfo1, /* leash= */ null); // Task listener sent to compat UI is null if top activity isn't eligible for letterbox // education. @@ -433,13 +440,14 @@ public class ShellTaskOrganizerTests extends ShellTestCase { @Test public void testOnCameraCompatActivityChanged() { - final RunningTaskInfo taskInfo1 = createTaskInfo(1, WINDOWING_MODE_FULLSCREEN); + final RunningTaskInfo taskInfo1 = createTaskInfo(/* taskId= */ 1, + WINDOWING_MODE_FULLSCREEN); taskInfo1.displayId = DEFAULT_DISPLAY; taskInfo1.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState = CAMERA_COMPAT_CONTROL_HIDDEN; final TrackingTaskListener taskListener = new TrackingTaskListener(); mOrganizer.addListenerForType(taskListener, TASK_LISTENER_TYPE_FULLSCREEN); - mOrganizer.onTaskAppeared(taskInfo1, null); + mOrganizer.onTaskAppeared(taskInfo1, /* leash= */ null); // Task listener sent to compat UI is null if top activity doesn't request a camera // compat control. @@ -510,20 +518,20 @@ public class ShellTaskOrganizerTests extends ShellTestCase { @Test public void testAddLocusListener() { - RunningTaskInfo task1 = createTaskInfo(1, WINDOWING_MODE_MULTI_WINDOW); + RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_MULTI_WINDOW); task1.isVisible = true; task1.mTopActivityLocusId = new LocusId("10"); - RunningTaskInfo task2 = createTaskInfo(2, WINDOWING_MODE_FULLSCREEN); + RunningTaskInfo task2 = createTaskInfo(/* taskId= */ 2, WINDOWING_MODE_FULLSCREEN); task2.isVisible = true; task2.mTopActivityLocusId = new LocusId("20"); - RunningTaskInfo task3 = createTaskInfo(3, WINDOWING_MODE_FULLSCREEN); + RunningTaskInfo task3 = createTaskInfo(/* taskId= */ 3, WINDOWING_MODE_FULLSCREEN); task3.isVisible = true; - mOrganizer.onTaskAppeared(task1, null); - mOrganizer.onTaskAppeared(task2, null); - mOrganizer.onTaskAppeared(task3, null); + mOrganizer.onTaskAppeared(task1, /* leash= */ null); + mOrganizer.onTaskAppeared(task2, /* leash= */ null); + mOrganizer.onTaskAppeared(task3, /* leash= */ null); TrackingLocusIdListener listener = new TrackingLocusIdListener(); mOrganizer.addLocusIdListener(listener); @@ -539,11 +547,11 @@ public class ShellTaskOrganizerTests extends ShellTestCase { TrackingLocusIdListener listener = new TrackingLocusIdListener(); mOrganizer.addLocusIdListener(listener); - RunningTaskInfo task1 = createTaskInfo(1, WINDOWING_MODE_FULLSCREEN); + RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_FULLSCREEN); task1.mTopActivityLocusId = new LocusId("10"); task1.isVisible = true; - mOrganizer.onTaskAppeared(task1, null); + mOrganizer.onTaskAppeared(task1, /* leash= */ null); assertTrue(listener.visibleLocusTasks.contains(task1.taskId)); assertEquals(listener.visibleLocusTasks.get(task1.taskId), task1.mTopActivityLocusId); @@ -558,9 +566,9 @@ public class ShellTaskOrganizerTests extends ShellTestCase { TrackingLocusIdListener listener = new TrackingLocusIdListener(); mOrganizer.addLocusIdListener(listener); - RunningTaskInfo task1 = createTaskInfo(1, WINDOWING_MODE_MULTI_WINDOW); + RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_MULTI_WINDOW); task1.isVisible = true; - mOrganizer.onTaskAppeared(task1, null); + mOrganizer.onTaskAppeared(task1, /* leash= */ null); assertEquals(listener.visibleLocusTasks.size(), 0); task1.mTopActivityLocusId = new LocusId("10"); @@ -585,9 +593,9 @@ public class ShellTaskOrganizerTests extends ShellTestCase { TrackingLocusIdListener listener = new TrackingLocusIdListener(); mOrganizer.addLocusIdListener(listener); - RunningTaskInfo task1 = createTaskInfo(1, WINDOWING_MODE_FULLSCREEN); + RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_FULLSCREEN); task1.isVisible = true; - mOrganizer.onTaskAppeared(task1, null); + mOrganizer.onTaskAppeared(task1, /* leash= */ null); task1.mTopActivityLocusId = new LocusId("10"); mOrganizer.onTaskInfoChanged(task1); @@ -609,9 +617,9 @@ public class ShellTaskOrganizerTests extends ShellTestCase { TrackingLocusIdListener listener = new TrackingLocusIdListener(); mOrganizer.addLocusIdListener(listener); - RunningTaskInfo task1 = createTaskInfo(1, WINDOWING_MODE_MULTI_WINDOW); + RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_MULTI_WINDOW); task1.isVisible = true; - mOrganizer.onTaskAppeared(task1, null); + mOrganizer.onTaskAppeared(task1, /* leash= */ null); assertEquals(listener.visibleLocusTasks.size(), 0); assertEquals(listener.invisibleLocusTasks.size(), 0); @@ -627,20 +635,63 @@ public class ShellTaskOrganizerTests extends ShellTestCase { @Test public void testOnSizeCompatRestartButtonClicked() throws RemoteException { - RunningTaskInfo task1 = createTaskInfo(1, WINDOWING_MODE_MULTI_WINDOW); + RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_MULTI_WINDOW); task1.token = mock(WindowContainerToken.class); - mOrganizer.onTaskAppeared(task1, null); + mOrganizer.onTaskAppeared(task1, /* leash= */ null); mOrganizer.onSizeCompatRestartButtonClicked(task1.taskId); verify(mTaskOrganizerController).restartTaskTopActivityProcessIfVisible(task1.token); } + @Test + public void testRecentTasks_onTaskAppeared_shouldNotifyTaskController() { + RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_FREEFORM); + + mOrganizer.onTaskAppeared(task1, null); + + verify(mRecentTasksController).onTaskAdded(task1); + } + + @Test + public void testRecentTasks_onTaskVanished_shouldNotifyTaskController() { + RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_FREEFORM); + mOrganizer.onTaskAppeared(task1, /* leash= */ null); + + mOrganizer.onTaskVanished(task1); + + verify(mRecentTasksController).onTaskRemoved(task1); + } + + @Test + public void testRecentTasks_visibilityChanges_shouldNotifyTaskController() { + RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_FREEFORM); + mOrganizer.onTaskAppeared(task1, /* leash= */ null); + RunningTaskInfo task2 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_FREEFORM); + task2.isVisible = false; + + mOrganizer.onTaskInfoChanged(task2); + + verify(mRecentTasksController).onTaskRunningInfoChanged(task2); + } + + @Test + public void testRecentTasks_windowingModeChanges_shouldNotifyTaskController() { + RunningTaskInfo task1 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_FULLSCREEN); + mOrganizer.onTaskAppeared(task1, /* leash= */ null); + RunningTaskInfo task2 = createTaskInfo(/* taskId= */ 1, WINDOWING_MODE_FREEFORM); + + mOrganizer.onTaskInfoChanged(task2); + + verify(mRecentTasksController).onTaskRunningInfoChanged(task2); + } + private static RunningTaskInfo createTaskInfo(int taskId, int windowingMode) { RunningTaskInfo taskInfo = new RunningTaskInfo(); taskInfo.taskId = taskId; taskInfo.configuration.windowConfiguration.setWindowingMode(windowingMode); + taskInfo.isVisible = true; return taskInfo; } } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java index 884cb6ec9f74..56c4ceacc8ab 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java @@ -511,7 +511,7 @@ public class RecentTasksControllerTest extends ShellTestCase { mRecentTasksControllerReal.registerRecentTasksListener(mRecentTasksListener); ActivityManager.RunningTaskInfo taskInfo = makeRunningTaskInfo(/* taskId= */10); - mRecentTasksControllerReal.onTaskWindowingModeChanged(taskInfo); + mRecentTasksControllerReal.onTaskRunningInfoChanged(taskInfo); verify(mRecentTasksListener).onRunningTaskChanged(taskInfo); } @@ -525,7 +525,7 @@ public class RecentTasksControllerTest extends ShellTestCase { mRecentTasksControllerReal.registerRecentTasksListener(mRecentTasksListener); ActivityManager.RunningTaskInfo taskInfo = makeRunningTaskInfo(/* taskId= */10); - mRecentTasksControllerReal.onTaskWindowingModeChanged(taskInfo); + mRecentTasksControllerReal.onTaskRunningInfoChanged(taskInfo); verify(mRecentTasksListener, never()).onRunningTaskChanged(any()); } |