Merge "[Unfold animation] Do not animate first progress value in remote provider" into udc-dev am: 50ab78c234

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22649721

Change-Id: I6d6bd843d4c1a262f565e2d32808929ce2bff18b
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Nick Chameyev
2023-04-17 10:28:01 +00:00
committed by Automerger Merge Worker
2 changed files with 37 additions and 6 deletions

View File

@@ -39,15 +39,35 @@ class UnfoldRemoteFilterTest : SysuiTestCase() {
} }
@Test @Test
fun onTransitionProgress_withInterval_propagated() { fun onTransitionProgress_firstProgressEvent_propagatedImmediately() {
runOnMainThreadWithInterval( progressProvider.onTransitionStarted()
{ progressProvider.onTransitionStarted() }, progressProvider.onTransitionProgress(0.5f)
{ progressProvider.onTransitionProgress(0.5f) }
)
listener.assertLastProgress(0.5f) listener.assertLastProgress(0.5f)
} }
@Test
fun onTransitionProgress_secondProgressEvent_isNotPropagatedImmediately() =
InstrumentationRegistry.getInstrumentation().runOnMainSync {
progressProvider.onTransitionStarted()
progressProvider.onTransitionProgress(0.5f)
progressProvider.onTransitionProgress(0.8f)
// 0.8f should be set only later, after the animation
listener.assertLastProgress(0.5f)
}
@Test
fun onTransitionProgress_severalProgressEventsWithInterval_propagated() {
runOnMainThreadWithInterval(
{ progressProvider.onTransitionStarted() },
{ progressProvider.onTransitionProgress(0.5f) },
{ progressProvider.onTransitionProgress(0.8f) }
)
listener.assertLastProgress(0.8f)
}
@Test @Test
fun onTransitionEnded_propagated() { fun onTransitionEnded_propagated() {
runOnMainThreadWithInterval( runOnMainThreadWithInterval(

View File

@@ -34,6 +34,7 @@ class UnfoldRemoteFilter(
} }
private var inProgress = false private var inProgress = false
private var receivedProgressEvent = false
private var processedProgress: Float = 1.0f private var processedProgress: Float = 1.0f
set(newProgress) { set(newProgress) {
@@ -54,7 +55,16 @@ class UnfoldRemoteFilter(
override fun onTransitionProgress(progress: Float) { override fun onTransitionProgress(progress: Float) {
logCounter({ "$TAG#plain_remote_progress" }, progress) logCounter({ "$TAG#plain_remote_progress" }, progress)
if (inProgress) { if (inProgress) {
if (receivedProgressEvent) {
// We have received at least one progress event, animate from the previous
// progress to the current
springAnimation.animateToFinalPosition(progress) springAnimation.animateToFinalPosition(progress)
} else {
// This is the first progress event after starting the animation, send it
// straightaway and set the spring value without animating it
processedProgress = progress
receivedProgressEvent = true
}
} else { } else {
Log.e(TAG, "Progress received while not in progress.") Log.e(TAG, "Progress received while not in progress.")
} }
@@ -62,6 +72,7 @@ class UnfoldRemoteFilter(
override fun onTransitionFinished() { override fun onTransitionFinished() {
inProgress = false inProgress = false
receivedProgressEvent = false
listener.onTransitionFinished() listener.onTransitionFinished()
} }