Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +7 −1 Original line number Diff line number Diff line Loading @@ -1213,7 +1213,13 @@ class DesktopTasksController( desktopExitRunnable?.invoke(transition) } else { snapEventHandler.removeTaskIfTiled(displayId, taskId) val willExitDesktop = willExitDesktop(taskId, displayId, forceExitDesktop = false) val willExitDesktop = if ( DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue && DesktopExperienceFlags.ENABLE_EMPTY_DESK_ON_MINIMIZE.isTrue ) false else willExitDesktop(taskId, displayId, forceExitDesktop = false) val desktopExitRunnable = performDesktopExitCleanUp( wct = wct, Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt +110 −0 Original line number Diff line number Diff line Loading @@ -4048,6 +4048,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() @Test @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND) @DisableFlags(Flags.FLAG_ENABLE_EMPTY_DESK_ON_MINIMIZE) fun onDesktopWindowMinimize_lastWindow_deactivatesDesk() { val task = setUpFreeformTask() val transition = Binder() Loading @@ -4068,8 +4069,35 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() verify(desksOrganizer).deactivateDesk(captor.firstValue, deskId = 0) } @Test @EnableFlags( Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, Flags.FLAG_ENABLE_EMPTY_DESK_ON_MINIMIZE, ) fun onDesktopWindowMinimize_lastWindow_dontDeactivateDesk() { val task = setUpFreeformTask() val transition = Binder() whenever( freeformTaskTransitionStarter.startMinimizedModeTransition( any(), anyInt(), anyBoolean(), ) ) .thenReturn(transition) controller.minimizeTask(task, MinimizeReason.MINIMIZE_BUTTON) val captor = argumentCaptor<WindowContainerTransaction>() verify(freeformTaskTransitionStarter) .startMinimizedModeTransition(captor.capture(), eq(task.taskId), eq(true)) assertTrue(captor.firstValue.isEmpty) } @Test @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND) @DisableFlags(Flags.FLAG_ENABLE_EMPTY_DESK_ON_MINIMIZE) fun onDesktopWindowMinimize_lastWindow_addsPendingDeactivateTransition() { val task = setUpFreeformTask() val transition = Binder() Loading @@ -4088,6 +4116,28 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() .addPendingTransition(DeskTransition.DeactivateDesk(token = transition, deskId = 0)) } @Test @EnableFlags( Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, Flags.FLAG_ENABLE_EMPTY_DESK_ON_MINIMIZE, ) fun onDesktopWindowMinimize_lastWindow_dontAddPendingDeactivateTransition() { val task = setUpFreeformTask() val transition = Binder() whenever( freeformTaskTransitionStarter.startMinimizedModeTransition( any(), anyInt(), anyBoolean(), ) ) .thenReturn(transition) controller.minimizeTask(task, MinimizeReason.MINIMIZE_BUTTON) verifyNoInteractions(desksTransitionsObserver) } private fun minimizePipTask(task: RunningTaskInfo, appOpsAllowed: Boolean = true) { val handler = mock(TransitionHandler::class.java) whenever(transitions.dispatchRequest(any(), any(), anyOrNull())) Loading Loading @@ -4268,6 +4318,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER) @DisableFlags(Flags.FLAG_ENABLE_EMPTY_DESK_ON_MINIMIZE) fun onTaskMinimize_singleActiveTask_hasWallpaperActivityToken_removesWallpaper() { val task = setUpFreeformTask() val transition = Binder() Loading @@ -4290,6 +4341,34 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() captor.firstValue.assertReorderAt(index = 0, wallpaperToken, toTop = false) } @Test @EnableFlags( Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER, Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, Flags.FLAG_ENABLE_EMPTY_DESK_ON_MINIMIZE, ) fun onTaskMinimize_singleActiveTask_hasWallpaperActivityToken_dontRemoveWallpaper() { val task = setUpFreeformTask() val transition = Binder() whenever( freeformTaskTransitionStarter.startMinimizedModeTransition( any(), anyInt(), anyBoolean(), ) ) .thenReturn(transition) // The only active task is being minimized. controller.minimizeTask(task, MinimizeReason.MINIMIZE_BUTTON) val captor = argumentCaptor<WindowContainerTransaction>() verify(freeformTaskTransitionStarter) .startMinimizedModeTransition(captor.capture(), eq(task.taskId), eq(true)) assertThat(captor.firstValue.changes).isEmpty() } @Test fun onDesktopWindowMinimize_singleActiveTask_alreadyMinimized_doesntRemoveWallpaper() { val task = setUpFreeformTask() Loading Loading @@ -4349,6 +4428,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER) @DisableFlags(Flags.FLAG_ENABLE_EMPTY_DESK_ON_MINIMIZE) fun onDesktopWindowMinimize_multipleActiveTasks_minimizesTheOnlyVisibleTask_removesWallpaper() { val task1 = setUpFreeformTask(active = true) val task2 = setUpFreeformTask(active = true) Loading @@ -4373,6 +4453,36 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() captor.firstValue.assertReorderAt(index = 0, wallpaperToken, toTop = false) } @Test @EnableFlags( Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER, Flags.FLAG_ENABLE_EMPTY_DESK_ON_MINIMIZE, Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, ) fun onDesktopWindowMinimize_multipleActiveTasks_minimizesTheOnlyVisibleTask_dontRemoveWallpaper() { val task1 = setUpFreeformTask(active = true) val task2 = setUpFreeformTask(active = true) val transition = Binder() whenever( freeformTaskTransitionStarter.startMinimizedModeTransition( any(), anyInt(), anyBoolean(), ) ) .thenReturn(transition) taskRepository.minimizeTask(DEFAULT_DISPLAY, task2.taskId) // task1 is the only visible task as task2 is minimized. controller.minimizeTask(task1, MinimizeReason.MINIMIZE_BUTTON) val captor = argumentCaptor<WindowContainerTransaction>() verify(freeformTaskTransitionStarter) .startMinimizedModeTransition(captor.capture(), eq(task1.taskId), eq(true)) assertTrue(captor.firstValue.isEmpty) } @Test fun onDesktopWindowMinimize_triesToExitImmersive() { val task = setUpFreeformTask() Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +7 −1 Original line number Diff line number Diff line Loading @@ -1213,7 +1213,13 @@ class DesktopTasksController( desktopExitRunnable?.invoke(transition) } else { snapEventHandler.removeTaskIfTiled(displayId, taskId) val willExitDesktop = willExitDesktop(taskId, displayId, forceExitDesktop = false) val willExitDesktop = if ( DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue && DesktopExperienceFlags.ENABLE_EMPTY_DESK_ON_MINIMIZE.isTrue ) false else willExitDesktop(taskId, displayId, forceExitDesktop = false) val desktopExitRunnable = performDesktopExitCleanUp( wct = wct, Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt +110 −0 Original line number Diff line number Diff line Loading @@ -4048,6 +4048,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() @Test @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND) @DisableFlags(Flags.FLAG_ENABLE_EMPTY_DESK_ON_MINIMIZE) fun onDesktopWindowMinimize_lastWindow_deactivatesDesk() { val task = setUpFreeformTask() val transition = Binder() Loading @@ -4068,8 +4069,35 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() verify(desksOrganizer).deactivateDesk(captor.firstValue, deskId = 0) } @Test @EnableFlags( Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, Flags.FLAG_ENABLE_EMPTY_DESK_ON_MINIMIZE, ) fun onDesktopWindowMinimize_lastWindow_dontDeactivateDesk() { val task = setUpFreeformTask() val transition = Binder() whenever( freeformTaskTransitionStarter.startMinimizedModeTransition( any(), anyInt(), anyBoolean(), ) ) .thenReturn(transition) controller.minimizeTask(task, MinimizeReason.MINIMIZE_BUTTON) val captor = argumentCaptor<WindowContainerTransaction>() verify(freeformTaskTransitionStarter) .startMinimizedModeTransition(captor.capture(), eq(task.taskId), eq(true)) assertTrue(captor.firstValue.isEmpty) } @Test @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND) @DisableFlags(Flags.FLAG_ENABLE_EMPTY_DESK_ON_MINIMIZE) fun onDesktopWindowMinimize_lastWindow_addsPendingDeactivateTransition() { val task = setUpFreeformTask() val transition = Binder() Loading @@ -4088,6 +4116,28 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() .addPendingTransition(DeskTransition.DeactivateDesk(token = transition, deskId = 0)) } @Test @EnableFlags( Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, Flags.FLAG_ENABLE_EMPTY_DESK_ON_MINIMIZE, ) fun onDesktopWindowMinimize_lastWindow_dontAddPendingDeactivateTransition() { val task = setUpFreeformTask() val transition = Binder() whenever( freeformTaskTransitionStarter.startMinimizedModeTransition( any(), anyInt(), anyBoolean(), ) ) .thenReturn(transition) controller.minimizeTask(task, MinimizeReason.MINIMIZE_BUTTON) verifyNoInteractions(desksTransitionsObserver) } private fun minimizePipTask(task: RunningTaskInfo, appOpsAllowed: Boolean = true) { val handler = mock(TransitionHandler::class.java) whenever(transitions.dispatchRequest(any(), any(), anyOrNull())) Loading Loading @@ -4268,6 +4318,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER) @DisableFlags(Flags.FLAG_ENABLE_EMPTY_DESK_ON_MINIMIZE) fun onTaskMinimize_singleActiveTask_hasWallpaperActivityToken_removesWallpaper() { val task = setUpFreeformTask() val transition = Binder() Loading @@ -4290,6 +4341,34 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() captor.firstValue.assertReorderAt(index = 0, wallpaperToken, toTop = false) } @Test @EnableFlags( Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER, Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, Flags.FLAG_ENABLE_EMPTY_DESK_ON_MINIMIZE, ) fun onTaskMinimize_singleActiveTask_hasWallpaperActivityToken_dontRemoveWallpaper() { val task = setUpFreeformTask() val transition = Binder() whenever( freeformTaskTransitionStarter.startMinimizedModeTransition( any(), anyInt(), anyBoolean(), ) ) .thenReturn(transition) // The only active task is being minimized. controller.minimizeTask(task, MinimizeReason.MINIMIZE_BUTTON) val captor = argumentCaptor<WindowContainerTransaction>() verify(freeformTaskTransitionStarter) .startMinimizedModeTransition(captor.capture(), eq(task.taskId), eq(true)) assertThat(captor.firstValue.changes).isEmpty() } @Test fun onDesktopWindowMinimize_singleActiveTask_alreadyMinimized_doesntRemoveWallpaper() { val task = setUpFreeformTask() Loading Loading @@ -4349,6 +4428,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER) @DisableFlags(Flags.FLAG_ENABLE_EMPTY_DESK_ON_MINIMIZE) fun onDesktopWindowMinimize_multipleActiveTasks_minimizesTheOnlyVisibleTask_removesWallpaper() { val task1 = setUpFreeformTask(active = true) val task2 = setUpFreeformTask(active = true) Loading @@ -4373,6 +4453,36 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() captor.firstValue.assertReorderAt(index = 0, wallpaperToken, toTop = false) } @Test @EnableFlags( Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER, Flags.FLAG_ENABLE_EMPTY_DESK_ON_MINIMIZE, Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, ) fun onDesktopWindowMinimize_multipleActiveTasks_minimizesTheOnlyVisibleTask_dontRemoveWallpaper() { val task1 = setUpFreeformTask(active = true) val task2 = setUpFreeformTask(active = true) val transition = Binder() whenever( freeformTaskTransitionStarter.startMinimizedModeTransition( any(), anyInt(), anyBoolean(), ) ) .thenReturn(transition) taskRepository.minimizeTask(DEFAULT_DISPLAY, task2.taskId) // task1 is the only visible task as task2 is minimized. controller.minimizeTask(task1, MinimizeReason.MINIMIZE_BUTTON) val captor = argumentCaptor<WindowContainerTransaction>() verify(freeformTaskTransitionStarter) .startMinimizedModeTransition(captor.capture(), eq(task1.taskId), eq(true)) assertTrue(captor.firstValue.isEmpty) } @Test fun onDesktopWindowMinimize_triesToExitImmersive() { val task = setUpFreeformTask() Loading