From 61045c518b18a7cee30954fe45f9db8c14e705e1 Mon Sep 17 00:00:00 2001 From: Doris Liu Date: Tue, 24 May 2016 16:38:19 -0700 Subject: [PATCH] Clamp start delay to non-negative range Bug: 28936388 Change-Id: I2a225e07cad53c6ffc3637219f8c741aca5c008c --- core/java/android/animation/AnimatorSet.java | 14 ++++++++++---- core/java/android/animation/ValueAnimator.java | 10 ++++++++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/core/java/android/animation/AnimatorSet.java b/core/java/android/animation/AnimatorSet.java index 8ff38bb8647bd..7841d29b5700d 100644 --- a/core/java/android/animation/AnimatorSet.java +++ b/core/java/android/animation/AnimatorSet.java @@ -465,20 +465,26 @@ public final class AnimatorSet extends Animator { /** * The amount of time, in milliseconds, to delay starting the animation after - * {@link #start()} is called. - + * {@link #start()} is called. Note that the start delay should always be non-negative. Any + * negative start delay will be clamped to 0 on N and above. + * * @param startDelay The amount of the delay, in milliseconds */ @Override public void setStartDelay(long startDelay) { - if (mStartDelay > 0) { - mReversible = false; + // Clamp start delay to non-negative range. + if (startDelay < 0) { + Log.w(TAG, "Start delay should always be non-negative"); + startDelay = 0; } long delta = startDelay - mStartDelay; if (delta == 0) { return; } mStartDelay = startDelay; + if (mStartDelay > 0) { + mReversible = false; + } if (!mDependencyDirty) { // Dependency graph already constructed, update all the nodes' start/end time int size = mNodes.size(); diff --git a/core/java/android/animation/ValueAnimator.java b/core/java/android/animation/ValueAnimator.java index 0a9b5ded89247..4edf249ce065a 100644 --- a/core/java/android/animation/ValueAnimator.java +++ b/core/java/android/animation/ValueAnimator.java @@ -708,12 +708,18 @@ public class ValueAnimator extends Animator implements AnimationHandler.Animatio /** * The amount of time, in milliseconds, to delay starting the animation after - * {@link #start()} is called. - + * {@link #start()} is called. Note that the start delay should always be non-negative. Any + * negative start delay will be clamped to 0 on N and above. + * * @param startDelay The amount of the delay, in milliseconds */ @Override public void setStartDelay(long startDelay) { + // Clamp start delay to non-negative range. + if (startDelay < 0) { + Log.w(TAG, "Start delay should always be non-negative"); + startDelay = 0; + } mStartDelay = startDelay; }