Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt +38 −11 Original line number Original line Diff line number Diff line Loading @@ -18,8 +18,10 @@ package com.android.systemui.statusbar.notification import android.animation.ObjectAnimator import android.animation.ObjectAnimator import android.util.FloatProperty import android.util.FloatProperty import com.android.systemui.Dumpable import com.android.systemui.animation.Interpolators import com.android.systemui.animation.Interpolators import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dump.DumpManager import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.collection.NotificationEntry Loading @@ -32,17 +34,20 @@ import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent import com.android.systemui.statusbar.phone.panelstate.PanelExpansionListener import com.android.systemui.statusbar.phone.panelstate.PanelExpansionListener import com.android.systemui.statusbar.policy.HeadsUpManager import com.android.systemui.statusbar.policy.HeadsUpManager import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener import java.io.PrintWriter import javax.inject.Inject import javax.inject.Inject import kotlin.math.min import kotlin.math.min @SysUISingleton @SysUISingleton class NotificationWakeUpCoordinator @Inject constructor( class NotificationWakeUpCoordinator @Inject constructor( dumpManager: DumpManager, private val mHeadsUpManager: HeadsUpManager, private val mHeadsUpManager: HeadsUpManager, private val statusBarStateController: StatusBarStateController, private val statusBarStateController: StatusBarStateController, private val bypassController: KeyguardBypassController, private val bypassController: KeyguardBypassController, private val dozeParameters: DozeParameters, private val dozeParameters: DozeParameters, private val screenOffAnimationController: ScreenOffAnimationController private val screenOffAnimationController: ScreenOffAnimationController ) : OnHeadsUpChangedListener, StatusBarStateController.StateListener, PanelExpansionListener { ) : OnHeadsUpChangedListener, StatusBarStateController.StateListener, PanelExpansionListener, Dumpable { private val mNotificationVisibility = object : FloatProperty<NotificationWakeUpCoordinator>( private val mNotificationVisibility = object : FloatProperty<NotificationWakeUpCoordinator>( "notificationVisibility") { "notificationVisibility") { Loading @@ -60,6 +65,7 @@ class NotificationWakeUpCoordinator @Inject constructor( private var mLinearDozeAmount: Float = 0.0f private var mLinearDozeAmount: Float = 0.0f private var mDozeAmount: Float = 0.0f private var mDozeAmount: Float = 0.0f private var mDozeAmountSource: String = "init" private var mNotificationVisibleAmount = 0.0f private var mNotificationVisibleAmount = 0.0f private var mNotificationsVisible = false private var mNotificationsVisible = false private var mNotificationsVisibleForExpansion = false private var mNotificationsVisibleForExpansion = false Loading Loading @@ -142,6 +148,7 @@ class NotificationWakeUpCoordinator @Inject constructor( } } init { init { dumpManager.registerDumpable(this) mHeadsUpManager.addListener(this) mHeadsUpManager.addListener(this) statusBarStateController.addCallback(this) statusBarStateController.addCallback(this) addListener(object : WakeUpListener { addListener(object : WakeUpListener { Loading Loading @@ -248,13 +255,14 @@ class NotificationWakeUpCoordinator @Inject constructor( // Let's notify the scroller that an animation started // Let's notify the scroller that an animation started notifyAnimationStart(mLinearDozeAmount == 1.0f) 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 val changed = linear != mLinearDozeAmount mLinearDozeAmount = linear mLinearDozeAmount = linear mDozeAmount = eased mDozeAmount = eased mDozeAmountSource = source mStackScrollerController.setDozeAmount(mDozeAmount) mStackScrollerController.setDozeAmount(mDozeAmount) updateHideAmount() updateHideAmount() if (changed && linear == 0.0f) { 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 // 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. // the doze amount to 0f (not dozing) so that the notifications are no longer hidden. // See: UnlockedScreenOffAnimationController.onFinishedWakingUp() // See: UnlockedScreenOffAnimationController.onFinishedWakingUp() setDozeAmount(0f, 0f) setDozeAmount(0f, 0f, source = "Override: Shade->Shade (lock cancelled by unlock)") } } if (overrideDozeAmountIfAnimatingScreenOff(mLinearDozeAmount)) { if (overrideDozeAmountIfAnimatingScreenOff(mLinearDozeAmount)) { Loading Loading @@ -311,12 +319,11 @@ class NotificationWakeUpCoordinator @Inject constructor( */ */ private fun overrideDozeAmountIfBypass(): Boolean { private fun overrideDozeAmountIfBypass(): Boolean { if (bypassController.bypassEnabled) { if (bypassController.bypassEnabled) { var amount = 1.0f if (statusBarStateController.state == StatusBarState.KEYGUARD) { if (statusBarStateController.state == StatusBarState.SHADE || setDozeAmount(1f, 1f, source = "Override: bypass (keyguard)") statusBarStateController.state == StatusBarState.SHADE_LOCKED) { } else { amount = 0.0f setDozeAmount(0f, 0f, source = "Override: bypass (shade)") } } setDozeAmount(amount, amount) return true return true } } return false return false Loading @@ -332,7 +339,7 @@ class NotificationWakeUpCoordinator @Inject constructor( */ */ private fun overrideDozeAmountIfAnimatingScreenOff(linearDozeAmount: Float): Boolean { private fun overrideDozeAmountIfAnimatingScreenOff(linearDozeAmount: Float): Boolean { if (screenOffAnimationController.overrideNotificationsFullyDozingOnKeyguard()) { if (screenOffAnimationController.overrideNotificationsFullyDozingOnKeyguard()) { setDozeAmount(1f, 1f) setDozeAmount(1f, 1f, source = "Override: animating screen off") return true return true } } Loading Loading @@ -426,4 +433,24 @@ class NotificationWakeUpCoordinator @Inject constructor( */ */ @JvmDefault fun onPulseExpansionChanged(expandingChanged: Boolean) {} @JvmDefault fun onPulseExpansionChanged(expandingChanged: Boolean) {} } } 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") } } } packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -452,6 +452,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { NotificationWakeUpCoordinator coordinator = NotificationWakeUpCoordinator coordinator = new NotificationWakeUpCoordinator( new NotificationWakeUpCoordinator( mDumpManager, mock(HeadsUpManagerPhone.class), mock(HeadsUpManagerPhone.class), new StatusBarStateControllerImpl(new UiEventLoggerFake(), mDumpManager, new StatusBarStateControllerImpl(new UiEventLoggerFake(), mDumpManager, mInteractionJankMonitor), mInteractionJankMonitor), Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt +38 −11 Original line number Original line Diff line number Diff line Loading @@ -18,8 +18,10 @@ package com.android.systemui.statusbar.notification import android.animation.ObjectAnimator import android.animation.ObjectAnimator import android.util.FloatProperty import android.util.FloatProperty import com.android.systemui.Dumpable import com.android.systemui.animation.Interpolators import com.android.systemui.animation.Interpolators import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dump.DumpManager import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.collection.NotificationEntry Loading @@ -32,17 +34,20 @@ import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent import com.android.systemui.statusbar.phone.panelstate.PanelExpansionListener import com.android.systemui.statusbar.phone.panelstate.PanelExpansionListener import com.android.systemui.statusbar.policy.HeadsUpManager import com.android.systemui.statusbar.policy.HeadsUpManager import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener import java.io.PrintWriter import javax.inject.Inject import javax.inject.Inject import kotlin.math.min import kotlin.math.min @SysUISingleton @SysUISingleton class NotificationWakeUpCoordinator @Inject constructor( class NotificationWakeUpCoordinator @Inject constructor( dumpManager: DumpManager, private val mHeadsUpManager: HeadsUpManager, private val mHeadsUpManager: HeadsUpManager, private val statusBarStateController: StatusBarStateController, private val statusBarStateController: StatusBarStateController, private val bypassController: KeyguardBypassController, private val bypassController: KeyguardBypassController, private val dozeParameters: DozeParameters, private val dozeParameters: DozeParameters, private val screenOffAnimationController: ScreenOffAnimationController private val screenOffAnimationController: ScreenOffAnimationController ) : OnHeadsUpChangedListener, StatusBarStateController.StateListener, PanelExpansionListener { ) : OnHeadsUpChangedListener, StatusBarStateController.StateListener, PanelExpansionListener, Dumpable { private val mNotificationVisibility = object : FloatProperty<NotificationWakeUpCoordinator>( private val mNotificationVisibility = object : FloatProperty<NotificationWakeUpCoordinator>( "notificationVisibility") { "notificationVisibility") { Loading @@ -60,6 +65,7 @@ class NotificationWakeUpCoordinator @Inject constructor( private var mLinearDozeAmount: Float = 0.0f private var mLinearDozeAmount: Float = 0.0f private var mDozeAmount: Float = 0.0f private var mDozeAmount: Float = 0.0f private var mDozeAmountSource: String = "init" private var mNotificationVisibleAmount = 0.0f private var mNotificationVisibleAmount = 0.0f private var mNotificationsVisible = false private var mNotificationsVisible = false private var mNotificationsVisibleForExpansion = false private var mNotificationsVisibleForExpansion = false Loading Loading @@ -142,6 +148,7 @@ class NotificationWakeUpCoordinator @Inject constructor( } } init { init { dumpManager.registerDumpable(this) mHeadsUpManager.addListener(this) mHeadsUpManager.addListener(this) statusBarStateController.addCallback(this) statusBarStateController.addCallback(this) addListener(object : WakeUpListener { addListener(object : WakeUpListener { Loading Loading @@ -248,13 +255,14 @@ class NotificationWakeUpCoordinator @Inject constructor( // Let's notify the scroller that an animation started // Let's notify the scroller that an animation started notifyAnimationStart(mLinearDozeAmount == 1.0f) 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 val changed = linear != mLinearDozeAmount mLinearDozeAmount = linear mLinearDozeAmount = linear mDozeAmount = eased mDozeAmount = eased mDozeAmountSource = source mStackScrollerController.setDozeAmount(mDozeAmount) mStackScrollerController.setDozeAmount(mDozeAmount) updateHideAmount() updateHideAmount() if (changed && linear == 0.0f) { 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 // 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. // the doze amount to 0f (not dozing) so that the notifications are no longer hidden. // See: UnlockedScreenOffAnimationController.onFinishedWakingUp() // See: UnlockedScreenOffAnimationController.onFinishedWakingUp() setDozeAmount(0f, 0f) setDozeAmount(0f, 0f, source = "Override: Shade->Shade (lock cancelled by unlock)") } } if (overrideDozeAmountIfAnimatingScreenOff(mLinearDozeAmount)) { if (overrideDozeAmountIfAnimatingScreenOff(mLinearDozeAmount)) { Loading Loading @@ -311,12 +319,11 @@ class NotificationWakeUpCoordinator @Inject constructor( */ */ private fun overrideDozeAmountIfBypass(): Boolean { private fun overrideDozeAmountIfBypass(): Boolean { if (bypassController.bypassEnabled) { if (bypassController.bypassEnabled) { var amount = 1.0f if (statusBarStateController.state == StatusBarState.KEYGUARD) { if (statusBarStateController.state == StatusBarState.SHADE || setDozeAmount(1f, 1f, source = "Override: bypass (keyguard)") statusBarStateController.state == StatusBarState.SHADE_LOCKED) { } else { amount = 0.0f setDozeAmount(0f, 0f, source = "Override: bypass (shade)") } } setDozeAmount(amount, amount) return true return true } } return false return false Loading @@ -332,7 +339,7 @@ class NotificationWakeUpCoordinator @Inject constructor( */ */ private fun overrideDozeAmountIfAnimatingScreenOff(linearDozeAmount: Float): Boolean { private fun overrideDozeAmountIfAnimatingScreenOff(linearDozeAmount: Float): Boolean { if (screenOffAnimationController.overrideNotificationsFullyDozingOnKeyguard()) { if (screenOffAnimationController.overrideNotificationsFullyDozingOnKeyguard()) { setDozeAmount(1f, 1f) setDozeAmount(1f, 1f, source = "Override: animating screen off") return true return true } } Loading Loading @@ -426,4 +433,24 @@ class NotificationWakeUpCoordinator @Inject constructor( */ */ @JvmDefault fun onPulseExpansionChanged(expandingChanged: Boolean) {} @JvmDefault fun onPulseExpansionChanged(expandingChanged: Boolean) {} } } 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") } } }
packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -452,6 +452,7 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase { NotificationWakeUpCoordinator coordinator = NotificationWakeUpCoordinator coordinator = new NotificationWakeUpCoordinator( new NotificationWakeUpCoordinator( mDumpManager, mock(HeadsUpManagerPhone.class), mock(HeadsUpManagerPhone.class), new StatusBarStateControllerImpl(new UiEventLoggerFake(), mDumpManager, new StatusBarStateControllerImpl(new UiEventLoggerFake(), mDumpManager, mInteractionJankMonitor), mInteractionJankMonitor), Loading