AnimateKeyguardInDelay should use the animator duration scale
Additionally, be defensive about showing the keyguard after screen off in case something is holding up the choreography and the light reveal finishes before the keyguard gets a chance to animate in. Bug: 194812424 Test: 1. manually set animator duration to .5 2. go to home screen 3. press power button for device to go into doze 4. check systemui logs that dozing=true Change-Id: Iae4498189a61fa9d8fa78ef4888aea840eaf3682
This commit is contained in:
@@ -132,8 +132,7 @@ public class KeyguardVisibilityHelper {
|
||||
.alpha(1f)
|
||||
.withEndAction(mAnimateKeyguardStatusViewVisibleEndRunnable)
|
||||
.start();
|
||||
} else if (mUnlockedScreenOffAnimationController
|
||||
.isScreenOffLightRevealAnimationPlaying()) {
|
||||
} else if (mUnlockedScreenOffAnimationController.shouldAnimateInKeyguard()) {
|
||||
mKeyguardViewVisibilityAnimating = true;
|
||||
|
||||
// Ask the screen off animation controller to animate the keyguard visibility for us
|
||||
|
||||
@@ -5,20 +5,23 @@ import android.animation.AnimatorListenerAdapter
|
||||
import android.animation.ValueAnimator
|
||||
import android.content.Context
|
||||
import android.content.res.Configuration
|
||||
import android.database.ContentObserver
|
||||
import android.os.Handler
|
||||
import android.provider.Settings
|
||||
import com.android.systemui.statusbar.StatusBarState
|
||||
import android.view.View
|
||||
import com.android.systemui.animation.Interpolators
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.keyguard.KeyguardViewMediator
|
||||
import com.android.systemui.keyguard.WakefulnessLifecycle
|
||||
import com.android.systemui.statusbar.LightRevealScrim
|
||||
import com.android.systemui.statusbar.StatusBarState
|
||||
import com.android.systemui.statusbar.StatusBarStateControllerImpl
|
||||
import com.android.systemui.statusbar.notification.AnimatableProperty
|
||||
import com.android.systemui.statusbar.notification.PropertyAnimator
|
||||
import com.android.systemui.statusbar.notification.stack.AnimationProperties
|
||||
import com.android.systemui.statusbar.notification.stack.StackStateAnimator
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController
|
||||
import com.android.systemui.util.settings.GlobalSettings
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
@@ -46,13 +49,16 @@ class UnlockedScreenOffAnimationController @Inject constructor(
|
||||
private val statusBarStateControllerImpl: StatusBarStateControllerImpl,
|
||||
private val keyguardViewMediatorLazy: dagger.Lazy<KeyguardViewMediator>,
|
||||
private val keyguardStateController: KeyguardStateController,
|
||||
private val dozeParameters: dagger.Lazy<DozeParameters>
|
||||
private val dozeParameters: dagger.Lazy<DozeParameters>,
|
||||
private val globalSettings: GlobalSettings
|
||||
) : WakefulnessLifecycle.Observer {
|
||||
private val handler = Handler()
|
||||
|
||||
private lateinit var statusBar: StatusBar
|
||||
private lateinit var lightRevealScrim: LightRevealScrim
|
||||
|
||||
private var animatorDurationScale = 1f
|
||||
private var shouldAnimateInKeyguard = false
|
||||
private var lightRevealAnimationPlaying = false
|
||||
private var aodUiAnimationPlaying = false
|
||||
|
||||
@@ -79,6 +85,12 @@ class UnlockedScreenOffAnimationController @Inject constructor(
|
||||
})
|
||||
}
|
||||
|
||||
val animatorDurationScaleObserver = object : ContentObserver(null) {
|
||||
override fun onChange(selfChange: Boolean) {
|
||||
updateAnimatorDurationScale()
|
||||
}
|
||||
}
|
||||
|
||||
fun initialize(
|
||||
statusBar: StatusBar,
|
||||
lightRevealScrim: LightRevealScrim
|
||||
@@ -86,14 +98,25 @@ class UnlockedScreenOffAnimationController @Inject constructor(
|
||||
this.lightRevealScrim = lightRevealScrim
|
||||
this.statusBar = statusBar
|
||||
|
||||
updateAnimatorDurationScale()
|
||||
globalSettings.registerContentObserver(
|
||||
Settings.Global.getUriFor(Settings.Global.ANIMATOR_DURATION_SCALE),
|
||||
/* notify for descendants */ false,
|
||||
animatorDurationScaleObserver)
|
||||
wakefulnessLifecycle.addObserver(this)
|
||||
}
|
||||
|
||||
fun updateAnimatorDurationScale() {
|
||||
animatorDurationScale =
|
||||
globalSettings.getFloat(Settings.Global.ANIMATOR_DURATION_SCALE, 1f)
|
||||
}
|
||||
|
||||
/**
|
||||
* Animates in the provided keyguard view, ending in the same position that it will be in on
|
||||
* AOD.
|
||||
*/
|
||||
fun animateInKeyguard(keyguardView: View, after: Runnable) {
|
||||
shouldAnimateInKeyguard = false
|
||||
keyguardView.alpha = 0f
|
||||
keyguardView.visibility = View.VISIBLE
|
||||
|
||||
@@ -138,6 +161,7 @@ class UnlockedScreenOffAnimationController @Inject constructor(
|
||||
// Waking up, so reset this flag.
|
||||
decidedToAnimateGoingToSleep = null
|
||||
|
||||
shouldAnimateInKeyguard = false
|
||||
lightRevealAnimator.cancel()
|
||||
handler.removeCallbacksAndMessages(null)
|
||||
}
|
||||
@@ -146,7 +170,6 @@ class UnlockedScreenOffAnimationController @Inject constructor(
|
||||
// Set this to false in onFinishedWakingUp rather than onStartedWakingUp so that other
|
||||
// observers (such as StatusBar) can ask us whether we were playing the screen off animation
|
||||
// and reset accordingly.
|
||||
lightRevealAnimationPlaying = false
|
||||
aodUiAnimationPlaying = false
|
||||
|
||||
// If we can't control the screen off animation, we shouldn't mess with the StatusBar's
|
||||
@@ -167,15 +190,15 @@ class UnlockedScreenOffAnimationController @Inject constructor(
|
||||
if (dozeParameters.get().shouldControlUnlockedScreenOff()) {
|
||||
decidedToAnimateGoingToSleep = true
|
||||
|
||||
shouldAnimateInKeyguard = true
|
||||
lightRevealAnimationPlaying = true
|
||||
lightRevealAnimator.start()
|
||||
|
||||
handler.postDelayed({
|
||||
aodUiAnimationPlaying = true
|
||||
|
||||
// Show AOD. That'll cause the KeyguardVisibilityHelper to call #animateInKeyguard.
|
||||
statusBar.notificationPanelViewController.showAodUi()
|
||||
}, ANIMATE_IN_KEYGUARD_DELAY)
|
||||
}, (ANIMATE_IN_KEYGUARD_DELAY * animatorDurationScale).toLong())
|
||||
} else {
|
||||
decidedToAnimateGoingToSleep = false
|
||||
}
|
||||
@@ -228,6 +251,10 @@ class UnlockedScreenOffAnimationController @Inject constructor(
|
||||
return lightRevealAnimationPlaying || aodUiAnimationPlaying
|
||||
}
|
||||
|
||||
fun shouldAnimateInKeyguard(): Boolean {
|
||||
return shouldAnimateInKeyguard
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the light reveal animation is playing. The second part of the screen off animation,
|
||||
* where AOD animates in, might still be playing if this returns false.
|
||||
@@ -235,4 +262,4 @@ class UnlockedScreenOffAnimationController @Inject constructor(
|
||||
fun isScreenOffLightRevealAnimationPlaying(): Boolean {
|
||||
return lightRevealAnimationPlaying
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user