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

Commit f79e25ab authored by Jorge Gil's avatar Jorge Gil
Browse files

Desks: Deactivate desk on other desk activation

Flag: com.android.window.flags.enable_multiple_desktops_backend
Bug: 404545438
Test: have two desks, move from one to the other using adb command,
verify dumpsys shows it as deactivated. Then go home, new tasks open in
fullscreen.

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


+27 −0
Original line number Original line Diff line number Diff line
@@ -5638,6 +5638,33 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
        verify(desksOrganizer).reorderTaskToFront(any(), eq(deskId), eq(runningTask))
        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
    @Test
    @EnableFlags(
    @EnableFlags(
        Flags.FLAG_ENABLE_DESKTOP_WINDOWING_BACK_NAVIGATION,
        Flags.FLAG_ENABLE_DESKTOP_WINDOWING_BACK_NAVIGATION,