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
This commit is contained in:
Josh Tsuji
2021-06-30 17:32:53 -04:00
parent a52ca6db46
commit 3a982ee1ce

View File

@@ -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
}