[Bouncer] Add better way to determine inflection.

It seems that the scenario test failed because it could never reach the
threshold to determine whether the element should fade back in on the
other side. I found a way more elegant approach here.

This is confirmed to fix the scenario test and is way better.

Fixes: 253470463
Test: atest
Change-Id: I5c1d1260d3c9d343fd38ee1ff6e3c72edf161dea
This commit is contained in:
Aaron Liu
2022-10-13 18:43:49 -07:00
parent 2689585c62
commit 8c091c7d6b

View File

@@ -109,12 +109,13 @@ class KeyguardSecurityViewTransition : Transition() {
object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator) {
runningSecurityShiftAnimator = null
if (shouldRestoreLayerType) {
v.setLayerType(View.LAYER_TYPE_NONE, /* paint= */ null)
}
}
}
)
var finishedFadingOutNonSecurityView = false
runningSecurityShiftAnimator.addUpdateListener { animation: ValueAnimator ->
val switchPoint = SECURITY_SHIFT_ANIMATION_FADE_OUT_PROPORTION
val isFadingOut = animation.animatedFraction < switchPoint
@@ -153,6 +154,13 @@ class KeyguardSecurityViewTransition : Transition() {
startRect.right + currentTranslation,
startRect.bottom
)
} else {
v.setLeftTopRightBottom(
startRect.left,
startRect.top,
startRect.right,
startRect.bottom
)
}
} else {
// And in again over the remaining (100-X)%.
@@ -175,32 +183,13 @@ class KeyguardSecurityViewTransition : Transition() {
endRect.right - translationRemaining,
endRect.bottom
)
}
}
if (animation.animatedFraction == 1.0f && shouldRestoreLayerType) {
v.setLayerType(View.LAYER_TYPE_NONE, /* paint= */ null)
}
// For views that are not the security view flipper, we do not want to apply
// an x translation animation. Instead, we want to fade out, move to final position and
// then fade in.
if (v !is KeyguardSecurityViewFlipper) {
// Opacity goes close to 0 but does not fully get to 0.
if (opacity - 0.001f < 0f) {
} else {
v.setLeftTopRightBottom(
endRect.left,
endRect.top,
endRect.right,
endRect.bottom
)
finishedFadingOutNonSecurityView = true
} else if (!finishedFadingOutNonSecurityView) {
v.setLeftTopRightBottom(
startRect.left,
startRect.top,
startRect.right,
startRect.bottom
)
}
}
}