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

Commit 612a305b authored by Jorge Gil's avatar Jorge Gil Committed by Android (Google) Code Review
Browse files

Merge "Desks: Deactivate desk on other desk activation" into main

parents 079a4029 f79e25ab
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -2892,7 +2892,7 @@ class DesktopTasksController(
     * null and may be used to run other desktop policies, such as minimizing another task if the
     * task limit has been exceeded.
     */
    fun addDeskActivationChanges(
    private fun addDeskActivationChanges(
        deskId: Int,
        wct: WindowContainerTransaction,
        newTask: TaskInfo? = null,
@@ -2950,6 +2950,8 @@ class DesktopTasksController(
                    }
                }
        }
        val deactivatingDesk = taskRepository.getActiveDeskId(displayId)?.takeIf { it != deskId }
        val deactivationRunnable = prepareDeskDeactivationIfNeeded(wct, deactivatingDesk)
        return { transition ->
            val activateDeskTransition =
                if (newTaskIdInFront != null) {
@@ -2970,6 +2972,7 @@ class DesktopTasksController(
            taskIdToMinimize?.let { minimizingTask ->
                addPendingMinimizeTransition(transition, minimizingTask, MinimizeReason.TASK_LIMIT)
            }
            deactivationRunnable?.invoke(transition)
        }
    }

+27 −0
Original line number Diff line number Diff line
@@ -5638,6 +5638,33 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
        verify(desksOrganizer).reorderTaskToFront(any(), eq(deskId), eq(runningTask))
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
    fun activateDesk_otherDeskWasActive_deactivatesOtherDesk() {
        val previouslyActiveDeskId = 1
        val activatingDeskId = 0
        val transition = Binder()
        val deskChange = mock(TransitionInfo.Change::class.java)
        whenever(transitions.startTransition(eq(TRANSIT_TO_FRONT), any(), anyOrNull()))
            .thenReturn(transition)
        whenever(desksOrganizer.isDeskActiveAtEnd(deskChange, activatingDeskId)).thenReturn(true)
        // Make desk inactive by activating another desk.
        taskRepository.addDesk(DEFAULT_DISPLAY, deskId = previouslyActiveDeskId)
        taskRepository.setActiveDesk(DEFAULT_DISPLAY, deskId = previouslyActiveDeskId)

        controller.activateDesk(activatingDeskId, RemoteTransition(TestRemoteTransition()))

        verify(desksOrganizer).deactivateDesk(any(), eq(previouslyActiveDeskId))
        verify(desksTransitionsObserver)
            .addPendingTransition(
                argThat {
                    this is DeskTransition.DeactivateDesk &&
                        this.token == transition &&
                        this.deskId == previouslyActiveDeskId
                }
            )
    }

    @Test
    @EnableFlags(
        Flags.FLAG_ENABLE_DESKTOP_WINDOWING_BACK_NAVIGATION,