Merge "Use withEndAction for unlocked screen off animation end action." into tm-dev
This commit is contained in:
@@ -175,28 +175,36 @@ class UnlockedScreenOffAnimationController @Inject constructor(
|
|||||||
.setDuration(duration.toLong())
|
.setDuration(duration.toLong())
|
||||||
.setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
|
.setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
|
||||||
.alpha(1f)
|
.alpha(1f)
|
||||||
|
.withEndAction {
|
||||||
|
aodUiAnimationPlaying = false
|
||||||
|
|
||||||
|
// Lock the keyguard if it was waiting for the screen off animation to end.
|
||||||
|
keyguardViewMediatorLazy.get().maybeHandlePendingLock()
|
||||||
|
|
||||||
|
// Tell the CentralSurfaces to become keyguard for real - we waited on that
|
||||||
|
// since it is slow and would have caused the animation to jank.
|
||||||
|
mCentralSurfaces.updateIsKeyguard()
|
||||||
|
|
||||||
|
// Run the callback given to us by the KeyguardVisibilityHelper.
|
||||||
|
after.run()
|
||||||
|
|
||||||
|
// Done going to sleep, reset this flag.
|
||||||
|
decidedToAnimateGoingToSleep = null
|
||||||
|
|
||||||
|
// We need to unset the listener. These are persistent for future animators
|
||||||
|
keyguardView.animate().setListener(null)
|
||||||
|
interactionJankMonitor.end(CUJ_SCREEN_OFF_SHOW_AOD)
|
||||||
|
}
|
||||||
.setListener(object : AnimatorListenerAdapter() {
|
.setListener(object : AnimatorListenerAdapter() {
|
||||||
override fun onAnimationEnd(animation: Animator?) {
|
|
||||||
aodUiAnimationPlaying = false
|
|
||||||
|
|
||||||
// Lock the keyguard if it was waiting for the screen off animation to end.
|
|
||||||
keyguardViewMediatorLazy.get().maybeHandlePendingLock()
|
|
||||||
|
|
||||||
// Tell the CentralSurfaces to become keyguard for real - we waited on that
|
|
||||||
// since it is slow and would have caused the animation to jank.
|
|
||||||
mCentralSurfaces.updateIsKeyguard()
|
|
||||||
|
|
||||||
// Run the callback given to us by the KeyguardVisibilityHelper.
|
|
||||||
after.run()
|
|
||||||
|
|
||||||
// Done going to sleep, reset this flag.
|
|
||||||
decidedToAnimateGoingToSleep = null
|
|
||||||
// We need to unset the listener. These are persistent for future animators
|
|
||||||
keyguardView.animate().setListener(null)
|
|
||||||
interactionJankMonitor.end(CUJ_SCREEN_OFF_SHOW_AOD)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onAnimationCancel(animation: Animator?) {
|
override fun onAnimationCancel(animation: Animator?) {
|
||||||
|
// If we're cancelled, reset state flags/listeners. The end action above
|
||||||
|
// will not be called, which is what we want since that will finish the
|
||||||
|
// screen off animation and show the lockscreen, which we don't want if we
|
||||||
|
// were cancelled.
|
||||||
|
aodUiAnimationPlaying = false
|
||||||
|
decidedToAnimateGoingToSleep = null
|
||||||
|
keyguardView.animate().setListener(null)
|
||||||
|
|
||||||
interactionJankMonitor.cancel(CUJ_SCREEN_OFF_SHOW_AOD)
|
interactionJankMonitor.cancel(CUJ_SCREEN_OFF_SHOW_AOD)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -117,11 +117,18 @@ class UnlockedScreenOffAnimationControllerTest : SysuiTestCase() {
|
|||||||
val keyguardSpy = spy(keyguardView)
|
val keyguardSpy = spy(keyguardView)
|
||||||
Mockito.`when`(keyguardSpy.animate()).thenReturn(animator)
|
Mockito.`when`(keyguardSpy.animate()).thenReturn(animator)
|
||||||
val listener = ArgumentCaptor.forClass(Animator.AnimatorListener::class.java)
|
val listener = ArgumentCaptor.forClass(Animator.AnimatorListener::class.java)
|
||||||
|
val endAction = ArgumentCaptor.forClass(Runnable::class.java)
|
||||||
controller.animateInKeyguard(keyguardSpy, Runnable {})
|
controller.animateInKeyguard(keyguardSpy, Runnable {})
|
||||||
Mockito.verify(animator).setListener(listener.capture())
|
Mockito.verify(animator).setListener(listener.capture())
|
||||||
// Verify that the listener is cleared when it ends
|
Mockito.verify(animator).withEndAction(endAction.capture())
|
||||||
listener.value.onAnimationEnd(null)
|
|
||||||
|
// Verify that the listener is cleared if we cancel it.
|
||||||
|
listener.value.onAnimationCancel(null)
|
||||||
Mockito.verify(animator).setListener(null)
|
Mockito.verify(animator).setListener(null)
|
||||||
|
|
||||||
|
// Verify that the listener is also cleared if the end action is triggered.
|
||||||
|
endAction.value.run()
|
||||||
|
verify(animator, times(2)).setListener(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user