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

Commit 1dfb208f authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Desks: Deactivate desk of correct user on Home launches" into main

parents 125697be 5eda5b92
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -2827,10 +2827,20 @@ class DesktopTasksController(
        task: RunningTaskInfo,
        transition: IBinder,
    ): WindowContainerTransaction? {
        logV("DesktopTasksController: handleHomeTaskLaunch")
        val activeDeskId = taskRepository.getActiveDeskId(task.displayId) ?: return null
        logV(
            "DesktopTasksController: handleHomeTaskLaunch taskId=%s userId=%s currentUserId=%d",
            task.taskId,
            task.userId,
            userId,
        )
        // On user-switches, the home task is launched and the request is dispatched before the
        // user-switch is known by SysUI/Shell, so don't use the "current" repository.
        val repository = userRepositories.getProfile(task.userId)
        val activeDeskId = repository.getActiveDeskId(task.displayId) ?: return null
        val wct = WindowContainerTransaction()
        // TODO: b/393978539 - desktop-first displays may need to keep the desk active.
        // TODO: b/415381304 - pass in the correct |userId| to |performDesktopExitCleanUp| to
        //  ensure desk deactivation updates are applied to the right repository.
        val runOnTransitStart =
            performDesktopExitCleanUp(
                wct = wct,
+4 −0
Original line number Diff line number Diff line
@@ -103,6 +103,10 @@ class DesksTransitionObserver(

    private fun handleDeskTransition(info: TransitionInfo, deskTransition: DeskTransition) {
        logD("Desk transition ready: %s", deskTransition)
        // TODO: b/415381304 - don't use |current|. It can point to the old user during user-switch
        //   transitions while transition info changes can be for the new user. Transitions can
        //   even contain changes for tasks of different users. Instead, add a |userId| argument
        //   in |DeskTransition|, since |TaskInfo#mUserId| is also unreliable on non leaf tasks.
        val desktopRepository = desktopUserRepositories.current
        when (deskTransition) {
            is DeskTransition.RemoveDesk -> {
+23 −1
Original line number Diff line number Diff line
@@ -202,6 +202,7 @@ import org.mockito.kotlin.argThat
import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.atLeastOnce
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
import org.mockito.kotlin.whenever
import org.mockito.quality.Strictness
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
@@ -8896,7 +8897,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
    @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
    fun handleRequest_homeTask_activeDesk_deactivates() {
        taskRepository.setActiveDesk(DEFAULT_DISPLAY, deskId = 0)
        val home = createHomeTask(DEFAULT_DISPLAY)
        val home = createHomeTask(DEFAULT_DISPLAY, userId = taskRepository.userId)

        val transition = Binder()
        val result = controller.handleRequest(transition, createTransition(home))
@@ -8919,6 +8920,27 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
        assertNull(result)
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
    fun handleRequest_homeTask_activeDesk_nonCurrentUser_deactivatesDeskOfCorrectUser() {
        val currentUserDesk = 0
        taskRepository.setActiveDesk(DEFAULT_DISPLAY, deskId = currentUserDesk)
        val otherUser = 88
        val otherUserDesk = 1
        userRepositories.getProfile(otherUser).apply {
            addDesk(DEFAULT_DISPLAY, deskId = otherUserDesk)
            setActiveDesk(DEFAULT_DISPLAY, deskId = otherUserDesk)
        }
        val home = createHomeTask(DEFAULT_DISPLAY, userId = otherUser)

        val transition = Binder()
        val result = controller.handleRequest(transition, createTransition(home))

        assertNotNull(result)
        verify(desksOrganizer).deactivateDesk(result, deskId = otherUserDesk)
        verify(desksOrganizer, never()).deactivateDesk(result, deskId = currentUserDesk)
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_FULLY_IMMERSIVE_IN_DESKTOP)
    fun shouldPlayDesktopAnimation_notShowingDesktop_doesNotPlay() {
+5 −2
Original line number Diff line number Diff line
@@ -81,13 +81,16 @@ object DesktopTestHelpers {
            .setLastActiveTime(100)
            .build()

    fun createHomeTask(displayId: Int = DEFAULT_DISPLAY): RunningTaskInfo =
    fun createHomeTask(
        displayId: Int = DEFAULT_DISPLAY,
        userId: Int = DEFAULT_USER_ID,
    ): RunningTaskInfo =
        TestRunningTaskInfoBuilder()
            .setDisplayId(displayId)
            .setToken(MockToken().token())
            .setActivityType(ACTIVITY_TYPE_HOME)
            .setWindowingMode(WINDOWING_MODE_FULLSCREEN)
            .setUserId(DEFAULT_USER_ID)
            .setUserId(userId)
            .setLastActiveTime(100)
            .build()