Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 65abc0e3 authored by Doris Liu's avatar Doris Liu Committed by android-build-merger
Browse files

Merge "Get animation update timing for AVD" into mnc-dr1.5-dev am: a73abeaf

am: 7537aa75

* commit '7537aa75':
  Get animation update timing for AVD
parents 07ee5182 7537aa75
Loading
Loading
Loading
Loading
+38 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ import android.animation.AnimatorInflater;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.Animator.AnimatorListener;
import android.animation.ValueAnimator;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.res.ColorStateList;
@@ -140,6 +141,16 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 {
    /** Local, mutable animator set. */
    private final AnimatorSet mAnimatorSet = new AnimatorSet();

    // Setup a value animator to get animation update callbacks.
    private final ValueAnimator mUpdateAnim = ValueAnimator.ofFloat(0f, 1f);
    private final ValueAnimator.AnimatorUpdateListener mUpdateListener =
            new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    invalidateSelf();
                }
            };

    /**
     * The resources against which this drawable was created. Used to attempt
     * to inflate animators if applyTheme() doesn't get called.
@@ -605,6 +616,32 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 {
        if (!mHasAnimatorSet) {
            mAnimatedVectorState.prepareLocalAnimators(mAnimatorSet, mRes);
            mHasAnimatorSet = true;
            // Setup an infinitely running ValueAnimator, start it when AnimatorSet starts and
            // end it when AnimatorSet ends, so we get the animation update timing for
            // invalidating the drawable. Ideally, we would set an update listener on AnimatorSet,
            // but since AnimatorSet doesn't support that yet, this is the alternative to achieve
            // the same goal.
            mUpdateAnim.setRepeatCount(ValueAnimator.INFINITE);
            mUpdateAnim.addUpdateListener(mUpdateListener);
            mAnimatorSet.addListener(new AnimatorListener() {
                @Override
                public void onAnimationStart(Animator animation) {
                    mUpdateAnim.start();
                }

                @Override
                public void onAnimationEnd(Animator animation) {
                    mUpdateAnim.end();
                }

                @Override
                public void onAnimationCancel(Animator animation) {
                }

                @Override
                public void onAnimationRepeat(Animator animation) {
                }
            });
            mRes = null;
        }
    }