summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt6
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt46
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