Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +11 −2 Original line number Diff line number Diff line Loading @@ -2333,6 +2333,7 @@ class DesktopTasksController( wct = activateDeskWct, userId = userId, enterReason = EnterReason.APP_FREEFORM_INTENT, isDeskSwitch = repository.isAnyDeskActive(displayId), ) // Desk activation must be handled before app launch-related transactions. activateDeskWct.merge(launchTransaction, /* transfer= */ true) Loading Loading @@ -4965,8 +4966,15 @@ class DesktopTasksController( private fun getTaskIdToMinimize( expandedTasksOrderedFrontToBack: List<Int>, newTaskIdInFront: Int?, isDeskSwitch: Boolean = false, ): Int? { if (DesktopExperienceFlags.ENABLE_DESKTOP_TASK_LIMIT_SEPARATE_TRANSITION.isTrue) return null // If it's a desk switch, include the minimized task in the same transition. So when the // user switches the desks, the new desk has the correct task minimized already. if ( DesktopExperienceFlags.ENABLE_DESKTOP_TASK_LIMIT_SEPARATE_TRANSITION.isTrue && !isDeskSwitch ) return null val limiter = desktopTasksLimiter.getOrNull() ?: return null return limiter.getTaskIdToMinimize(expandedTasksOrderedFrontToBack, newTaskIdInFront) } Loading Loading @@ -5074,6 +5082,7 @@ class DesktopTasksController( switchingUser: Boolean = false, displayId: Int = userRepositories.getProfile(userId).getDisplayForDesk(deskId), enterReason: EnterReason, isDeskSwitch: Boolean = false, ): RunOnTransitStart { val repository = userRepositories.getProfile(userId) val newTaskIdInFront = newTask?.taskId Loading Loading @@ -5129,7 +5138,7 @@ class DesktopTasksController( // If we're adding a new Task we might need to minimize an old one // TODO: b/32994943 - remove dead code when cleaning up task_limit_separate_transition flag val taskIdToMinimize = getTaskIdToMinimize(expandedTasksOrderedFrontToBack, newTaskIdInFront) getTaskIdToMinimize(expandedTasksOrderedFrontToBack, newTaskIdInFront, isDeskSwitch) if (taskIdToMinimize != null) { val taskToMinimize = shellTaskOrganizer.getRunningTaskInfo(taskIdToMinimize) // TODO(b/365725441): Handle non running task minimization Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksLimiter.kt +12 −1 Original line number Diff line number Diff line Loading @@ -273,7 +273,18 @@ class DesktopTasksLimiter( val taskChange = info.changes.find { change -> change.taskInfo?.taskId == taskDetails.taskId } val taskRepository = desktopUserRepositories.current if (taskChange == null) return !taskRepository.isVisibleTask(taskDetails.taskId) if (taskChange == null) { if (!taskRepository.isVisibleTask(taskDetails.taskId)) { return true } // if the task is expanded on the desk but not wm visible, we can still mark it as // minimized. if (taskRepository.isActiveTask(taskDetails.taskId)) { val taskInfo = shellTaskOrganizer.getRunningTaskInfo(taskDetails.taskId) return taskInfo?.isVisible == false } return false } return taskChange.mode == TRANSIT_TO_BACK } Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksLimiterTest.kt +17 −1 Original line number Diff line number Diff line Loading @@ -235,13 +235,29 @@ class DesktopTasksLimiterTest : ShellTestCase() { } @Test fun onTransitionReady_pendingTransition_noTaskChange_taskVisible_taskIsNotMinimized() { fun onTransitionReady_pendingTransition_noTaskChange_taskVis_wmInvis_taskIsMinimized() { desktopTaskRepo.addDesk(displayId = DEFAULT_DISPLAY, deskId = 0) desktopTaskRepo.setActiveDesk(displayId = DEFAULT_DISPLAY, deskId = 0) val transition = Binder() val task = setUpFreeformTask() markTaskVisible(task) addPendingMinimizeChange(transition, taskId = task.taskId) task.isVisible = false callOnTransitionReady(transition, TransitionInfoBuilder(TRANSIT_OPEN).build()) assertThat(desktopTaskRepo.isMinimizedTask(taskId = task.taskId)).isTrue() } @Test fun onTransitionReady_pendingTransition_noTaskChange_taskVis_wmVis_taskIsNotMinimized() { desktopTaskRepo.addDesk(displayId = DEFAULT_DISPLAY, deskId = 0) desktopTaskRepo.setActiveDesk(displayId = DEFAULT_DISPLAY, deskId = 0) val transition = Binder() val task = setUpFreeformTask() markTaskVisible(task) addPendingMinimizeChange(transition, taskId = task.taskId) task.isVisible = true callOnTransitionReady(transition, TransitionInfoBuilder(TRANSIT_OPEN).build()) Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +11 −2 Original line number Diff line number Diff line Loading @@ -2333,6 +2333,7 @@ class DesktopTasksController( wct = activateDeskWct, userId = userId, enterReason = EnterReason.APP_FREEFORM_INTENT, isDeskSwitch = repository.isAnyDeskActive(displayId), ) // Desk activation must be handled before app launch-related transactions. activateDeskWct.merge(launchTransaction, /* transfer= */ true) Loading Loading @@ -4965,8 +4966,15 @@ class DesktopTasksController( private fun getTaskIdToMinimize( expandedTasksOrderedFrontToBack: List<Int>, newTaskIdInFront: Int?, isDeskSwitch: Boolean = false, ): Int? { if (DesktopExperienceFlags.ENABLE_DESKTOP_TASK_LIMIT_SEPARATE_TRANSITION.isTrue) return null // If it's a desk switch, include the minimized task in the same transition. So when the // user switches the desks, the new desk has the correct task minimized already. if ( DesktopExperienceFlags.ENABLE_DESKTOP_TASK_LIMIT_SEPARATE_TRANSITION.isTrue && !isDeskSwitch ) return null val limiter = desktopTasksLimiter.getOrNull() ?: return null return limiter.getTaskIdToMinimize(expandedTasksOrderedFrontToBack, newTaskIdInFront) } Loading Loading @@ -5074,6 +5082,7 @@ class DesktopTasksController( switchingUser: Boolean = false, displayId: Int = userRepositories.getProfile(userId).getDisplayForDesk(deskId), enterReason: EnterReason, isDeskSwitch: Boolean = false, ): RunOnTransitStart { val repository = userRepositories.getProfile(userId) val newTaskIdInFront = newTask?.taskId Loading Loading @@ -5129,7 +5138,7 @@ class DesktopTasksController( // If we're adding a new Task we might need to minimize an old one // TODO: b/32994943 - remove dead code when cleaning up task_limit_separate_transition flag val taskIdToMinimize = getTaskIdToMinimize(expandedTasksOrderedFrontToBack, newTaskIdInFront) getTaskIdToMinimize(expandedTasksOrderedFrontToBack, newTaskIdInFront, isDeskSwitch) if (taskIdToMinimize != null) { val taskToMinimize = shellTaskOrganizer.getRunningTaskInfo(taskIdToMinimize) // TODO(b/365725441): Handle non running task minimization Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksLimiter.kt +12 −1 Original line number Diff line number Diff line Loading @@ -273,7 +273,18 @@ class DesktopTasksLimiter( val taskChange = info.changes.find { change -> change.taskInfo?.taskId == taskDetails.taskId } val taskRepository = desktopUserRepositories.current if (taskChange == null) return !taskRepository.isVisibleTask(taskDetails.taskId) if (taskChange == null) { if (!taskRepository.isVisibleTask(taskDetails.taskId)) { return true } // if the task is expanded on the desk but not wm visible, we can still mark it as // minimized. if (taskRepository.isActiveTask(taskDetails.taskId)) { val taskInfo = shellTaskOrganizer.getRunningTaskInfo(taskDetails.taskId) return taskInfo?.isVisible == false } return false } return taskChange.mode == TRANSIT_TO_BACK } Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksLimiterTest.kt +17 −1 Original line number Diff line number Diff line Loading @@ -235,13 +235,29 @@ class DesktopTasksLimiterTest : ShellTestCase() { } @Test fun onTransitionReady_pendingTransition_noTaskChange_taskVisible_taskIsNotMinimized() { fun onTransitionReady_pendingTransition_noTaskChange_taskVis_wmInvis_taskIsMinimized() { desktopTaskRepo.addDesk(displayId = DEFAULT_DISPLAY, deskId = 0) desktopTaskRepo.setActiveDesk(displayId = DEFAULT_DISPLAY, deskId = 0) val transition = Binder() val task = setUpFreeformTask() markTaskVisible(task) addPendingMinimizeChange(transition, taskId = task.taskId) task.isVisible = false callOnTransitionReady(transition, TransitionInfoBuilder(TRANSIT_OPEN).build()) assertThat(desktopTaskRepo.isMinimizedTask(taskId = task.taskId)).isTrue() } @Test fun onTransitionReady_pendingTransition_noTaskChange_taskVis_wmVis_taskIsNotMinimized() { desktopTaskRepo.addDesk(displayId = DEFAULT_DISPLAY, deskId = 0) desktopTaskRepo.setActiveDesk(displayId = DEFAULT_DISPLAY, deskId = 0) val transition = Binder() val task = setUpFreeformTask() markTaskVisible(task) addPendingMinimizeChange(transition, taskId = task.taskId) task.isVisible = true callOnTransitionReady(transition, TransitionInfoBuilder(TRANSIT_OPEN).build()) Loading