diff options
| author | 2025-02-24 21:48:47 -0800 | |
|---|---|---|
| committer | 2025-02-24 21:48:47 -0800 | |
| commit | f2160ecc06c300be8f8f21d26833bc2dae4255d2 (patch) | |
| tree | 028f39ed68b7682536f0668a953a4a203e29ef55 | |
| parent | d00563b1d6892c3f95cf44618f573432af6e84ab (diff) | |
| parent | 49596cca87175e297c2a5b6ad235ba43e86ae03d (diff) | |
Merge "[24/N] Desks: Fix deactivation when more than one task is open" into main
2 files changed, 53 insertions, 57 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 febf44280a34..e8d6fcf49eaa 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 @@ -811,7 +811,7 @@ class DesktopTasksController( willExitDesktop( triggerTaskId = taskInfo.taskId, displayId = displayId, - forceToFullscreen = false, + forceExitDesktop = false, ) taskRepository.setPipShouldKeepDesktopActive(displayId, keepActive = true) val desktopExitRunnable = @@ -884,7 +884,7 @@ class DesktopTasksController( snapEventHandler.removeTaskIfTiled(displayId, taskId) taskRepository.setPipShouldKeepDesktopActive(displayId, keepActive = true) - val willExitDesktop = willExitDesktop(taskId, displayId, forceToFullscreen = false) + val willExitDesktop = willExitDesktop(taskId, displayId, forceExitDesktop = false) val desktopExitRunnable = performDesktopExitCleanUp( wct = wct, @@ -977,7 +977,7 @@ class DesktopTasksController( ) { logV("moveToFullscreenWithAnimation taskId=%d", task.taskId) val wct = WindowContainerTransaction() - val willExitDesktop = willExitDesktop(task.taskId, task.displayId, forceToFullscreen = true) + val willExitDesktop = willExitDesktop(task.taskId, task.displayId, forceExitDesktop = true) val deactivationRunnable = addMoveToFullscreenChanges(wct, task, willExitDesktop) // We are moving a freeform task to fullscreen, put the home task under the fullscreen task. @@ -996,7 +996,14 @@ class DesktopTasksController( deactivationRunnable?.invoke(transition) // handles case where we are moving to full screen without closing all DW tasks. - if (!taskRepository.isOnlyVisibleNonClosingTask(task.taskId)) { + if ( + !taskRepository.isOnlyVisibleNonClosingTask(task.taskId) + // This callback is already invoked by |addMoveToFullscreenChanges| when one of these + // flags is enabled. + && + !DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue && + !Flags.enableDesktopWindowingPip() + ) { desktopModeEnterExitTransitionListener?.onExitDesktopModeTransitionStarted( FULLSCREEN_ANIMATION_DURATION ) @@ -1893,16 +1900,24 @@ class DesktopTasksController( private fun willExitDesktop( triggerTaskId: Int, displayId: Int, - forceToFullscreen: Boolean, + forceExitDesktop: Boolean, ): Boolean { + if ( + forceExitDesktop && + (Flags.enableDesktopWindowingPip() || + DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue) + ) { + // |forceExitDesktop| is true when the callers knows we'll exit desktop, such as when + // explicitly going fullscreen, so there's no point in checking the desktop state. + return true + } if (Flags.enablePerDisplayDesktopWallpaperActivity()) { if (!taskRepository.isOnlyVisibleNonClosingTask(triggerTaskId, displayId)) { return false } } else if ( Flags.enableDesktopWindowingPip() && - taskRepository.isMinimizedPipPresentInDisplay(displayId) && - !forceToFullscreen + taskRepository.isMinimizedPipPresentInDisplay(displayId) ) { return false } else { @@ -2295,7 +2310,7 @@ class DesktopTasksController( willExitDesktop( triggerTaskId = task.taskId, displayId = task.displayId, - forceToFullscreen = true, + forceExitDesktop = true, ), ) wct.reorder(task.token, true) @@ -2328,7 +2343,7 @@ class DesktopTasksController( willExitDesktop( triggerTaskId = task.taskId, displayId = task.displayId, - forceToFullscreen = true, + forceExitDesktop = true, ), ) return wct @@ -2433,7 +2448,7 @@ class DesktopTasksController( willExitDesktop( triggerTaskId = task.taskId, displayId = task.displayId, - forceToFullscreen = true, + forceExitDesktop = true, ), ) } @@ -2471,7 +2486,7 @@ class DesktopTasksController( willExitDesktop( triggerTaskId = task.taskId, displayId = task.displayId, - forceToFullscreen = true, + forceExitDesktop = true, ), ) } 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 ac1deec53bf6..253740c8c3fd 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 @@ -2069,6 +2069,21 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() } @Test + @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND) + fun moveToFullscreen_fromDeskWithMultipleTasks_deactivatesDesk() { + val deskId = 1 + taskRepository.addDesk(displayId = DEFAULT_DISPLAY, deskId = deskId) + taskRepository.setActiveDesk(displayId = DEFAULT_DISPLAY, deskId = deskId) + val task1 = setUpFreeformTask(displayId = DEFAULT_DISPLAY, deskId = deskId) + val task2 = setUpFreeformTask(displayId = DEFAULT_DISPLAY, deskId = deskId) + + controller.moveToFullscreen(task1.taskId, transitionSource = UNKNOWN) + + val wct = getLatestExitDesktopWct() + verify(desksOrganizer).deactivateDesk(wct, deskId = deskId) + } + + @Test fun moveToFullscreen_tdaFullscreen_windowingModeSetToUndefined() { val task = setUpFreeformTask() val tda = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)!! @@ -2278,7 +2293,10 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() } @Test - @DisableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND) + @DisableFlags( + Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, + Flags.FLAG_ENABLE_DESKTOP_WINDOWING_PIP, + ) fun moveToFullscreen_multipleVisibleNonMinimizedTasks_doesNotRemoveWallpaperActivity() { val homeTask = setUpHomeTask() val task1 = setUpFreeformTask() @@ -2305,29 +2323,6 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() } @Test - @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND) - fun moveToFullscreen_multipleVisibleNonMinimizedTasks_doesNotRemoveWallpaperActivity_multiDesksEnabled() { - val homeTask = setUpHomeTask() - val task1 = setUpFreeformTask() - // Setup task2 - setUpFreeformTask() - - val tdaInfo = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY) - assertNotNull(tdaInfo).configuration.windowConfiguration.windowingMode = - WINDOWING_MODE_FULLSCREEN - - controller.moveToFullscreen(task1.taskId, transitionSource = UNKNOWN) - - val wct = getLatestExitDesktopWct() - val task1Change = assertNotNull(wct.changes[task1.token.asBinder()]) - assertThat(task1Change.windowingMode).isEqualTo(WINDOWING_MODE_UNDEFINED) - verify(desktopModeEnterExitTransitionListener) - .onExitDesktopModeTransitionStarted(FULLSCREEN_ANIMATION_DURATION) - // Does not remove wallpaper activity, as desktop still has a visible desktop task - wct.assertWithoutHop(ReorderPredicate(wallpaperToken, toTop = false)) - } - - @Test fun moveToFullscreen_nonExistentTask_doesNothing() { controller.moveToFullscreen(999, transitionSource = UNKNOWN) verifyExitDesktopWCTNotExecuted() @@ -4455,7 +4450,10 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() } @Test - @DisableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND) + @DisableFlags( + Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, + Flags.FLAG_ENABLE_DESKTOP_WINDOWING_PIP, + ) fun moveFocusedTaskToFullscreen_multipleVisibleTasks_doesNotRemoveWallpaperActivity() { val homeTask = setUpHomeTask() val task1 = setUpFreeformTask() @@ -4480,27 +4478,6 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() @Test @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND) - fun moveFocusedTaskToFullscreen_multipleVisibleTasks_doesNotRemoveWallpaperActivity_multiDesksEnabled() { - val homeTask = setUpHomeTask() - val task1 = setUpFreeformTask() - val task2 = setUpFreeformTask() - val task3 = setUpFreeformTask() - - task1.isFocused = false - task2.isFocused = true - task3.isFocused = false - controller.enterFullscreen(DEFAULT_DISPLAY, transitionSource = UNKNOWN) - - val wct = getLatestExitDesktopWct() - val taskChange = assertNotNull(wct.changes[task2.token.asBinder()]) - assertThat(taskChange.windowingMode) - .isEqualTo(WINDOWING_MODE_UNDEFINED) // inherited FULLSCREEN - // Does not remove wallpaper activity - wct.assertWithoutHop(ReorderPredicate(wallpaperToken, toTop = null)) - } - - @Test - @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND) fun moveFocusedTaskToFullscreen_multipleVisibleTasks_fullscreenOverHome_multiDesksEnabled() { val homeTask = setUpHomeTask() val task1 = setUpFreeformTask() @@ -5225,6 +5202,10 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() } @Test + @DisableFlags( + Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, + Flags.FLAG_ENABLE_DESKTOP_WINDOWING_PIP, + ) fun enterSplit_multipleVisibleNonMinimizedTasks_removesWallpaperActivity() { val task1 = setUpFreeformTask() val task2 = setUpFreeformTask() |