Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 307d9ee9 authored by Orhan Uysal's avatar Orhan Uysal
Browse files

Prevent minimize animation on desk switch

When a desk switch occurs by unminimizing a minimized app that will
trigger task limit minimize, apply the minimize changes in the same
transition. So when the desk switch is hapenning, it animates with the
new task already unminimized.

Test: Manually trigger a desk switch at task limit
Test: atest DesktopTasksLimiter & DesktopTasksController
Bug: 440224276
Flag: EXEMPT BUGFIX
Change-Id: Ia682e2d3c05f65e2ada0cc1fa201d93c55aa30ef
parent 059a7f56
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -2243,6 +2243,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)
@@ -4768,8 +4769,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)
    }
@@ -4877,6 +4885,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
@@ -4932,7 +4941,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
+12 −1
Original line number Diff line number Diff line
@@ -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
        }

+17 −1
Original line number Diff line number Diff line
@@ -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())