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

Commit e5f1dc59 authored by Ioana Alexandru's avatar Ioana Alexandru
Browse files

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
parent 0c312b88
Loading
Loading
Loading
Loading
+31 −7
Original line number Diff line number Diff line
@@ -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 {
+16 −0
Original line number Diff line number Diff line
@@ -250,6 +250,22 @@ class ZenModeInteractorTest : SysuiTestCase() {
                .isEqualTo(Duration.ofMinutes(60))
        }

    @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 {
+2 −1
Original line number Diff line number Diff line
@@ -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
+14 −10
Original line number Diff line number Diff line
@@ -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
        }

        // 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
            }
        if (dnd.isActive) {
            zenModeInteractor.deactivateMode(dnd)
        } else {
            zenModeInteractor.activateMode(dnd)
        } else {
            zenModeInteractor.deactivateAllModes()
        }
    }

+8 −0
Original line number Diff line number Diff line
@@ -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