Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +7 −1 Original line number Diff line number Diff line Loading @@ -1185,7 +1185,13 @@ class DesktopTasksController( val options = createNewWindowOptions(callingTask) if (options.launchWindowingMode == WINDOWING_MODE_FREEFORM) { wct.startTask(requestedTaskId, options.toBundle()) transitions.startTransition(TRANSIT_OPEN, wct, null) val taskToMinimize = bringDesktopAppsToFrontBeforeShowingNewTask( callingTask.displayId, wct, requestedTaskId) val runOnTransit = immersiveTransitionHandler .exitImmersiveIfApplicable(wct, callingTask.displayId) val transition = transitions.startTransition(TRANSIT_OPEN, wct, null) addPendingMinimizeTransition(transition, taskToMinimize) runOnTransit?.invoke(transition) } else { val splitPosition = splitScreenController.determineNewInstancePosition(callingTask) splitScreenController.startTask(requestedTaskId, splitPosition, Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt +52 −0 Original line number Diff line number Diff line Loading @@ -2984,6 +2984,58 @@ class DesktopTasksControllerTest : ShellTestCase() { .launchWindowingMode).isEqualTo(WINDOWING_MODE_FREEFORM) } @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MULTI_INSTANCE_FEATURES) fun openInstance_fromFreeform_minimizesIfNeeded() { setUpLandscapeDisplay() val homeTask = setUpHomeTask() val freeformTasks = (1..MAX_TASK_LIMIT + 1).map { _ -> setUpFreeformTask() } val oldestTask = freeformTasks.first() val newestTask = freeformTasks.last() runOpenInstance(newestTask, freeformTasks[1].taskId) val wct = getLatestWct(type = TRANSIT_OPEN) // Home is moved to front of everything. assertThat( wct.hierarchyOps.any { hop -> hop.container == homeTask.token.asBinder() && hop.toTop } ).isTrue() // And the oldest task isn't moved in front of home, effectively minimizing it. assertThat( wct.hierarchyOps.none { hop -> hop.container == oldestTask.token.asBinder() && hop.toTop } ).isTrue() } @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MULTI_INSTANCE_FEATURES) fun openInstance_fromFreeform_exitsImmersiveIfNeeded() { setUpLandscapeDisplay() val homeTask = setUpHomeTask() val freeformTask = setUpFreeformTask() val immersiveTask = setUpFreeformTask() taskRepository.setTaskInFullImmersiveState( displayId = immersiveTask.displayId, taskId = immersiveTask.taskId, immersive = true ) val runOnStartTransit = RunOnStartTransitionCallback() val transition = Binder() whenever(transitions.startTransition(eq(TRANSIT_OPEN), any(), anyOrNull())) .thenReturn(transition) whenever(mockDesktopFullImmersiveTransitionHandler .exitImmersiveIfApplicable(any(), eq(immersiveTask.displayId))).thenReturn(runOnStartTransit) runOpenInstance(immersiveTask, freeformTask.taskId) verify(mockDesktopFullImmersiveTransitionHandler) .exitImmersiveIfApplicable(any(), eq(immersiveTask.displayId)) runOnStartTransit.assertOnlyInvocation(transition) } private fun runOpenInstance( callingTask: RunningTaskInfo, requestedTaskId: Int Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +7 −1 Original line number Diff line number Diff line Loading @@ -1185,7 +1185,13 @@ class DesktopTasksController( val options = createNewWindowOptions(callingTask) if (options.launchWindowingMode == WINDOWING_MODE_FREEFORM) { wct.startTask(requestedTaskId, options.toBundle()) transitions.startTransition(TRANSIT_OPEN, wct, null) val taskToMinimize = bringDesktopAppsToFrontBeforeShowingNewTask( callingTask.displayId, wct, requestedTaskId) val runOnTransit = immersiveTransitionHandler .exitImmersiveIfApplicable(wct, callingTask.displayId) val transition = transitions.startTransition(TRANSIT_OPEN, wct, null) addPendingMinimizeTransition(transition, taskToMinimize) runOnTransit?.invoke(transition) } else { val splitPosition = splitScreenController.determineNewInstancePosition(callingTask) splitScreenController.startTask(requestedTaskId, splitPosition, Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt +52 −0 Original line number Diff line number Diff line Loading @@ -2984,6 +2984,58 @@ class DesktopTasksControllerTest : ShellTestCase() { .launchWindowingMode).isEqualTo(WINDOWING_MODE_FREEFORM) } @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MULTI_INSTANCE_FEATURES) fun openInstance_fromFreeform_minimizesIfNeeded() { setUpLandscapeDisplay() val homeTask = setUpHomeTask() val freeformTasks = (1..MAX_TASK_LIMIT + 1).map { _ -> setUpFreeformTask() } val oldestTask = freeformTasks.first() val newestTask = freeformTasks.last() runOpenInstance(newestTask, freeformTasks[1].taskId) val wct = getLatestWct(type = TRANSIT_OPEN) // Home is moved to front of everything. assertThat( wct.hierarchyOps.any { hop -> hop.container == homeTask.token.asBinder() && hop.toTop } ).isTrue() // And the oldest task isn't moved in front of home, effectively minimizing it. assertThat( wct.hierarchyOps.none { hop -> hop.container == oldestTask.token.asBinder() && hop.toTop } ).isTrue() } @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MULTI_INSTANCE_FEATURES) fun openInstance_fromFreeform_exitsImmersiveIfNeeded() { setUpLandscapeDisplay() val homeTask = setUpHomeTask() val freeformTask = setUpFreeformTask() val immersiveTask = setUpFreeformTask() taskRepository.setTaskInFullImmersiveState( displayId = immersiveTask.displayId, taskId = immersiveTask.taskId, immersive = true ) val runOnStartTransit = RunOnStartTransitionCallback() val transition = Binder() whenever(transitions.startTransition(eq(TRANSIT_OPEN), any(), anyOrNull())) .thenReturn(transition) whenever(mockDesktopFullImmersiveTransitionHandler .exitImmersiveIfApplicable(any(), eq(immersiveTask.displayId))).thenReturn(runOnStartTransit) runOpenInstance(immersiveTask, freeformTask.taskId) verify(mockDesktopFullImmersiveTransitionHandler) .exitImmersiveIfApplicable(any(), eq(immersiveTask.displayId)) runOnStartTransit.assertOnlyInvocation(transition) } private fun runOpenInstance( callingTask: RunningTaskInfo, requestedTaskId: Int Loading