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

Commit 22962c17 authored by Nate Myren's avatar Nate Myren Committed by Android (Google) Code Review
Browse files

Merge "Add flag gate to show only indicator dot" into sc-dev

parents d1fb9c7b 71d3b3fa
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