Added a workaround for ValueAnimator issue

ValueAnimator calls onAnimationRepeat before it calls onAnimationUpdate
for last frame (interpolated time 1.0). This causes spinner to jump back
and forth for that frame, as parameters of drawing change for the next
repetition of the animation.

ValueAnimator usually skips the last frame if animation is repeating,
so this was happening only occasionally.

Test: Done manually
Change-Id: Ifd4adcfb2bd75fffa9a40fc7aa201f23127c4b24
diff --git a/core-ui/java/android/support/v4/widget/CircularProgressDrawable.java b/core-ui/java/android/support/v4/widget/CircularProgressDrawable.java
index 34b1874..3e56e08 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) {