summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ioana Alexandru <aioana@google.com> 2024-11-28 16:09:39 +0100
committer Ioana Alexandru <aioana@google.com> 2024-12-04 13:33:33 +0100
commite5f1dc5996f6c0c8f038aa57b47b6a25164f9231 (patch)
treeb32a57f69035a5686bd783275fe97d86abe5d1e8
parent0c312b882f55197470345dbde8d59c25883c41bc (diff)
Deactivate all modes from QS toggle
Bug: 380908293 Test: ModesTileUserActionInteractorTest, ZenModeInteractorTest Test: manually test that the toggle works Flag: android.app.modes_ui Flag: com.android.systemui.qs_ui_refactor_compose_fragment Change-Id: Iead9f8bc93e68bb963afaf68f64acad2a91a665c
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractorTest.kt38
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractorTest.kt16
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/ModesTile.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractor.kt24
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractor.kt8
5 files changed, 71 insertions, 18 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractorTest.kt
index dc782012e8d0..88b00468573f 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractorTest.kt
@@ -62,7 +62,7 @@ class ModesTileUserActionInteractorTest : SysuiTestCase() {
ModesTileUserActionInteractor(inputHandler, mockDialogDelegate, zenModeInteractor)
@Test
- fun handleClick_active() = runTest {
+ fun handleClick_active_showsDialog() = runTest {
val expandable = mock<Expandable>()
underTest.handleInput(
QSTileInputTestKtx.click(data = modelOf(true, listOf("DND")), expandable = expandable)
@@ -72,7 +72,7 @@ class ModesTileUserActionInteractorTest : SysuiTestCase() {
}
@Test
- fun handleClick_inactive() = runTest {
+ fun handleClick_inactive_showsDialog() = runTest {
val expandable = mock<Expandable>()
underTest.handleInput(
QSTileInputTestKtx.click(data = modelOf(false, emptyList()), expandable = expandable)
@@ -83,7 +83,31 @@ class ModesTileUserActionInteractorTest : SysuiTestCase() {
@Test
@EnableFlags(Flags.FLAG_QS_UI_REFACTOR_COMPOSE_FRAGMENT)
- fun handleToggleClick_dndActive() =
+ fun handleToggleClick_multipleModesActive_deactivatesAll() =
+ testScope.runTest {
+ val activeModes by collectLastValue(zenModeInteractor.activeModes)
+
+ zenModeRepository.addModes(
+ listOf(
+ TestModeBuilder.MANUAL_DND_ACTIVE,
+ TestModeBuilder().setName("Mode 1").setActive(true).build(),
+ TestModeBuilder().setName("Mode 2").setActive(true).build(),
+ )
+ )
+ assertThat(activeModes?.modeNames?.count()).isEqualTo(3)
+
+ underTest.handleInput(
+ QSTileInputTestKtx.toggleClick(
+ data = modelOf(true, listOf("DND", "Mode 1", "Mode 2"))
+ )
+ )
+
+ assertThat(activeModes?.isAnyActive()).isFalse()
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_QS_UI_REFACTOR_COMPOSE_FRAGMENT)
+ fun handleToggleClick_dndActive_deactivatesDnd() =
testScope.runTest {
val dndMode by collectLastValue(zenModeInteractor.dndMode)
@@ -99,7 +123,7 @@ class ModesTileUserActionInteractorTest : SysuiTestCase() {
@Test
@EnableFlags(Flags.FLAG_QS_UI_REFACTOR_COMPOSE_FRAGMENT)
- fun handleToggleClick_dndInactive() =
+ fun handleToggleClick_dndInactive_activatesDnd() =
testScope.runTest {
val dndMode by collectLastValue(zenModeInteractor.dndMode)
@@ -107,14 +131,14 @@ class ModesTileUserActionInteractorTest : SysuiTestCase() {
assertThat(dndMode?.isActive).isFalse()
underTest.handleInput(
- QSTileInputTestKtx.toggleClick(data = modelOf(true, listOf("DND")))
+ QSTileInputTestKtx.toggleClick(data = modelOf(false, emptyList()))
)
assertThat(dndMode?.isActive).isTrue()
}
@Test
- fun handleLongClick_active() = runTest {
+ fun handleLongClick_active_opensSettings() = runTest {
underTest.handleInput(QSTileInputTestKtx.longClick(modelOf(true, listOf("DND"))))
QSTileIntentUserInputHandlerSubject.assertThat(inputHandler).handledOneIntentInput {
@@ -123,7 +147,7 @@ class ModesTileUserActionInteractorTest : SysuiTestCase() {
}
@Test
- fun handleLongClick_inactive() = runTest {
+ fun handleLongClick_inactive_opensSettings() = runTest {
underTest.handleInput(QSTileInputTestKtx.longClick(modelOf(false, emptyList())))
QSTileIntentUserInputHandlerSubject.assertThat(inputHandler).handledOneIntentInput {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractorTest.kt
index 4e33a5958a1a..3d6882c3fdaf 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractorTest.kt
@@ -251,6 +251,22 @@ class ZenModeInteractorTest : SysuiTestCase() {
}
@Test
+ fun deactivateAllModes_updatesCorrectModes() =
+ testScope.runTest {
+ zenModeRepository.addModes(
+ listOf(
+ TestModeBuilder.MANUAL_DND_ACTIVE,
+ TestModeBuilder().setName("Inactive").setActive(false).build(),
+ TestModeBuilder().setName("Active").setActive(true).build(),
+ )
+ )
+
+ underTest.deactivateAllModes()
+
+ assertThat(zenModeRepository.getModes().filter { it.isActive }).isEmpty()
+ }
+
+ @Test
fun activeModes_computesMainActiveMode() =
testScope.runTest {
val activeModes by collectLastValue(underTest.activeModes)
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ModesTile.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/ModesTile.kt
index 6baeca94b4ef..dc16b6cfbc70 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ModesTile.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ModesTile.kt
@@ -110,7 +110,8 @@ constructor(
}
override fun handleSecondaryClick(expandable: Expandable?) = runBlocking {
- userActionInteractor.handleToggleClick()
+ val model = dataInteractor.getCurrentTileModel()
+ userActionInteractor.handleToggleClick(model)
}
override fun getLongClickIntent(): Intent = userActionInteractor.longClickIntent
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractor.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractor.kt
index d07d25b2eacb..594394f68d48 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/modes/domain/interactor/ModesTileUserActionInteractor.kt
@@ -49,7 +49,7 @@ constructor(
handleClick(action.expandable)
}
is QSTileUserAction.ToggleClick -> {
- handleToggleClick()
+ handleToggleClick(input.data)
}
is QSTileUserAction.LongClick -> {
qsTileIntentUserInputHandler.handle(action.expandable, longClickIntent)
@@ -63,20 +63,24 @@ constructor(
dialogDelegate.showDialog(expandable)
}
- fun handleToggleClick() {
+ fun handleToggleClick(modesTileModel: ModesTileModel) {
if (QSComposeFragment.isUnexpectedlyInLegacyMode()) {
return
}
- val dnd = zenModeInteractor.dndMode.value
- if (dnd == null) {
- Log.wtf(TAG, "Triggered DND but it's null!?")
- return
- }
- if (dnd.isActive) {
- zenModeInteractor.deactivateMode(dnd)
- } else {
+ // If no modes are on, turn on DND since it's the highest-priority mode. Otherwise, turn
+ // them all off.
+ // We want this toggle to work as a shortcut to DND in most cases, but it should still
+ // correctly toggle the tile state to "off" as the user would expect when more modes are on.
+ if (modesTileModel.activeModes.isEmpty()) {
+ val dnd = zenModeInteractor.dndMode.value
+ if (dnd == null) {
+ Log.wtf(TAG, "Triggered DND but it's null!?")
+ return
+ }
zenModeInteractor.activateMode(dnd)
+ } else {
+ zenModeInteractor.deactivateAllModes()
}
}
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 3755d1866a3b..12ed647fdee7 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
@@ -209,6 +209,14 @@ constructor(
zenModeRepository.deactivateMode(zenMode)
}
+ fun deactivateAllModes() {
+ for (mode in zenModeRepository.getModes()) {
+ if (mode.isActive) {
+ deactivateMode(mode)
+ }
+ }
+ }
+
private val zenDuration
get() = notificationSettingsRepository.zenDuration.value