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

Commit 28b2ac4c authored by Matías Hernández's avatar Matías Hernández
Browse files

Add a Flow for the "main" active Priority Mode in ZenModeInteractor

Bug: 360399800
Test: atest ZenModeInteractorTest
Flag: android.app.modes_ui_icons
Change-Id: I7609f6ba683f2c60920bf476fff9d621fe023793
parent 92704820
Loading
Loading
Loading
Loading
+2 −9
Original line number Diff line number Diff line
@@ -31,9 +31,8 @@ import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.kosmos.testScope
import com.android.systemui.qs.tiles.base.interactor.DataUpdateTrigger
import com.android.systemui.qs.tiles.impl.modes.domain.model.ModesTileModel
import com.android.systemui.shared.notifications.data.repository.NotificationSettingsRepository
import com.android.systemui.statusbar.policy.data.repository.fakeZenModeRepository
import com.android.systemui.statusbar.policy.domain.interactor.ZenModeInteractor
import com.android.systemui.statusbar.policy.domain.interactor.zenModeInteractor
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -44,7 +43,6 @@ import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.kotlin.mock

@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
@@ -55,12 +53,7 @@ class ModesTileDataInteractorTest : SysuiTestCase() {
    private val dispatcher = kosmos.testDispatcher
    private val zenModeRepository = kosmos.fakeZenModeRepository

    private val underTest =
        ModesTileDataInteractor(
            context,
            ZenModeInteractor(zenModeRepository, mock<NotificationSettingsRepository>()),
            dispatcher
        )
    private val underTest = ModesTileDataInteractor(context, kosmos.zenModeInteractor, dispatcher)

    @Before
    fun setUp() {
+32 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.statusbar.policy.domain.interactor

import android.app.AutomaticZenRule
import android.app.NotificationManager.Policy
import android.provider.Settings
import android.provider.Settings.Secure.ZEN_DURATION
@@ -217,4 +218,35 @@ class ZenModeInteractorTest : SysuiTestCase() {
            assertThat(zenModeRepository.getModeActiveDuration(manualDnd.id))
                .isEqualTo(Duration.ofMinutes(60))
        }

    @Test
    fun mainActiveMode_returnsMainActiveMode() =
        testScope.runTest {
            val mainActiveMode by collectLastValue(underTest.mainActiveMode)

            zenModeRepository.addMode(id = "Bedtime", type = AutomaticZenRule.TYPE_BEDTIME)
            zenModeRepository.addMode(id = "Other", type = AutomaticZenRule.TYPE_OTHER)

            runCurrent()
            assertThat(mainActiveMode).isNull()

            zenModeRepository.activateMode("Other")
            runCurrent()
            assertThat(mainActiveMode).isNotNull()
            assertThat(mainActiveMode!!.id).isEqualTo("Other")

            zenModeRepository.activateMode("Bedtime")
            runCurrent()
            assertThat(mainActiveMode).isNotNull()
            assertThat(mainActiveMode!!.id).isEqualTo("Bedtime")

            zenModeRepository.deactivateMode("Other")
            runCurrent()
            assertThat(mainActiveMode).isNotNull()
            assertThat(mainActiveMode!!.id).isEqualTo("Bedtime")

            zenModeRepository.deactivateMode("Bedtime")
            runCurrent()
            assertThat(mainActiveMode).isNull()
        }
}
+22 −10
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import kotlinx.coroutines.flow.map
class ZenModeInteractor
@Inject
constructor(
    private val context: Context,
    private val zenModeRepository: ZenModeRepository,
    private val notificationSettingsRepository: NotificationSettingsRepository,
) {
@@ -78,6 +79,26 @@ constructor(
    val activeModes: Flow<List<ZenMode>> =
        modes.map { modes -> modes.filter { mode -> mode.isActive } }.distinctUntilChanged()

    /** Flow returning the most prioritized of the active modes, if any. */
    val mainActiveMode: Flow<ZenMode?> =
        activeModes.map { modes -> getMainActiveMode(modes) }.distinctUntilChanged()

    /**
     * Given the list of modes (which may include zero or more currently active modes), returns the
     * most prioritized of the active modes, if any.
     */
    private fun getMainActiveMode(modes: List<ZenMode>): ZenMode? {
        return modes.sortedWith(ZenMode.PRIORITIZING_COMPARATOR).firstOrNull { it.isActive }
    }

    suspend fun getModeIcon(mode: ZenMode): Icon {
        return mode.getIcon(context, iconLoader).await().asIcon()
    }

    suspend fun getLockscreenModeIcon(mode: ZenMode): Icon {
        return mode.getLockscreenIcon(context, iconLoader).await().asIcon()
    }

    /**
     * Given the list of modes (which may include zero or more currently active modes), returns an
     * icon representing the active mode, if any (or, if multiple modes are active, to the most
@@ -86,16 +107,7 @@ constructor(
     * package).
     */
    suspend fun getActiveModeIcon(context: Context, modes: List<ZenMode>): Icon? {
        return modes
            .sortedWith(ZenMode.PRIORITIZING_COMPARATOR)
            .firstOrNull { it.isActive }
            ?.getLockscreenIcon(context, iconLoader)
            ?.await()
            ?.asIcon()
    }

    suspend fun getModeIcon(context: Context, mode: ZenMode): Icon {
        return mode.getIcon(context, iconLoader).await().asIcon()
        return getMainActiveMode(modes)?.let { m -> getLockscreenModeIcon(m) }
    }

    fun activateMode(zenMode: ZenMode) {
+1 −1
Original line number Diff line number Diff line
@@ -88,7 +88,7 @@ constructor(
                modesList.map { mode ->
                    ModeTileViewModel(
                        id = mode.id,
                        icon = zenModeInteractor.getModeIcon(context, mode),
                        icon = zenModeInteractor.getModeIcon(mode),
                        text = mode.name,
                        subtext = getTileSubtext(mode),
                        enabled = mode.isActive,
+1 −1
Original line number Diff line number Diff line
@@ -93,7 +93,7 @@ class ModesTileTest : SysuiTestCase() {
    private val tileDataInteractor =
        ModesTileDataInteractor(
            context,
            ZenModeInteractor(zenModeRepository, mock<NotificationSettingsRepository>()),
            ZenModeInteractor(context, zenModeRepository, mock<NotificationSettingsRepository>()),
            testDispatcher
        )
    private val mapper =
Loading