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

Commit 03ec63dd authored by Nicolò Mazzucato's avatar Nicolò Mazzucato Committed by Android (Google) Code Review
Browse files

Merge "Add support for custom lifecycle manager to PerDisplayRepository" into main

parents d908cd2f 0f58ce1c
Loading
Loading
Loading
Loading
+39 −1
Original line number Diff line number Diff line
@@ -44,9 +44,10 @@ class PerDisplayInstanceRepositoryImplTest : SysuiTestCase() {
    private val fakeDisplayRepository = kosmos.displayRepository
    private val fakePerDisplayInstanceProviderWithTeardown =
        kosmos.fakePerDisplayInstanceProviderWithTeardown
    private val lifecycleManager = kosmos.fakeDisplayInstanceLifecycleManager

    private val underTest: PerDisplayInstanceRepositoryImpl<TestPerDisplayInstance> =
        kosmos.fakePerDisplayInstanceRepository
        kosmos.createPerDisplayInstanceRepository(overrideLifecycleManager = null)

    @Before
    fun addDisplays() = runBlocking {
@@ -109,6 +110,43 @@ class PerDisplayInstanceRepositoryImplTest : SysuiTestCase() {
        verify(kosmos.dumpManager).registerNormalDumpable(anyString(), any())
    }

    @Test
    fun perDisplay_afterCustomLifecycleManagerRemovesDisplay_destroyInstanceInvoked() =
        testScope.runTest {
            val underTest =
                kosmos.createPerDisplayInstanceRepository(
                    overrideLifecycleManager = lifecycleManager
                )
            // Let's start with both
            lifecycleManager.displayIds.value = setOf(DEFAULT_DISPLAY_ID, NON_DEFAULT_DISPLAY_ID)

            val instance = underTest[NON_DEFAULT_DISPLAY_ID]

            lifecycleManager.displayIds.value = setOf(DEFAULT_DISPLAY_ID)

            // Now that the lifecycle manager says so, let's make sure it was destroyed
            assertThat(fakePerDisplayInstanceProviderWithTeardown.destroyed)
                .containsExactly(instance)
        }

    @Test
    fun perDisplay_lifecycleManagerDoesNotContainIt_displayRepositoryDoes_returnsNull() =
        testScope.runTest {
            val underTest =
                kosmos.createPerDisplayInstanceRepository(
                    overrideLifecycleManager = lifecycleManager
                )
            // only default display, so getting for the non-default one should fail, despite the
            // repository having both displays already
            lifecycleManager.displayIds.value = setOf(DEFAULT_DISPLAY_ID)

            assertThat(underTest[NON_DEFAULT_DISPLAY_ID]).isNull()

            lifecycleManager.displayIds.value = setOf(DEFAULT_DISPLAY_ID, NON_DEFAULT_DISPLAY_ID)

            assertThat(underTest[NON_DEFAULT_DISPLAY_ID]).isNotNull()
        }

    private fun createDisplay(displayId: Int): Display =
        display(type = Display.TYPE_INTERNAL, id = displayId)

+21 −7
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.systemui.display.data.repository

import com.android.app.displaylib.DisplayInstanceLifecycleManager
import com.android.app.displaylib.FakeDisplayInstanceLifecycleManager
import com.android.app.displaylib.PerDisplayInstanceProviderWithTeardown
import com.android.app.displaylib.PerDisplayInstanceRepositoryImpl
import com.android.systemui.dump.dumpManager
@@ -69,13 +71,25 @@ val Kosmos.fakePerDisplayInstanceProviderWithTeardown by
    Kosmos.Fixture { FakePerDisplayInstanceProviderWithTeardown() }

val Kosmos.perDisplayDumpHelper by Kosmos.Fixture { PerDisplayRepoDumpHelper(dumpManager) }
val Kosmos.fakeDisplayInstanceLifecycleManager by
    Kosmos.Fixture { FakeDisplayInstanceLifecycleManager() }

val Kosmos.fakePerDisplayInstanceRepository by
    Kosmos.Fixture {
        { lifecycleManager: DisplayInstanceLifecycleManager? ->
            PerDisplayInstanceRepositoryImpl(
                debugName = "fakePerDisplayInstanceRepository",
                instanceProvider = fakePerDisplayInstanceProviderWithTeardown,
                lifecycleManager,
                testScope.backgroundScope,
                displayRepository,
                perDisplayDumpHelper,
            )
        }
    }

fun Kosmos.createPerDisplayInstanceRepository(
    overrideLifecycleManager: DisplayInstanceLifecycleManager? = null
): PerDisplayInstanceRepositoryImpl<TestPerDisplayInstance> {
    return fakePerDisplayInstanceRepository(overrideLifecycleManager)
}