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:
@@ -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(
|
||||||
|
|||||||
@@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user