diff options
author | 2023-04-17 10:11:53 +0000 | |
---|---|---|
committer | 2023-04-17 10:11:53 +0000 | |
commit | 50ab78c23458fb8ae2a2e8547306ab8add99ba48 (patch) | |
tree | ad3e1b61ea91fb6425737ba8b2c0436c26945dcb | |
parent | 88412133aaafa3af6b79ba8f200b5c275dd15d38 (diff) | |
parent | a495a4e1f5dd4eb304774c448c7c8ba0b150b0b2 (diff) |
Merge "[Unfold animation] Do not animate first progress value in remote provider" into udc-dev
2 files changed, 35 insertions, 4 deletions
diff --git a/packages/SystemUI/tests/src/com/android/systemui/unfold/progress/UnfoldRemoteFilterTest.kt b/packages/SystemUI/tests/src/com/android/systemui/unfold/progress/UnfoldRemoteFilterTest.kt index f14009aad033..70eadcee7607 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/unfold/progress/UnfoldRemoteFilterTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/unfold/progress/UnfoldRemoteFilterTest.kt @@ -39,13 +39,33 @@ class UnfoldRemoteFilterTest : SysuiTestCase() { } @Test - fun onTransitionProgress_withInterval_propagated() { + fun onTransitionProgress_firstProgressEvent_propagatedImmediately() { + progressProvider.onTransitionStarted() + progressProvider.onTransitionProgress(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.5f) }, + { progressProvider.onTransitionProgress(0.8f) } ) - listener.assertLastProgress(0.5f) + listener.assertLastProgress(0.8f) } @Test diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/UnfoldRemoteFilter.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/UnfoldRemoteFilter.kt index 30418883eaf8..843cc3b78031 100644 --- a/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/UnfoldRemoteFilter.kt +++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/UnfoldRemoteFilter.kt @@ -34,6 +34,7 @@ class UnfoldRemoteFilter( } private var inProgress = false + private var receivedProgressEvent = false private var processedProgress: Float = 1.0f set(newProgress) { @@ -54,7 +55,16 @@ class UnfoldRemoteFilter( override fun onTransitionProgress(progress: Float) { logCounter({ "$TAG#plain_remote_progress" }, progress) if (inProgress) { - springAnimation.animateToFinalPosition(progress) + if (receivedProgressEvent) { + // We have received at least one progress event, animate from the previous + // progress to the current + 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 { Log.e(TAG, "Progress received while not in progress.") } @@ -62,6 +72,7 @@ class UnfoldRemoteFilter( override fun onTransitionFinished() { inProgress = false + receivedProgressEvent = false listener.onTransitionFinished() } |