diff options
author | 2025-02-26 10:31:30 -0800 | |
---|---|---|
committer | 2025-02-26 10:31:30 -0800 | |
commit | fd356738abe400daebc08bdc151d36e177c4bc8d (patch) | |
tree | 27ee749627577721a5b01d61c53eea04175b6b61 | |
parent | c3a5a681d4a5ba9bfea1d6e005f6a7fa8f7e184b (diff) | |
parent | 16b23c4f1831091556468312f46825600f6d593e (diff) |
Merge "Use task's displayId in moveToBackground flows" into main
2 files changed, 45 insertions, 17 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt index e0860ded823c..b47dfe2064cd 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt @@ -472,15 +472,14 @@ class DesktopTasksController( remoteTransition: RemoteTransition? = null, callback: IMoveToDesktopCallback? = null, ): Boolean { - val runningTask = shellTaskOrganizer.getRunningTaskInfo(taskId) - val backgroundTask = recentTasksController?.findTaskInBackground(taskId) - if (runningTask == null && backgroundTask == null) { + val task = + shellTaskOrganizer.getRunningTaskInfo(taskId) + ?: recentTasksController?.findTaskInBackground(taskId) + if (task == null) { logW("moveTaskToDefaultDeskAndActivate taskId=%d not found", taskId) return false } - // TODO(342378842): Instead of using default display, support multiple displays - val displayId = runningTask?.displayId ?: DEFAULT_DISPLAY - val deskId = getDefaultDeskId(displayId) + val deskId = getDefaultDeskId(task.displayId) return moveTaskToDesk( taskId = taskId, deskId = deskId, @@ -532,14 +531,14 @@ class DesktopTasksController( remoteTransition: RemoteTransition? = null, callback: IMoveToDesktopCallback? = null, ): Boolean { - if (recentTasksController?.findTaskInBackground(taskId) == null) { + val task = recentTasksController?.findTaskInBackground(taskId) + if (task == null) { logW("moveBackgroundTaskToDesktop taskId=%d not found", taskId) return false } logV("moveBackgroundTaskToDesktop with taskId=%d", taskId) - // TODO(342378842): Instead of using default display, support multiple displays val taskIdToMinimize = - bringDesktopAppsToFrontBeforeShowingNewTask(DEFAULT_DISPLAY, wct, taskId) + bringDesktopAppsToFrontBeforeShowingNewTask(task.displayId, wct, taskId) val exitResult = desktopImmersiveController.exitImmersiveIfApplicable( wct = wct, diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt index 076ce08931d6..d5c84bafbd81 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt @@ -1616,7 +1616,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() @Test @DisableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun moveTaskToDesktop_desktopWallpaperDisabled_nonRunningTask_launchesInFreeform() { - val task = createTaskInfo(1) + val task = createRecentTaskInfo(1) whenever(shellTaskOrganizer.getRunningTaskInfo(anyInt())).thenReturn(null) whenever(recentTasksController.findTaskInBackground(anyInt())).thenReturn(task) @@ -1631,7 +1631,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) fun moveTaskToDesktop_desktopWallpaperEnabled_nonRunningTask_launchesInFreeform() { whenever(desktopWallpaperActivityTokenProvider.getToken()).thenReturn(null) - val task = createTaskInfo(1) + val task = createRecentTaskInfo(1) whenever(shellTaskOrganizer.getRunningTaskInfo(anyInt())).thenReturn(null) whenever(recentTasksController.findTaskInBackground(anyInt())).thenReturn(task) @@ -1803,7 +1803,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() whenever(transitions.startTransition(anyInt(), any(), transitionHandlerArgCaptor.capture())) .thenReturn(Binder()) - val task = createTaskInfo(1) + val task = createRecentTaskInfo(1) whenever(shellTaskOrganizer.getRunningTaskInfo(anyInt())).thenReturn(null) whenever(recentTasksController.findTaskInBackground(anyInt())).thenReturn(task) controller.moveTaskToDefaultDeskAndActivate( @@ -1818,6 +1818,34 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() } @Test + @EnableFlags( + Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY, + Flags.FLAG_ENABLE_PER_DISPLAY_DESKTOP_WALLPAPER_ACTIVITY, + Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER, + ) + fun moveBackgroundTaskToDesktop_nonDefaultDisplay_reordersHomeAndWallpaperOfNonDefaultDisplay() { + val homeTask = setUpHomeTask(displayId = SECOND_DISPLAY) + val wallpaperToken = MockToken().token() + whenever(desktopWallpaperActivityTokenProvider.getToken(SECOND_DISPLAY)) + .thenReturn(wallpaperToken) + val task = setUpFreeformTask(displayId = SECOND_DISPLAY, deskId = 2, background = true) + + controller.moveTaskToDefaultDeskAndActivate( + taskId = task.taskId, + transitionSource = UNKNOWN, + remoteTransition = RemoteTransition(spy(TestRemoteTransition())), + ) + + val wct = getLatestTransition() + val homeReorderIndex = wct.indexOfReorder(homeTask, toTop = true) + val wallpaperReorderIndex = wct.indexOfReorder(wallpaperToken, toTop = true) + assertThat(homeReorderIndex).isNotEqualTo(-1) + assertThat(wallpaperReorderIndex).isNotEqualTo(-1) + // Wallpaper last, to be in front of Home. + assertThat(wallpaperReorderIndex).isGreaterThan(homeReorderIndex) + } + + @Test fun moveRunningTaskToDesktop_remoteTransition_usesOneShotHandler() { val transitionHandlerArgCaptor = argumentCaptor<TransitionHandler>() whenever(transitions.startTransition(anyInt(), any(), transitionHandlerArgCaptor.capture())) @@ -2468,7 +2496,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() @Test fun moveTaskToFront_backgroundTask_launchesTask() { - val task = createTaskInfo(1) + val task = createRecentTaskInfo(1) whenever(shellTaskOrganizer.getRunningTaskInfo(anyInt())).thenReturn(null) whenever( desktopMixedTransitionHandler.startLaunchTransition( @@ -2490,7 +2518,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() @Test fun moveTaskToFront_backgroundTaskBringsTasksOverLimit_minimizesBackTask() { val freeformTasks = (1..MAX_TASK_LIMIT).map { _ -> setUpFreeformTask() } - val task = createTaskInfo(1001) + val task = createRecentTaskInfo(1001) whenever(shellTaskOrganizer.getRunningTaskInfo(task.taskId)).thenReturn(null) whenever( desktopMixedTransitionHandler.startLaunchTransition( @@ -6716,7 +6744,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() if (background) { whenever(shellTaskOrganizer.getRunningTaskInfo(task.taskId)).thenReturn(null) whenever(recentTasksController.findTaskInBackground(task.taskId)) - .thenReturn(createTaskInfo(task.taskId)) + .thenReturn(createRecentTaskInfo(taskId = task.taskId, displayId = displayId)) } else { whenever(shellTaskOrganizer.getRunningTaskInfo(task.taskId)).thenReturn(task) } @@ -7151,8 +7179,9 @@ private fun WindowContainerTransaction?.anyWindowingModeChange( } ?: false } -private fun createTaskInfo(id: Int) = +private fun createRecentTaskInfo(taskId: Int, displayId: Int = DEFAULT_DISPLAY) = RecentTaskInfo().apply { - taskId = id + this.taskId = taskId + this.displayId = displayId token = WindowContainerToken(mock(IWindowContainerToken::class.java)) } |