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

Commit c2333b7e authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Add ability to override global duration scale on ValueAnimator

This is needed as window animations are being ported over to use
ValueAnimator, and thus ValueAnimator need to ability to support
custom duration scales per object.

Test: ValueAnimatorTests
Bug: 64674361
Change-Id: Iea8d673b66e52866929174bbf6ca4a7ae882807b
parent 87a59ee1
Loading
Loading
Loading
Loading
+28 −3
Original line number Diff line number Diff line
@@ -253,6 +253,11 @@ public class ValueAnimator extends Animator implements AnimationHandler.Animatio
     */
    HashMap<String, PropertyValuesHolder> mValuesMap;

    /**
     * If set to non-negative value, this will override {@link #sDurationScale}.
     */
    private float mDurationScale = -1f;

    /**
     * Public constants
     */
@@ -579,8 +584,23 @@ public class ValueAnimator extends Animator implements AnimationHandler.Animatio
        return this;
    }

    /**
     * Overrides the global duration scale by a custom value.
     *
     * @param durationScale The duration scale to set; or {@code -1f} to use the global duration
     *                      scale.
     * @hide
     */
    public void overrideDurationScale(float durationScale) {
        mDurationScale = durationScale;
    }

    private float resolveDurationScale() {
        return mDurationScale >= 0f ? mDurationScale : sDurationScale;
    }

    private long getScaledDuration() {
        return (long)(mDuration * sDurationScale);
        return (long)(mDuration * resolveDurationScale());
    }

    /**
@@ -735,7 +755,10 @@ public class ValueAnimator extends Animator implements AnimationHandler.Animatio
        if (mSeekFraction >= 0) {
            return (long) (mDuration * mSeekFraction);
        }
        float durationScale = sDurationScale == 0 ? 1 : sDurationScale;
        float durationScale = resolveDurationScale();
        if (durationScale == 0f) {
            durationScale = 1f;
        }
        return (long) ((AnimationUtils.currentAnimationTimeMillis() - mStartTime) / durationScale);
    }

@@ -1397,7 +1420,9 @@ public class ValueAnimator extends Animator implements AnimationHandler.Animatio
        if (mStartTime < 0) {
            // First frame. If there is start delay, start delay count down will happen *after* this
            // frame.
            mStartTime = mReversing ? frameTime : frameTime + (long) (mStartDelay * sDurationScale);
            mStartTime = mReversing
                    ? frameTime
                    : frameTime + (long) (mStartDelay * resolveDurationScale());
        }

        // Handle pause/resume