Loading packages/SystemUI/src/com/android/systemui/statusbar/events/StatusEvent.kt +4 −1 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -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) Loading @@ -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() Loading packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventCoordinator.kt +16 −7 Original line number Diff line number Diff line Loading @@ -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 /** Loading @@ -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 ) { Loading Loading @@ -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 { Loading Loading @@ -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 Loading @@ -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) } } Loading @@ -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 packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationScheduler.kt +2 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/events/StatusEvent.kt +4 −1 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -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) Loading @@ -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() Loading
packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventCoordinator.kt +16 −7 Original line number Diff line number Diff line Loading @@ -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 /** Loading @@ -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 ) { Loading Loading @@ -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 { Loading Loading @@ -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 Loading @@ -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) } } Loading @@ -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
packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationScheduler.kt +2 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading