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

Commit 71d3b3fa authored by Nate Myren's avatar Nate Myren
Browse files

Add flag gate to show only indicator dot

Bug: 187343115
Test: manual
Change-Id: Ifa46eb5556e016e2a1b433886cdf1b302ca4673e
parent 83060723
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@ interface StatusEvent {
    val priority: Int
    // Whether or not to force the status bar open and show a dot
    val forceVisible: Boolean
    // Whether or not to show an animation for this event
    val showAnimation: Boolean
    val viewCreator: (context: Context) -> View

    // Update this event with values from another event.
@@ -47,6 +49,7 @@ interface StatusEvent {
class BatteryEvent : StatusEvent {
    override val priority = 50
    override val forceVisible = false
    override val showAnimation = true

    override val viewCreator: (context: Context) -> View = { context ->
        val iv = ImageView(context)
@@ -59,7 +62,7 @@ class BatteryEvent : StatusEvent {
        return javaClass.simpleName
    }
}
class PrivacyEvent : StatusEvent {
class PrivacyEvent(override val showAnimation: Boolean = true) : StatusEvent {
    override val priority = 100
    override val forceVisible = true
    var privacyItems: List<PrivacyItem> = listOf()
+16 −7
Original line number Diff line number Diff line
@@ -16,11 +16,13 @@

package com.android.systemui.statusbar.events

import android.os.SystemClock
import android.provider.DeviceConfig
import android.provider.DeviceConfig.NAMESPACE_PRIVACY
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.privacy.PrivacyItem
import com.android.systemui.privacy.PrivacyItemController
import com.android.systemui.statusbar.policy.BatteryController
import com.android.systemui.util.time.SystemClock
import javax.inject.Inject

/**
@@ -29,6 +31,7 @@ import javax.inject.Inject
 */
@SysUISingleton
class SystemEventCoordinator @Inject constructor(
    private val systemClock: SystemClock,
    private val batteryController: BatteryController,
    private val privacyController: PrivacyItemController
) {
@@ -61,9 +64,9 @@ class SystemEventCoordinator @Inject constructor(
    }

    fun notifyPrivacyItemsChanged(showAnimation: Boolean = true) {
        val event = PrivacyEvent()
        val event = PrivacyEvent(showAnimation)
        event.privacyItems = privacyStateListener.currentPrivacyItems
        scheduler.onStatusEvent(event, showAnimation)
        scheduler.onStatusEvent(event)
    }

    private val batteryStateListener = object : BatteryController.BatteryStateChangeCallback {
@@ -92,14 +95,14 @@ class SystemEventCoordinator @Inject constructor(
    private val privacyStateListener = object : PrivacyItemController.Callback {
        var currentPrivacyItems = listOf<PrivacyItem>()
        var previousPrivacyItems = listOf<PrivacyItem>()
        var timeLastEmpty = SystemClock.elapsedRealtime()
        var timeLastEmpty = systemClock.elapsedRealtime()

        override fun onPrivacyItemsChanged(privacyItems: List<PrivacyItem>) {
            if (uniqueItemsMatch(privacyItems, currentPrivacyItems)) {
                return
            } else if (privacyItems.isEmpty()) {
                previousPrivacyItems = currentPrivacyItems
                timeLastEmpty = SystemClock.elapsedRealtime()
                timeLastEmpty = systemClock.elapsedRealtime()
            }

            currentPrivacyItems = privacyItems
@@ -110,8 +113,9 @@ class SystemEventCoordinator @Inject constructor(
            if (currentPrivacyItems.isEmpty()) {
                notifyPrivacyItemsEmpty()
            } else {
                val showAnimation = !uniqueItemsMatch(currentPrivacyItems, previousPrivacyItems) ||
                SystemClock.elapsedRealtime() - timeLastEmpty >= DEBOUNCE_TIME
                val showAnimation = isChipAnimationEnabled() &&
                    (!uniqueItemsMatch(currentPrivacyItems, previousPrivacyItems) ||
                    systemClock.elapsedRealtime() - timeLastEmpty >= DEBOUNCE_TIME)
                notifyPrivacyItemsChanged(showAnimation)
            }
        }
@@ -121,8 +125,13 @@ class SystemEventCoordinator @Inject constructor(
            return one.map { it.application.uid to it.privacyType.permGroupName }.toSet() ==
                two.map { it.application.uid to it.privacyType.permGroupName }.toSet()
        }

        private fun isChipAnimationEnabled(): Boolean {
            return DeviceConfig.getBoolean(NAMESPACE_PRIVACY, CHIP_ANIMATION_ENABLED, true)
        }
    }
}

private const val DEBOUNCE_TIME = 3000L
private const val CHIP_ANIMATION_ENABLED = "privacy_chip_animation_enabled"
private const val TAG = "SystemEventCoordinator"
 No newline at end of file
+2 −2
Original line number Diff line number Diff line
@@ -90,7 +90,7 @@ class SystemStatusAnimationScheduler @Inject constructor(
        coordinator.attachScheduler(this)
    }

    fun onStatusEvent(event: StatusEvent, showAnimation: Boolean = true) {
    fun onStatusEvent(event: StatusEvent) {
        // Ignore any updates until the system is up and running
        if (isTooEarly() || !isImmersiveIndicatorEnabled()) {
            return
@@ -103,7 +103,7 @@ class SystemStatusAnimationScheduler @Inject constructor(
            if (DEBUG) {
                Log.d(TAG, "scheduling event $event")
            }
            if (showAnimation) {
            if (event.showAnimation) {
                scheduleEvent(event)
            } else if (event.forceVisible) {
                hasPersistentDot = true