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

Commit 11dd0a54 authored by Jorge Gil's avatar Jorge Gil
Browse files

Desks: Unset desk as active in display when removed

Fixes a bug where DesktopDisplay#activeDeskId could remain non-null and
referencing a desk that was already removed.

Flag: com.android.window.flags.enable_multiple_desktops_backend
Bug: 389960283
Test: remove desk with adb command or from overview, dumpsys desktopmode
shows activeDeskId=null

Change-Id: I10bc578bdf0ffb8932f8426e896384181add5b92
parent 70ca5486
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1299,6 +1299,7 @@ class DesktopRepository(
            deskByDisplayId[displayId]?.let { sequenceOf(it) } ?: emptySequence()

        override fun remove(deskId: Int) {
            setDeskInactive(deskId)
            deskByDisplayId[deskId]?.clear()
        }

@@ -1398,6 +1399,7 @@ class DesktopRepository(
            desktopDisplays[displayId]?.orderedDesks?.asSequence() ?: emptySequence()

        override fun remove(deskId: Int) {
            setDeskInactive(deskId)
            desktopDisplays.forEach { _, display ->
                display.orderedDesks.removeIf { it.deskId == deskId }
            }
+24 −0
Original line number Diff line number Diff line
@@ -1278,6 +1278,18 @@ class DesktopRepositoryTest(flags: FlagsParameterization) : ShellTestCase() {
        assertThat(repo.getDeskIds(displayId = DEFAULT_DISPLAY)).doesNotContain(3)
    }

    @Test
    @EnableFlags(FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
    fun removeDesk_multipleDesks_active_marksInactiveInDisplay() {
        repo.addDesk(displayId = DEFAULT_DISPLAY, deskId = 2)
        repo.addDesk(displayId = DEFAULT_DISPLAY, deskId = 3)
        repo.setActiveDesk(displayId = DEFAULT_DISPLAY, deskId = 3)

        repo.removeDesk(deskId = 3)

        assertThat(repo.getActiveDeskId(displayId = DEFAULT_DISPLAY)).isNull()
    }

    @Test
    @EnableFlags(FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
    fun removeDesk_multipleDesks_inactive_removes() {
@@ -1291,6 +1303,18 @@ class DesktopRepositoryTest(flags: FlagsParameterization) : ShellTestCase() {
        assertThat(repo.getDeskIds(displayId = DEFAULT_DISPLAY)).doesNotContain(2)
    }

    @Test
    @EnableFlags(FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND)
    fun removeDesk_multipleDesks_inactive_keepsOtherDeskActiveInDisplay() {
        repo.addDesk(displayId = DEFAULT_DISPLAY, deskId = 2)
        repo.addDesk(displayId = DEFAULT_DISPLAY, deskId = 3)
        repo.setActiveDesk(displayId = DEFAULT_DISPLAY, deskId = 3)

        repo.removeDesk(deskId = 2)

        assertThat(repo.getActiveDeskId(displayId = DEFAULT_DISPLAY)).isEqualTo(3)
    }

    @Test
    @EnableFlags(FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, FLAG_ENABLE_DESKTOP_WINDOWING_PERSISTENCE)
    fun removeDesk_removesFromPersistence() =