Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileDataInteractorTest.kt +2 −9 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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() { Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractorTest.kt +32 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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() } } packages/SystemUI/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractor.kt +22 −10 Original line number Diff line number Diff line Loading @@ -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, ) { Loading Loading @@ -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 Loading @@ -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) { Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/ui/dialog/viewmodel/ModesDialogViewModel.kt +1 −1 Original line number Diff line number Diff line Loading @@ -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, Loading packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ModesTileTest.kt +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileDataInteractorTest.kt +2 −9 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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() { Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractorTest.kt +32 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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() } }
packages/SystemUI/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractor.kt +22 −10 Original line number Diff line number Diff line Loading @@ -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, ) { Loading Loading @@ -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 Loading @@ -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) { Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/ui/dialog/viewmodel/ModesDialogViewModel.kt +1 −1 Original line number Diff line number Diff line Loading @@ -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, Loading
packages/SystemUI/tests/src/com/android/systemui/qs/tiles/ModesTileTest.kt +1 −1 Original line number Diff line number Diff line Loading @@ -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