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:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user