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

Commit b34dc458 authored by Lyn Han's avatar Lyn Han Committed by Android (Google) Code Review
Browse files

Merge "Check cooldown setting for avalanche suppression" into main

parents 5bce7371 f41d78cf
Loading
Loading
Loading
Loading
+26 −5
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.database.ContentObserver
import android.hardware.display.AmbientDisplayConfiguration
import android.os.Handler
import android.os.PowerManager
import android.provider.Settings
import android.provider.Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED
import android.provider.Settings.Global.HEADS_UP_OFF
import com.android.systemui.dagger.qualifiers.Main
@@ -42,6 +43,7 @@ import com.android.systemui.statusbar.notification.interruption.VisualInterrupti
import com.android.systemui.statusbar.policy.BatteryController
import com.android.systemui.statusbar.policy.HeadsUpManager
import com.android.systemui.util.settings.GlobalSettings
import com.android.systemui.util.settings.SystemSettings
import com.android.systemui.util.time.SystemClock

class PeekDisabledSuppressor(
@@ -231,6 +233,7 @@ class AlertKeyguardVisibilitySuppressor(
class AvalancheSuppressor(
    private val avalancheProvider: AvalancheProvider,
    private val systemClock: SystemClock,
    private val systemSettings: SystemSettings,
) :
    VisualInterruptionFilter(
        types = setOf(PEEK, PULSE),
@@ -253,12 +256,23 @@ class AvalancheSuppressor(
    }

    override fun shouldSuppress(entry: NotificationEntry): Boolean {
        val timeSinceAvalanche = systemClock.currentTimeMillis() - avalancheProvider.startTime
        val isActive = timeSinceAvalanche < avalancheProvider.timeoutMs
        if (!isCooldownEnabled()) {
            reason = "FALSE avalanche cooldown setting DISABLED"
            return false
        }
        val timeSinceAvalancheMs = systemClock.currentTimeMillis() - avalancheProvider.startTime
        val timedOut = timeSinceAvalancheMs >= avalancheProvider.timeoutMs
        if (timedOut) {
            reason = "FALSE avalanche event TIMED OUT. " +
                    "${timeSinceAvalancheMs/1000} seconds since last avalanche"
            return false
        }
        val state = calculateState(entry)
        val suppress = isActive && state == State.SUPPRESS
        reason = "avalanche suppress=$suppress isActive=$isActive state=$state"
        return suppress
        if (state != State.SUPPRESS) {
            reason = "FALSE avalanche IN ALLOWLIST: $state"
            return false
        }
        return true
    }

    private fun calculateState(entry: NotificationEntry): State {
@@ -294,4 +308,11 @@ class AvalancheSuppressor(
        }
        return State.SUPPRESS
    }

    private fun isCooldownEnabled(): Boolean {
        return systemSettings.getInt(
            Settings.System.NOTIFICATION_COOLDOWN_ENABLED,
            /* def */ 1
        ) == 1
    }
}
+4 −2
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import com.android.systemui.statusbar.policy.HeadsUpManager
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.util.EventLog
import com.android.systemui.util.settings.GlobalSettings
import com.android.systemui.util.settings.SystemSettings
import com.android.systemui.util.time.SystemClock
import javax.inject.Inject

@@ -61,7 +62,8 @@ constructor(
    private val systemClock: SystemClock,
    private val uiEventLogger: UiEventLogger,
    private val userTracker: UserTracker,
    private val avalancheProvider: AvalancheProvider
    private val avalancheProvider: AvalancheProvider,
    private val systemSettings: SystemSettings
) : VisualInterruptionDecisionProvider {

    init {
@@ -170,7 +172,7 @@ constructor(
        addFilter(AlertKeyguardVisibilitySuppressor(keyguardNotificationVisibilityProvider))

        if (NotificationAvalancheSuppression.isEnabled) {
            addFilter(AvalancheSuppressor(avalancheProvider, systemClock))
            addFilter(AvalancheSuppressor(avalancheProvider, systemClock, systemSettings))
            avalancheProvider.register()
        }
        started = true
+10 −9
Original line number Diff line number Diff line
@@ -50,7 +50,8 @@ class VisualInterruptionDecisionProviderImplTest : VisualInterruptionDecisionPro
            systemClock,
            uiEventLogger,
            userTracker,
            avalancheProvider
            avalancheProvider,
            systemSettings
        )
    }

@@ -82,7 +83,7 @@ class VisualInterruptionDecisionProviderImplTest : VisualInterruptionDecisionPro
    fun testAvalancheFilter_duringAvalanche_allowConversationFromAfterEvent() {
        avalancheProvider.startTime = whenAgo(10)

        withFilter(AvalancheSuppressor(avalancheProvider, systemClock)) {
        withFilter(AvalancheSuppressor(avalancheProvider, systemClock, systemSettings)) {
            ensurePeekState()
            assertShouldHeadsUp(buildEntry {
                importance = NotificationManager.IMPORTANCE_HIGH
@@ -97,7 +98,7 @@ class VisualInterruptionDecisionProviderImplTest : VisualInterruptionDecisionPro
    fun testAvalancheFilter_duringAvalanche_suppressConversationFromBeforeEvent() {
        avalancheProvider.startTime = whenAgo(10)

        withFilter(AvalancheSuppressor(avalancheProvider, systemClock)) {
        withFilter(AvalancheSuppressor(avalancheProvider, systemClock, systemSettings)) {
            ensurePeekState()
            assertShouldNotHeadsUp(buildEntry {
                importance = NotificationManager.IMPORTANCE_DEFAULT
@@ -112,7 +113,7 @@ class VisualInterruptionDecisionProviderImplTest : VisualInterruptionDecisionPro
    fun testAvalancheFilter_duringAvalanche_allowHighPriorityConversation() {
        avalancheProvider.startTime = whenAgo(10)

        withFilter(AvalancheSuppressor(avalancheProvider, systemClock)) {
        withFilter(AvalancheSuppressor(avalancheProvider, systemClock, systemSettings)) {
            ensurePeekState()
            assertShouldHeadsUp(buildEntry {
                importance = NotificationManager.IMPORTANCE_HIGH
@@ -125,7 +126,7 @@ class VisualInterruptionDecisionProviderImplTest : VisualInterruptionDecisionPro
    fun testAvalancheFilter_duringAvalanche_allowCall() {
        avalancheProvider.startTime = whenAgo(10)

        withFilter(AvalancheSuppressor(avalancheProvider, systemClock)) {
        withFilter(AvalancheSuppressor(avalancheProvider, systemClock, systemSettings)) {
            ensurePeekState()
            assertShouldHeadsUp(buildEntry {
                importance = NotificationManager.IMPORTANCE_HIGH
@@ -138,7 +139,7 @@ class VisualInterruptionDecisionProviderImplTest : VisualInterruptionDecisionPro
    fun testAvalancheFilter_duringAvalanche_allowCategoryReminder() {
        avalancheProvider.startTime = whenAgo(10)

        withFilter(AvalancheSuppressor(avalancheProvider, systemClock)) {
        withFilter(AvalancheSuppressor(avalancheProvider, systemClock, systemSettings)) {
            ensurePeekState()
            assertShouldHeadsUp(buildEntry {
                importance = NotificationManager.IMPORTANCE_HIGH
@@ -151,7 +152,7 @@ class VisualInterruptionDecisionProviderImplTest : VisualInterruptionDecisionPro
    fun testAvalancheFilter_duringAvalanche_allowCategoryEvent() {
        avalancheProvider.startTime = whenAgo(10)

        withFilter(AvalancheSuppressor(avalancheProvider, systemClock)) {
        withFilter(AvalancheSuppressor(avalancheProvider, systemClock, systemSettings)) {
            ensurePeekState()
            assertShouldHeadsUp(buildEntry {
                importance = NotificationManager.IMPORTANCE_HIGH
@@ -164,7 +165,7 @@ class VisualInterruptionDecisionProviderImplTest : VisualInterruptionDecisionPro
    fun testAvalancheFilter_duringAvalanche_allowFsi() {
        avalancheProvider.startTime = whenAgo(10)

        withFilter(AvalancheSuppressor(avalancheProvider, systemClock)) {
        withFilter(AvalancheSuppressor(avalancheProvider, systemClock, systemSettings)) {
            assertFsiNotSuppressed()
        }
    }
@@ -173,7 +174,7 @@ class VisualInterruptionDecisionProviderImplTest : VisualInterruptionDecisionPro
    fun testAvalancheFilter_duringAvalanche_allowColorized() {
        avalancheProvider.startTime = whenAgo(10)

        withFilter(AvalancheSuppressor(avalancheProvider, systemClock)) {
        withFilter(AvalancheSuppressor(avalancheProvider, systemClock, systemSettings)) {
            ensurePeekState()
            assertShouldHeadsUp(buildEntry {
                importance = NotificationManager.IMPORTANCE_HIGH
+4 −0
Original line number Diff line number Diff line
@@ -77,6 +77,8 @@ import com.android.systemui.util.FakeEventLog
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.settings.FakeGlobalSettings
import com.android.systemui.util.settings.FakeSettings
import com.android.systemui.util.settings.SystemSettings
import com.android.systemui.util.time.FakeSystemClock
import com.android.systemui.utils.leaks.FakeBatteryController
import com.android.systemui.utils.leaks.FakeKeyguardStateController
@@ -126,6 +128,7 @@ abstract class VisualInterruptionDecisionProviderTestBase : SysuiTestCase() {
    protected val uiEventLogger = UiEventLoggerFake()
    protected val userTracker = FakeUserTracker()
    protected val avalancheProvider: AvalancheProvider = mock()
    lateinit var systemSettings: SystemSettings

    protected abstract val provider: VisualInterruptionDecisionProvider

@@ -153,6 +156,7 @@ abstract class VisualInterruptionDecisionProviderTestBase : SysuiTestCase() {

        deviceProvisionedController.currentUser = userId
        userTracker.set(listOf(user), /* currentUserIndex = */ 0)
        systemSettings = FakeSettings()

        provider.start()
    }
+5 −2
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import com.android.systemui.statusbar.policy.HeadsUpManager
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.util.EventLog
import com.android.systemui.util.settings.GlobalSettings
import com.android.systemui.util.settings.SystemSettings
import com.android.systemui.util.time.SystemClock

object VisualInterruptionDecisionProviderTestUtil {
@@ -51,7 +52,8 @@ object VisualInterruptionDecisionProviderTestUtil {
        systemClock: SystemClock,
        uiEventLogger: UiEventLogger,
        userTracker: UserTracker,
        avalancheProvider: AvalancheProvider
        avalancheProvider: AvalancheProvider,
        systemSettings: SystemSettings
    ): VisualInterruptionDecisionProvider {
        return if (VisualInterruptionRefactor.isEnabled) {
            VisualInterruptionDecisionProviderImpl(
@@ -70,7 +72,8 @@ object VisualInterruptionDecisionProviderTestUtil {
                systemClock,
                uiEventLogger,
                userTracker,
                avalancheProvider
                avalancheProvider,
                systemSettings
            )
        } else {
            NotificationInterruptStateProviderWrapper(
Loading