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

Commit ec488fe9 authored by Matt Sziklay's avatar Matt Sziklay
Browse files

Merge onCreateCallbacks when an unassigned create request is found.

When an unassigned create desk request is found in RootTaskDesksOrganizer#createDesk, modify the onCreateCallback such that the original callback executes, then the newly provided one. This prevents a crash where warmed up desks don't get added to the repository.

Bug: 415283499
Bug: 414416393
Test: Manual
Flag: com.android.window.flags.enable_multiple_desktops_backend
Change-Id: I61c635dd7d48ed6947da4d27bd07555ddc667867
parent 899202ec
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -110,7 +110,14 @@ class RootTaskDesksOrganizer(
        val unassignedRequest = createDeskRootRequests.firstOrNull { it.userId == null }
        if (unassignedRequest != null) {
            createDeskRootRequests.remove(unassignedRequest)
            createDeskRootRequests += unassignedRequest.copy(userId = userId)
            createDeskRootRequests +=
                unassignedRequest.copy(
                    userId = userId,
                    onCreateCallback = { deskId ->
                        unassignedRequest.onCreateCallback.onCreated(deskId)
                        callback.onCreated(deskId)
                    },
                )
            return
        }
        // Must request a new root.
+14 −0
Original line number Diff line number Diff line
@@ -245,6 +245,20 @@ class RootTaskDesksOrganizerTest : ShellTestCase() {
            )
    }

    @Test
    fun testCreateDesk_warmUpInProgress_appliesCallback() = runTest {
        val freeformRoot = createFreeformTask().apply { parentTaskId = -1 }
        var callbackApplied = false

        organizer.warmUpDefaultDesk(userId = PRIMARY_USER_ID, displayId = DEFAULT_DISPLAY)
        organizer.createDesk(userId = PRIMARY_USER_ID, displayId = DEFAULT_DISPLAY) { _ ->
            callbackApplied = true
        }
        organizer.onTaskAppeared(freeformRoot, SurfaceControl())

        assertThat(callbackApplied).isTrue()
    }

    @Test
    fun testCreateDesk_twice_warmUpInProgress_usesWarmedUpDeskAndCreatesOne() = runTest {
        val displayId = DEFAULT_DISPLAY