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

Commit 3b466875 authored by Doris Liu's avatar Doris Liu
Browse files

Fix start delay for ValueAnimator

This CL ensures that doAnimationFrame() is called the frame
after start() is called, so that AnimatorSet can pulse frames
 into single animators as soon as they are start()'ed.

Test: new cts test in  same topic branch

Change-Id: I4f9522ce9e1a54ca3bcad6c696e6b248c945ff90
parent cb07efbf
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -631,13 +631,16 @@ public class ValueAnimator extends Animator {
    public void setCurrentFraction(float fraction) {
        initAnimation();
        fraction = clampFraction(fraction);
        mStartTimeCommitted = true; // do not allow start time to be compensated for jank
        if (isPulsingInternal()) {
            long seekTime = (long) (getScaledDuration() * fraction);
            long currentTime = AnimationUtils.currentAnimationTimeMillis();
            // Only modify the start time when the animation is running. Seek fraction will ensure
            // non-running animations skip to the correct start time.
            mStartTime = currentTime - seekTime;
        mStartTimeCommitted = true; // do not allow start time to be compensated for jank
        if (!isPulsingInternal()) {
            // If the animation loop hasn't started, the startTime will be adjusted in the first
            // frame based on seek fraction.
        } else {
            // If the animation loop hasn't started, or during start delay, the startTime will be
            // adjusted once the delay has passed based on seek fraction.
            mSeekFraction = fraction;
        }
        mOverallFraction = fraction;
@@ -1022,7 +1025,7 @@ public class ValueAnimator extends Animator {
        // started-but-not-yet-reached-the-first-frame phase.
        mLastFrameTime = -1;
        mFirstFrameTime = -1;
        addAnimationCallback((long) (mStartDelay * sDurationScale));
        addAnimationCallback(0);

        if (mStartDelay == 0 || mSeekFraction >= 0 || mReversing) {
            // If there's no start delay, init the animation and notify start listeners right away