summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/notification/data/repository/FakeZenModeRepository.kt15
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/notification/data/repository/ZenModeRepository.kt13
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/ui/dialog/viewmodel/ModesDialogViewModelTest.kt33
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractor.kt11
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/ui/dialog/viewmodel/ModesDialogViewModel.kt7
5 files changed, 77 insertions, 2 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/notification/data/repository/FakeZenModeRepository.kt b/packages/SettingsLib/src/com/android/settingslib/notification/data/repository/FakeZenModeRepository.kt
index 8bd08dea3c60..49b974fa3f00 100644
--- a/packages/SettingsLib/src/com/android/settingslib/notification/data/repository/FakeZenModeRepository.kt
+++ b/packages/SettingsLib/src/com/android/settingslib/notification/data/repository/FakeZenModeRepository.kt
@@ -20,6 +20,7 @@ import android.app.NotificationManager
import android.provider.Settings
import com.android.settingslib.notification.modes.TestModeBuilder
import com.android.settingslib.notification.modes.ZenMode
+import java.time.Duration
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
@@ -63,6 +64,20 @@ class FakeZenModeRepository : ZenModeRepository {
mutableModesFlow.value = mutableModesFlow.value.filter { it.id != id }
}
+ override fun activateMode(zenMode: ZenMode, duration: Duration?) {
+ activateMode(zenMode.id)
+ }
+
+ override fun deactivateMode(zenMode: ZenMode) {
+ deactivateMode(zenMode.id)
+ }
+
+ fun activateMode(id: String) {
+ val oldMode = mutableModesFlow.value.find { it.id == id } ?: return
+ removeMode(id)
+ mutableModesFlow.value += TestModeBuilder(oldMode).setActive(true).build()
+ }
+
fun deactivateMode(id: String) {
val oldMode = mutableModesFlow.value.find { it.id == id } ?: return
removeMode(id)
diff --git a/packages/SettingsLib/src/com/android/settingslib/notification/data/repository/ZenModeRepository.kt b/packages/SettingsLib/src/com/android/settingslib/notification/data/repository/ZenModeRepository.kt
index 26b5741d8299..b987cc8d69e2 100644
--- a/packages/SettingsLib/src/com/android/settingslib/notification/data/repository/ZenModeRepository.kt
+++ b/packages/SettingsLib/src/com/android/settingslib/notification/data/repository/ZenModeRepository.kt
@@ -29,6 +29,7 @@ import android.provider.Settings
import com.android.settingslib.flags.Flags
import com.android.settingslib.notification.modes.ZenMode
import com.android.settingslib.notification.modes.ZenModesBackend
+import java.time.Duration
import kotlin.coroutines.CoroutineContext
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.awaitClose
@@ -56,6 +57,10 @@ interface ZenModeRepository {
/** A list of all existing priority modes. */
val modes: Flow<List<ZenMode>>
+
+ fun activateMode(zenMode: ZenMode, duration: Duration? = null)
+
+ fun deactivateMode(zenMode: ZenMode)
}
class ZenModeRepositoryImpl(
@@ -177,4 +182,12 @@ class ZenModeRepositoryImpl(
flowOf(emptyList())
}
}
+
+ override fun activateMode(zenMode: ZenMode, duration: Duration?) {
+ backend.activateMode(zenMode, duration)
+ }
+
+ override fun deactivateMode(zenMode: ZenMode) {
+ backend.deactivateMode(zenMode)
+ }
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/ui/dialog/viewmodel/ModesDialogViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/ui/dialog/viewmodel/ModesDialogViewModelTest.kt
index 0d6f9a38ada1..fdfc7f13abf7 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/ui/dialog/viewmodel/ModesDialogViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/ui/dialog/viewmodel/ModesDialogViewModelTest.kt
@@ -128,4 +128,37 @@ class ModesDialogViewModelTest : SysuiTestCase() {
assertThat(this.enabled).isEqualTo(false)
}
}
+
+ @Test
+ fun onClick_togglesTileState() =
+ testScope.runTest {
+ val tiles by collectLastValue(underTest.tiles)
+
+ val modeId = "id"
+ repository.addModes(
+ listOf(
+ TestModeBuilder()
+ .setId(modeId)
+ .setName("Test")
+ .setManualInvocationAllowed(true)
+ .build()
+ )
+ )
+ runCurrent()
+
+ assertThat(tiles?.size).isEqualTo(1)
+ assertThat(tiles?.elementAt(0)?.enabled).isFalse()
+
+ // Trigger onClick
+ tiles?.first()?.onClick?.let { it() }
+ runCurrent()
+
+ assertThat(tiles?.first()?.enabled).isTrue()
+
+ // Trigger onClick
+ tiles?.first()?.onClick?.let { it() }
+ runCurrent()
+
+ assertThat(tiles?.first()?.enabled).isFalse()
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractor.kt
index 89076820ec87..7a521a6ba28f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractor.kt
@@ -23,6 +23,7 @@ import com.android.settingslib.notification.data.repository.ZenModeRepository
import com.android.settingslib.notification.modes.ZenIconLoader
import com.android.settingslib.notification.modes.ZenMode
import com.android.systemui.common.shared.model.Icon
+import java.time.Duration
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
@@ -33,7 +34,7 @@ import kotlinx.coroutines.flow.map
* An interactor that performs business logic related to the status and configuration of Zen Mode
* (or Do Not Disturb/DND Mode).
*/
-class ZenModeInteractor @Inject constructor(repository: ZenModeRepository) {
+class ZenModeInteractor @Inject constructor(private val repository: ZenModeRepository) {
private val iconLoader: ZenIconLoader = ZenIconLoader.getInstance()
val isZenModeEnabled: Flow<Boolean> =
@@ -65,4 +66,12 @@ class ZenModeInteractor @Inject constructor(repository: ZenModeRepository) {
suspend fun getModeIcon(mode: ZenMode, context: Context): Icon {
return Icon.Loaded(mode.getIcon(context, iconLoader).await(), contentDescription = null)
}
+
+ fun activateMode(zenMode: ZenMode, duration: Duration? = null) {
+ repository.activateMode(zenMode, duration)
+ }
+
+ fun deactivateMode(zenMode: ZenMode) {
+ repository.deactivateMode(zenMode)
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ui/dialog/viewmodel/ModesDialogViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ui/dialog/viewmodel/ModesDialogViewModel.kt
index b63236537c8f..e84c8b61ff54 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ui/dialog/viewmodel/ModesDialogViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ui/dialog/viewmodel/ModesDialogViewModel.kt
@@ -63,7 +63,12 @@ constructor(
// "ON: Do Not Disturb, Until Mon 08:09"; see DndTile.
contentDescription = "",
onClick = {
- // TODO(b/346519570): Toggle mode.
+ if (mode.isActive) {
+ zenModeInteractor.deactivateMode(mode)
+ } else {
+ // TODO(b/346519570): Handle duration for DND mode.
+ zenModeInteractor.activateMode(mode)
+ }
},
onLongClick = {
// TODO(b/346519570): Open settings page for mode.