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

Commit 3e401580 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "When deactivating multiple modes, do so in reverse order of priority" into main

parents b67479ea 08d7cc4e
Loading
Loading
Loading
Loading
+50 −0
Original line number Diff line number Diff line
@@ -17,6 +17,9 @@
package com.android.systemui.statusbar.policy.domain.interactor

import android.app.AutomaticZenRule
import android.app.AutomaticZenRule.TYPE_BEDTIME
import android.app.AutomaticZenRule.TYPE_DRIVING
import android.app.AutomaticZenRule.TYPE_OTHER
import android.app.Flags
import android.app.NotificationManager.Policy
import android.media.AudioManager
@@ -34,9 +37,11 @@ import com.android.internal.R
import com.android.settingslib.notification.data.repository.updateNotificationPolicy
import com.android.settingslib.notification.modes.TestModeBuilder
import com.android.settingslib.notification.modes.TestModeBuilder.MANUAL_DND
import com.android.settingslib.notification.modes.ZenMode
import com.android.settingslib.volume.shared.model.AudioStream
import com.android.systemui.SysuiTestCase
import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.collectValues
import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.useUnconfinedTestDispatcher
import com.android.systemui.shared.settings.data.repository.secureSettingsRepository
@@ -229,6 +234,51 @@ class ZenModeInteractorTest : SysuiTestCase() {
            assertThat(zenModeRepository.getModes().filter { it.isActive }).isEmpty()
        }

    @Test
    @EnableFlags(Flags.FLAG_MODES_UI_TILE_REACTIVATES_LAST)
    fun deactivateAllModes_deactivatesInOrder() =
        kosmos.runTest {
            zenModeRepository.activateMode(MANUAL_DND) // Priority 1
            zenModeRepository.addModes(
                listOf(
                    TestModeBuilder()
                        .setName("Priority 2")
                        .setType(TYPE_BEDTIME)
                        .setActive(true)
                        .build(),
                    TestModeBuilder()
                        .setName("Priority 4")
                        .setType(TYPE_OTHER)
                        .setActive(true)
                        .build(),
                    TestModeBuilder()
                        .setName("Priority 3")
                        .setType(TYPE_DRIVING)
                        .setActive(true)
                        .build(),
                )
            )
            val modesHistory: List<List<ZenMode>> by collectValues(underTest.modes)
            assertThat(zenModeRepository.getModes().filter { it.isActive }).hasSize(4)

            underTest.deactivateAllModes()
            assertThat(zenModeRepository.getModes().filter { it.isActive }).isEmpty()

            fun activeModeNames(modes: List<ZenMode>) = modes.filter { it.isActive }.map { it.name }

            // Verify that modes were deactivated from lower to higher priority.
            // 4 individual deactivation events, so 5 emissions.
            assertThat(modesHistory).hasSize(5)
            assertThat(activeModeNames(modesHistory[0]))
                .containsExactly("Do Not Disturb", "Priority 2", "Priority 3", "Priority 4")
            assertThat(activeModeNames(modesHistory[1]))
                .containsExactly("Do Not Disturb", "Priority 2", "Priority 3")
            assertThat(activeModeNames(modesHistory[2]))
                .containsExactly("Do Not Disturb", "Priority 2")
            assertThat(activeModeNames(modesHistory[3])).containsExactly("Do Not Disturb")
            assertThat(activeModeNames(modesHistory[4])).isEmpty()
        }

    @Test
    fun activeModes_computesMainActiveMode() =
        kosmos.runTest {
+15 −2
Original line number Diff line number Diff line
@@ -239,12 +239,25 @@ constructor(
    }

    fun deactivateAllModes() {
        if (android.app.Flags.modesUiTileReactivatesLast()) {
            // Deactivate in reverse order of priority. This will prevent flickering in the
            // "active mode" icon (which is the highest-priority one).
            val modesToDeactivate =
                zenModeRepository
                    .getModes()
                    .filter { it.isActive }
                    .sortedWith(ZenMode.PRIORITIZING_COMPARATOR.reversed())
            for (mode in modesToDeactivate) {
                deactivateMode(mode)
            }
        } else {
            for (mode in zenModeRepository.getModes()) {
                if (mode.isActive) {
                    deactivateMode(mode)
                }
            }
        }
    }

    private val zenDuration
        get() = notificationSettingsRepository.zenDuration.value