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

Commit 36a651cb authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Update ModesTile state even when arg == null" into main

parents db45b25e 999b6146
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -41,6 +41,8 @@ class FakeZenModeRepository : ZenModeRepository {
    override val modes: Flow<List<ZenMode>>
        get() = mutableModesFlow.asStateFlow()

    override fun getModes(): List<ZenMode> = mutableModesFlow.value

    private val activeModesDurations = mutableMapOf<String, Duration?>()

    init {
+11 −0
Original line number Diff line number Diff line
@@ -59,6 +59,8 @@ interface ZenModeRepository {
    /** A list of all existing priority modes. */
    val modes: Flow<List<ZenMode>>

    fun getModes(): List<ZenMode>

    fun activateMode(zenMode: ZenMode, duration: Duration? = null)

    fun deactivateMode(zenMode: ZenMode)
@@ -184,6 +186,15 @@ class ZenModeRepositoryImpl(
        }
    }

    /**
     * Gets the current list of [ZenMode] instances according to the backend.
     *
     * This is necessary, and cannot be supplanted by making [modes] a StateFlow, because it will be
     * called whenever we know or suspect that [modes] may not have caught up to the latest data
     * (such as right after a user switch).
     */
    override fun getModes(): List<ZenMode> = backend.modes

    override fun activateMode(zenMode: ZenMode, duration: Duration?) {
        backend.activateMode(zenMode, duration)
    }
+9 −0
Original line number Diff line number Diff line
@@ -199,6 +199,15 @@ class ZenModeRepositoryTest {
        }
    }

    @EnableFlags(android.app.Flags.FLAG_MODES_UI)
    @Test
    fun getModes_returnsModes() {
        val modesList = listOf(TestModeBuilder().setId("One").build())
        `when`(zenModesBackend.modes).thenReturn(modesList)

        assertThat(underTest.getModes()).isEqualTo(modesList)
    }

    private fun triggerIntent(action: String, extras: Map<String, Parcelable>? = null) {
        verify(context).registerReceiver(receiverCaptor.capture(), any(), any(), any())
        val intent = Intent(action)
+33 −0
Original line number Diff line number Diff line
@@ -206,6 +206,39 @@ class ModesTileDataInteractorTest : SysuiTestCase() {
            assertThat(tileData?.iconResId).isEqualTo(MODES_DRAWABLE_ID)
        }

    @EnableFlags(Flags.FLAG_MODES_UI)
    @Test
    fun getCurrentTileModel_returnsActiveModes() = runTest {
        var tileData = underTest.getCurrentTileModel()
        assertThat(tileData.isActivated).isFalse()
        assertThat(tileData.activeModes).isEmpty()

        // Add active mode
        zenModeRepository.addMode(id = "One", active = true)
        tileData = underTest.getCurrentTileModel()
        assertThat(tileData.isActivated).isTrue()
        assertThat(tileData.activeModes).containsExactly("Mode One")

        // Add an inactive mode: state hasn't changed
        zenModeRepository.addMode(id = "Two", active = false)
        tileData = underTest.getCurrentTileModel()
        assertThat(tileData.isActivated).isTrue()
        assertThat(tileData.activeModes).containsExactly("Mode One")

        // Add another active mode
        zenModeRepository.addMode(id = "Three", active = true)
        tileData = underTest.getCurrentTileModel()
        assertThat(tileData.isActivated).isTrue()
        assertThat(tileData.activeModes).containsExactly("Mode One", "Mode Three").inOrder()

        // Remove a mode and deactivate the other
        zenModeRepository.removeMode("One")
        zenModeRepository.deactivateMode("Three")
        tileData = underTest.getCurrentTileModel()
        assertThat(tileData.isActivated).isFalse()
        assertThat(tileData.activeModes).isEmpty()
    }

    private companion object {
        val TEST_USER = UserHandle.of(1)!!

+30 −0
Original line number Diff line number Diff line
@@ -256,6 +256,36 @@ class ZenModeInteractorTest : SysuiTestCase() {
            assertThat(activeModes?.mainMode).isNull()
        }

    @Test
    fun getActiveModes_computesMainActiveMode() = runTest {
        zenModeRepository.addMode(id = "Bedtime", type = AutomaticZenRule.TYPE_BEDTIME)
        zenModeRepository.addMode(id = "Other", type = AutomaticZenRule.TYPE_OTHER)

        var activeModes = underTest.getActiveModes()
        assertThat(activeModes.modeNames).hasSize(0)
        assertThat(activeModes.mainMode).isNull()

        zenModeRepository.activateMode("Other")
        activeModes = underTest.getActiveModes()
        assertThat(activeModes.modeNames).containsExactly("Mode Other")
        assertThat(activeModes.mainMode?.name).isEqualTo("Mode Other")

        zenModeRepository.activateMode("Bedtime")
        activeModes = underTest.getActiveModes()
        assertThat(activeModes.modeNames).containsExactly("Mode Bedtime", "Mode Other").inOrder()
        assertThat(activeModes.mainMode?.name).isEqualTo("Mode Bedtime")

        zenModeRepository.deactivateMode("Other")
        activeModes = underTest.getActiveModes()
        assertThat(activeModes.modeNames).containsExactly("Mode Bedtime")
        assertThat(activeModes.mainMode?.name).isEqualTo("Mode Bedtime")

        zenModeRepository.deactivateMode("Bedtime")
        activeModes = underTest.getActiveModes()
        assertThat(activeModes.modeNames).hasSize(0)
        assertThat(activeModes.mainMode).isNull()
    }

    @Test
    fun mainActiveMode_flows() =
        testScope.runTest {
Loading