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

Commit 926e89b7 authored by Jorge Gil's avatar Jorge Gil
Browse files

Desks: Only send onActiveDeskChanged updates when desk did change

Flag: com.android.window.flags.enable_multiple_desktops_backend
Fix: 399943953
Test: atest DesktopRepositoryTest
Change-Id: I03b93ec8ce0fc4b7dfc9f2bc8d9a1775dce9d404
parent 24a35225
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -349,6 +349,9 @@ class DesktopRepository(
    fun setActiveDesk(displayId: Int, deskId: Int) {
        logD("setActiveDesk for displayId=%d and deskId=%d", displayId, deskId)
        val oldActiveDeskId = desktopData.getActiveDesk(displayId)?.deskId ?: INVALID_DESK_ID
        if (deskId == INVALID_DESK_ID || deskId == oldActiveDeskId) {
            return
        }
        desktopData.setActiveDesk(displayId = displayId, deskId = deskId)
        deskChangeListeners.forEach { (listener, executor) ->
            executor.execute {
+25 −5
Original line number Diff line number Diff line
@@ -2093,6 +2093,25 @@ class DesktopRepositoryTest(flags: FlagsParameterization) : ShellTestCase() {
        assertThat(lastActivationChange.newActive).isEqualTo(2)
    }

    @Test
    @EnableFlags(FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
    fun setDeskActive_alreadyActive_doesNotUpdateListenerTwice() {
        val listener = TestDeskChangeListener()
        val executor = TestShellExecutor()
        repo.addDeskChangeListener(listener, executor)
        repo.addDesk(displayId = 1, deskId = 1)
        repo.setActiveDesk(displayId = 1, deskId = 1)

        repo.setActiveDesk(displayId = 1, deskId = 1)
        executor.flushAll()

        assertThat(listener.activationChanges.size).isEqualTo(1)
        val lastActivationChange = assertNotNull(listener.lastActivationChange)
        assertThat(lastActivationChange.displayId).isEqualTo(1)
        assertThat(lastActivationChange.oldActive).isEqualTo(-1)
        assertThat(lastActivationChange.newActive).isEqualTo(1)
    }

    @Test
    @EnableFlags(FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
    fun setDeskInactive_updatesListener() {
@@ -2142,8 +2161,9 @@ class DesktopRepositoryTest(flags: FlagsParameterization) : ShellTestCase() {
        var lastRemoval: LastRemoval? = null
            private set

        var lastActivationChange: LastActivationChange? = null
            private set
        val activationChanges = mutableListOf<ActivationChange>()
        val lastActivationChange: ActivationChange?
            get() = activationChanges.lastOrNull()

        var lastCanCreateDesks: Boolean? = null
            private set
@@ -2161,8 +2181,8 @@ class DesktopRepositoryTest(flags: FlagsParameterization) : ShellTestCase() {
            newActiveDeskId: Int,
            oldActiveDeskId: Int,
        ) {
            lastActivationChange =
                LastActivationChange(
            activationChanges +=
                ActivationChange(
                    displayId = displayId,
                    oldActive = oldActiveDeskId,
                    newActive = newActiveDeskId,
@@ -2177,7 +2197,7 @@ class DesktopRepositoryTest(flags: FlagsParameterization) : ShellTestCase() {

        data class LastRemoval(val displayId: Int, val deskId: Int)

        data class LastActivationChange(val displayId: Int, val oldActive: Int, val newActive: Int)
        data class ActivationChange(val displayId: Int, val oldActive: Int, val newActive: Int)
    }

    class TestListener : DesktopRepository.ActiveTasksListener {