diff options
2 files changed, 48 insertions, 4 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 2b4b27046ac3..a4ed12292f5f 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 @@ -734,6 +734,12 @@ class DesktopTasksController( val wct = WindowContainerTransaction() addMoveToFullscreenChanges(wct, task) + // We are moving a freeform task to fullscreen, put the home task under the fullscreen task. + if (!forceEnterDesktop(task.displayId)) { + moveHomeTask(wct, toTop = true, task.displayId) + wct.reorder(task.token, /* onTop= */ true) + } + exitDesktopTaskTransitionHandler.startTransition( transitionSource, 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 db19017ef87a..43b740cce135 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 @@ -1586,6 +1586,8 @@ class DesktopTasksControllerTest : ShellTestCase() { @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER) fun moveToFullscreen_tdaFullscreen_windowingModeUndefined_removesWallpaperActivity() { + whenever(DesktopModeStatus.enterDesktopByDefaultOnFreeformDisplay(context)).thenReturn(true) + val homeTask = setUpHomeTask() val task = setUpFreeformTask() assertNotNull(rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)) .configuration @@ -1599,9 +1601,33 @@ class DesktopTasksControllerTest : ShellTestCase() { verify(desktopModeEnterExitTransitionListener) .onExitDesktopModeTransitionStarted(FULLSCREEN_ANIMATION_DURATION) assertThat(taskChange.windowingMode).isEqualTo(WINDOWING_MODE_UNDEFINED) - assertThat(wct.hierarchyOps).hasSize(1) + assertThat(wct.hierarchyOps).hasSize(3) // Removes wallpaper activity when leaving desktop wct.assertReorderAt(index = 0, wallpaperToken, toTop = false) + // Moves home task behind the fullscreen task + wct.assertReorderAt(index = 1, homeTask.getToken(), toTop = true) + wct.assertReorderAt(index = 2, task.getToken(), toTop = true) + } + + @Test + @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER) + fun moveToFullscreen_tdaFreeform_enforcedDesktop_doesNotReorderHome() { + whenever(DesktopModeStatus.enterDesktopByDefaultOnFreeformDisplay(context)).thenReturn(true) + val homeTask = setUpHomeTask() + val task = setUpFreeformTask() + assertNotNull(rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)) + .configuration + .windowConfiguration + .windowingMode = WINDOWING_MODE_FREEFORM + + controller.moveToFullscreen(task.taskId, transitionSource = UNKNOWN) + + val wct = getLatestExitDesktopWct() + verify(desktopModeEnterExitTransitionListener) + .onExitDesktopModeTransitionStarted(FULLSCREEN_ANIMATION_DURATION) + assertThat(wct.hierarchyOps).hasSize(1) + // Removes wallpaper activity when leaving desktop but doesn't reorder home or the task + wct.assertReorderAt(index = 0, wallpaperToken, toTop = false) } @Test @@ -1620,6 +1646,7 @@ class DesktopTasksControllerTest : ShellTestCase() { @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER) fun moveToFullscreen_tdaFreeform_windowingModeFullscreen_removesWallpaperActivity() { + val homeTask = setUpHomeTask() val task = setUpFreeformTask() assertNotNull(rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)) @@ -1634,13 +1661,17 @@ class DesktopTasksControllerTest : ShellTestCase() { assertThat(taskChange.windowingMode).isEqualTo(WINDOWING_MODE_FULLSCREEN) verify(desktopModeEnterExitTransitionListener) .onExitDesktopModeTransitionStarted(FULLSCREEN_ANIMATION_DURATION) - assertThat(wct.hierarchyOps).hasSize(1) + assertThat(wct.hierarchyOps).hasSize(3) // Removes wallpaper activity when leaving desktop wct.assertReorderAt(index = 0, wallpaperToken, toTop = false) + // Moves home task behind the fullscreen task + wct.assertReorderAt(index = 1, homeTask.getToken(), toTop = true) + wct.assertReorderAt(index = 2, task.getToken(), toTop = true) } @Test fun moveToFullscreen_multipleVisibleNonMinimizedTasks_doesNotRemoveWallpaperActivity() { + val homeTask = setUpHomeTask() val task1 = setUpFreeformTask() // Setup task2 setUpFreeformTask() @@ -1658,7 +1689,10 @@ class DesktopTasksControllerTest : ShellTestCase() { verify(desktopModeEnterExitTransitionListener) .onExitDesktopModeTransitionStarted(FULLSCREEN_ANIMATION_DURATION) // Does not remove wallpaper activity, as desktop still has a visible desktop task - assertThat(wct.hierarchyOps).isEmpty() + assertThat(wct.hierarchyOps).hasSize(2) + // Moves home task behind the fullscreen task + wct.assertReorderAt(index = 0, homeTask.getToken(), toTop = true) + wct.assertReorderAt(index = 1, task1.getToken(), toTop = true) } @Test @@ -3353,6 +3387,7 @@ class DesktopTasksControllerTest : ShellTestCase() { @Test fun moveFocusedTaskToFullscreen_multipleVisibleTasks_doesNotRemoveWallpaperActivity() { + val homeTask = setUpHomeTask() val task1 = setUpFreeformTask() val task2 = setUpFreeformTask() val task3 = setUpFreeformTask() @@ -3367,7 +3402,10 @@ class DesktopTasksControllerTest : ShellTestCase() { assertThat(taskChange.windowingMode) .isEqualTo(WINDOWING_MODE_UNDEFINED) // inherited FULLSCREEN // Does not remove wallpaper activity, as desktop still has visible desktop tasks - assertThat(wct.hierarchyOps).isEmpty() + assertThat(wct.hierarchyOps).hasSize(2) + // Moves home task behind the fullscreen task + wct.assertReorderAt(index = 0, homeTask.getToken(), toTop = true) + wct.assertReorderAt(index = 1, task2.getToken(), toTop = true) } @Test |