Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt +37 −10 Original line number Diff line number Diff line Loading @@ -18,8 +18,10 @@ package com.android.systemui.statusbar.notification import android.animation.ObjectAnimator import android.util.FloatProperty import com.android.systemui.Dumpable import com.android.systemui.animation.Interpolators import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dump.DumpManager import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.shade.ShadeExpansionChangeEvent import com.android.systemui.shade.ShadeExpansionListener Loading @@ -32,17 +34,20 @@ import com.android.systemui.statusbar.phone.KeyguardBypassController import com.android.systemui.statusbar.phone.ScreenOffAnimationController import com.android.systemui.statusbar.policy.HeadsUpManager import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener import java.io.PrintWriter import javax.inject.Inject import kotlin.math.min @SysUISingleton class NotificationWakeUpCoordinator @Inject constructor( dumpManager: DumpManager, private val mHeadsUpManager: HeadsUpManager, private val statusBarStateController: StatusBarStateController, private val bypassController: KeyguardBypassController, private val dozeParameters: DozeParameters, private val screenOffAnimationController: ScreenOffAnimationController ) : OnHeadsUpChangedListener, StatusBarStateController.StateListener, ShadeExpansionListener { ) : OnHeadsUpChangedListener, StatusBarStateController.StateListener, ShadeExpansionListener, Dumpable { private val mNotificationVisibility = object : FloatProperty<NotificationWakeUpCoordinator>( "notificationVisibility") { Loading @@ -60,6 +65,7 @@ class NotificationWakeUpCoordinator @Inject constructor( private var mLinearDozeAmount: Float = 0.0f private var mDozeAmount: Float = 0.0f private var mDozeAmountSource: String = "init" private var mNotificationVisibleAmount = 0.0f private var mNotificationsVisible = false private var mNotificationsVisibleForExpansion = false Loading Loading @@ -142,6 +148,7 @@ class NotificationWakeUpCoordinator @Inject constructor( } init { dumpManager.registerDumpable(this) mHeadsUpManager.addListener(this) statusBarStateController.addCallback(this) addListener(object : WakeUpListener { Loading Loading @@ -248,13 +255,14 @@ class NotificationWakeUpCoordinator @Inject constructor( // Let's notify the scroller that an animation started notifyAnimationStart(mLinearDozeAmount == 1.0f) } setDozeAmount(linear, eased) setDozeAmount(linear, eased, source = "StatusBar") } fun setDozeAmount(linear: Float, eased: Float) { fun setDozeAmount(linear: Float, eased: Float, source: String) { val changed = linear != mLinearDozeAmount mLinearDozeAmount = linear mDozeAmount = eased mDozeAmountSource = source mStackScrollerController.setDozeAmount(mDozeAmount) updateHideAmount() if (changed && linear == 0.0f) { Loading @@ -271,7 +279,7 @@ class NotificationWakeUpCoordinator @Inject constructor( // undefined state, so it's an indication that we should do state cleanup. We override // the doze amount to 0f (not dozing) so that the notifications are no longer hidden. // See: UnlockedScreenOffAnimationController.onFinishedWakingUp() setDozeAmount(0f, 0f) setDozeAmount(0f, 0f, source = "Override: Shade->Shade (lock cancelled by unlock)") } if (overrideDozeAmountIfAnimatingScreenOff(mLinearDozeAmount)) { Loading Loading @@ -311,12 +319,11 @@ class NotificationWakeUpCoordinator @Inject constructor( */ private fun overrideDozeAmountIfBypass(): Boolean { if (bypassController.bypassEnabled) { var amount = 1.0f if (statusBarStateController.state == StatusBarState.SHADE || statusBarStateController.state == StatusBarState.SHADE_LOCKED) { amount = 0.0f if (statusBarStateController.state == StatusBarState.KEYGUARD) { setDozeAmount(1f, 1f, source = "Override: bypass (keyguard)") } else { setDozeAmount(0f, 0f, source = "Override: bypass (shade)") } setDozeAmount(amount, amount) return true } return false Loading @@ -332,7 +339,7 @@ class NotificationWakeUpCoordinator @Inject constructor( */ private fun overrideDozeAmountIfAnimatingScreenOff(linearDozeAmount: Float): Boolean { if (screenOffAnimationController.overrideNotificationsFullyDozingOnKeyguard()) { setDozeAmount(1f, 1f) setDozeAmount(1f, 1f, source = "Override: animating screen off") return true } Loading Loading @@ -414,6 +421,26 @@ class NotificationWakeUpCoordinator @Inject constructor( private fun shouldAnimateVisibility() = dozeParameters.alwaysOn && !dozeParameters.displayNeedsBlanking override fun dump(pw: PrintWriter, args: Array<out String>) { pw.println("mLinearDozeAmount: $mLinearDozeAmount") pw.println("mDozeAmount: $mDozeAmount") pw.println("mDozeAmountSource: $mDozeAmountSource") pw.println("mNotificationVisibleAmount: $mNotificationVisibleAmount") pw.println("mNotificationsVisible: $mNotificationsVisible") pw.println("mNotificationsVisibleForExpansion: $mNotificationsVisibleForExpansion") pw.println("mVisibilityAmount: $mVisibilityAmount") pw.println("mLinearVisibilityAmount: $mLinearVisibilityAmount") pw.println("pulseExpanding: $pulseExpanding") pw.println("state: ${StatusBarState.toString(state)}") pw.println("fullyAwake: $fullyAwake") pw.println("wakingUp: $wakingUp") pw.println("willWakeUp: $willWakeUp") pw.println("collapsedEnoughToHide: $collapsedEnoughToHide") pw.println("pulsing: $pulsing") pw.println("notificationsFullyHidden: $notificationsFullyHidden") pw.println("canShowPulsingHuns: $canShowPulsingHuns") } interface WakeUpListener { /** * Called whenever the notifications are fully hidden or shown Loading packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -377,6 +377,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { NotificationWakeUpCoordinator coordinator = new NotificationWakeUpCoordinator( mDumpManager, mock(HeadsUpManagerPhone.class), new StatusBarStateControllerImpl(new UiEventLoggerFake(), mDumpManager, mInteractionJankMonitor), Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt +37 −10 Original line number Diff line number Diff line Loading @@ -18,8 +18,10 @@ package com.android.systemui.statusbar.notification import android.animation.ObjectAnimator import android.util.FloatProperty import com.android.systemui.Dumpable import com.android.systemui.animation.Interpolators import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dump.DumpManager import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.shade.ShadeExpansionChangeEvent import com.android.systemui.shade.ShadeExpansionListener Loading @@ -32,17 +34,20 @@ import com.android.systemui.statusbar.phone.KeyguardBypassController import com.android.systemui.statusbar.phone.ScreenOffAnimationController import com.android.systemui.statusbar.policy.HeadsUpManager import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener import java.io.PrintWriter import javax.inject.Inject import kotlin.math.min @SysUISingleton class NotificationWakeUpCoordinator @Inject constructor( dumpManager: DumpManager, private val mHeadsUpManager: HeadsUpManager, private val statusBarStateController: StatusBarStateController, private val bypassController: KeyguardBypassController, private val dozeParameters: DozeParameters, private val screenOffAnimationController: ScreenOffAnimationController ) : OnHeadsUpChangedListener, StatusBarStateController.StateListener, ShadeExpansionListener { ) : OnHeadsUpChangedListener, StatusBarStateController.StateListener, ShadeExpansionListener, Dumpable { private val mNotificationVisibility = object : FloatProperty<NotificationWakeUpCoordinator>( "notificationVisibility") { Loading @@ -60,6 +65,7 @@ class NotificationWakeUpCoordinator @Inject constructor( private var mLinearDozeAmount: Float = 0.0f private var mDozeAmount: Float = 0.0f private var mDozeAmountSource: String = "init" private var mNotificationVisibleAmount = 0.0f private var mNotificationsVisible = false private var mNotificationsVisibleForExpansion = false Loading Loading @@ -142,6 +148,7 @@ class NotificationWakeUpCoordinator @Inject constructor( } init { dumpManager.registerDumpable(this) mHeadsUpManager.addListener(this) statusBarStateController.addCallback(this) addListener(object : WakeUpListener { Loading Loading @@ -248,13 +255,14 @@ class NotificationWakeUpCoordinator @Inject constructor( // Let's notify the scroller that an animation started notifyAnimationStart(mLinearDozeAmount == 1.0f) } setDozeAmount(linear, eased) setDozeAmount(linear, eased, source = "StatusBar") } fun setDozeAmount(linear: Float, eased: Float) { fun setDozeAmount(linear: Float, eased: Float, source: String) { val changed = linear != mLinearDozeAmount mLinearDozeAmount = linear mDozeAmount = eased mDozeAmountSource = source mStackScrollerController.setDozeAmount(mDozeAmount) updateHideAmount() if (changed && linear == 0.0f) { Loading @@ -271,7 +279,7 @@ class NotificationWakeUpCoordinator @Inject constructor( // undefined state, so it's an indication that we should do state cleanup. We override // the doze amount to 0f (not dozing) so that the notifications are no longer hidden. // See: UnlockedScreenOffAnimationController.onFinishedWakingUp() setDozeAmount(0f, 0f) setDozeAmount(0f, 0f, source = "Override: Shade->Shade (lock cancelled by unlock)") } if (overrideDozeAmountIfAnimatingScreenOff(mLinearDozeAmount)) { Loading Loading @@ -311,12 +319,11 @@ class NotificationWakeUpCoordinator @Inject constructor( */ private fun overrideDozeAmountIfBypass(): Boolean { if (bypassController.bypassEnabled) { var amount = 1.0f if (statusBarStateController.state == StatusBarState.SHADE || statusBarStateController.state == StatusBarState.SHADE_LOCKED) { amount = 0.0f if (statusBarStateController.state == StatusBarState.KEYGUARD) { setDozeAmount(1f, 1f, source = "Override: bypass (keyguard)") } else { setDozeAmount(0f, 0f, source = "Override: bypass (shade)") } setDozeAmount(amount, amount) return true } return false Loading @@ -332,7 +339,7 @@ class NotificationWakeUpCoordinator @Inject constructor( */ private fun overrideDozeAmountIfAnimatingScreenOff(linearDozeAmount: Float): Boolean { if (screenOffAnimationController.overrideNotificationsFullyDozingOnKeyguard()) { setDozeAmount(1f, 1f) setDozeAmount(1f, 1f, source = "Override: animating screen off") return true } Loading Loading @@ -414,6 +421,26 @@ class NotificationWakeUpCoordinator @Inject constructor( private fun shouldAnimateVisibility() = dozeParameters.alwaysOn && !dozeParameters.displayNeedsBlanking override fun dump(pw: PrintWriter, args: Array<out String>) { pw.println("mLinearDozeAmount: $mLinearDozeAmount") pw.println("mDozeAmount: $mDozeAmount") pw.println("mDozeAmountSource: $mDozeAmountSource") pw.println("mNotificationVisibleAmount: $mNotificationVisibleAmount") pw.println("mNotificationsVisible: $mNotificationsVisible") pw.println("mNotificationsVisibleForExpansion: $mNotificationsVisibleForExpansion") pw.println("mVisibilityAmount: $mVisibilityAmount") pw.println("mLinearVisibilityAmount: $mLinearVisibilityAmount") pw.println("pulseExpanding: $pulseExpanding") pw.println("state: ${StatusBarState.toString(state)}") pw.println("fullyAwake: $fullyAwake") pw.println("wakingUp: $wakingUp") pw.println("willWakeUp: $willWakeUp") pw.println("collapsedEnoughToHide: $collapsedEnoughToHide") pw.println("pulsing: $pulsing") pw.println("notificationsFullyHidden: $notificationsFullyHidden") pw.println("canShowPulsingHuns: $canShowPulsingHuns") } interface WakeUpListener { /** * Called whenever the notifications are fully hidden or shown Loading
packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -377,6 +377,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { NotificationWakeUpCoordinator coordinator = new NotificationWakeUpCoordinator( mDumpManager, mock(HeadsUpManagerPhone.class), new StatusBarStateControllerImpl(new UiEventLoggerFake(), mDumpManager, mInteractionJankMonitor), Loading