Merge "Added a workaround for ValueAnimator issue" into oc-support-26.0-dev
diff --git a/core-ui/java/android/support/v4/widget/CircularProgressDrawable.java b/core-ui/java/android/support/v4/widget/CircularProgressDrawable.java
index d4fdc5a..ac29541 100644
--- a/core-ui/java/android/support/v4/widget/CircularProgressDrawable.java
+++ b/core-ui/java/android/support/v4/widget/CircularProgressDrawable.java
@@ -523,10 +523,12 @@
/**
* Update the ring start and end trim according to current time of the animation.
*/
- private void applyTransformation(float interpolatedTime, Ring ring) {
+ private void applyTransformation(float interpolatedTime, Ring ring, boolean lastFrame) {
if (mFinishing) {
applyFinishTranslation(interpolatedTime, ring);
- } else {
+ // Below condition is to work around a ValueAnimator issue where onAnimationRepeat is
+ // called before last frame (1f).
+ } else if (interpolatedTime != 1f || lastFrame) {
final float startingRotation = ring.getStartingRotation();
float startTrim, endTrim;
@@ -561,7 +563,7 @@
public void onAnimationUpdate(ValueAnimator animation) {
float interpolatedTime = (float) animation.getAnimatedValue();
updateRingColor(interpolatedTime, ring);
- applyTransformation(interpolatedTime, ring);
+ applyTransformation(interpolatedTime, ring, false);
invalidateSelf();
}
});
@@ -587,7 +589,7 @@
@Override
public void onAnimationRepeat(Animator animator) {
- applyTransformation(1f, ring); // Set ring to last frame
+ applyTransformation(1f, ring, true);
ring.storeOriginals();
ring.goToNextColor();
if (mFinishing) {