summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Nick Chameyev <nickchameyev@google.com> 2023-04-17 10:11:53 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-04-17 10:11:53 +0000
commit50ab78c23458fb8ae2a2e8547306ab8add99ba48 (patch)
treead3e1b61ea91fb6425737ba8b2c0436c26945dcb
parent88412133aaafa3af6b79ba8f200b5c275dd15d38 (diff)
parenta495a4e1f5dd4eb304774c448c7c8ba0b150b0b2 (diff)
Merge "[Unfold animation] Do not animate first progress value in remote provider" into udc-dev
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/unfold/progress/UnfoldRemoteFilterTest.kt26
-rw-r--r--packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/UnfoldRemoteFilter.kt13
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()
}