From 3a982ee1ce5403e1d0cb94e98c0b83faf471fbea Mon Sep 17 00:00:00 2001 From: Josh Tsuji Date: Wed, 30 Jun 2021 17:32:53 -0400 Subject: [PATCH] Don't return true for controlling screen off once we've already returned false for this sleep. This was resulting in a weird partial screen off animation, as it started returning true part of the way through the screen off. Also, check whether the panel is expanded OR in the process of expanding, so that the animation is disabled in both cases. Fixes: 192477275 Test: screen off w/ shade expanded, also in landscape Change-Id: I2939c8f7734db09f99fed6a31939d3d5c15812f3 --- .../UnlockedScreenOffAnimationController.kt | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt index c1f376286164a..4167287a504e3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt @@ -56,6 +56,13 @@ class UnlockedScreenOffAnimationController @Inject constructor( private var lightRevealAnimationPlaying = false private var aodUiAnimationPlaying = false + /** + * The result of our decision whether to play the screen off animation in + * [onStartedGoingToSleep], or null if we haven't made that decision yet or aren't going to + * sleep. + */ + private var decidedToAnimateGoingToSleep: Boolean? = null + private val lightRevealAnimator = ValueAnimator.ofFloat(1f, 0f).apply { duration = LIGHT_REVEAL_ANIMATION_DURATION interpolator = Interpolators.LINEAR @@ -120,11 +127,17 @@ class UnlockedScreenOffAnimationController @Inject constructor( // Run the callback given to us by the KeyguardVisibilityHelper. after.run() + + // Done going to sleep, reset this flag. + decidedToAnimateGoingToSleep = null } .start() } override fun onStartedWakingUp() { + // Waking up, so reset this flag. + decidedToAnimateGoingToSleep = null + lightRevealAnimator.cancel() handler.removeCallbacksAndMessages(null) } @@ -148,6 +161,8 @@ class UnlockedScreenOffAnimationController @Inject constructor( override fun onStartedGoingToSleep() { if (dozeParameters.get().shouldControlUnlockedScreenOff()) { + decidedToAnimateGoingToSleep = true + lightRevealAnimationPlaying = true lightRevealAnimator.start() @@ -157,6 +172,8 @@ class UnlockedScreenOffAnimationController @Inject constructor( // Show AOD. That'll cause the KeyguardVisibilityHelper to call #animateInKeyguard. statusBar.notificationPanelViewController.showAodUi() }, ANIMATE_IN_KEYGUARD_DELAY) + } else { + decidedToAnimateGoingToSleep = false } } @@ -165,6 +182,12 @@ class UnlockedScreenOffAnimationController @Inject constructor( * on the current state of the device. */ fun shouldPlayUnlockedScreenOffAnimation(): Boolean { + // If we explicitly already decided not to play the screen off animation, then never change + // our mind. + if (decidedToAnimateGoingToSleep == false) { + return false + } + if (!dozeParameters.get().canControlUnlockedScreenOff()) { return false } @@ -178,7 +201,8 @@ class UnlockedScreenOffAnimationController @Inject constructor( // already expanded and showing notifications/QS, the animation looks really messy. For now, // disable it if the notification panel is expanded. if (!this::statusBar.isInitialized || - statusBar.notificationPanelViewController.isFullyExpanded) { + statusBar.notificationPanelViewController.isFullyExpanded || + statusBar.notificationPanelViewController.isExpanding) { return false }