OSDN Git Service

Fix NPE in ValueAnimator
authorJustin Klaassen <justinklaassen@google.com>
Sat, 23 Jul 2016 02:30:03 +0000 (19:30 -0700)
committerJustin Klaassen <justinklaassen@google.com>
Mon, 25 Jul 2016 19:40:09 +0000 (12:40 -0700)
- Reset mAnimationEndRequested to false in ValueAnimator#start(boolean)
  so that previously canceled animated (with a start delay) can be
  canceled again.
- In ObjectAnimator#animateValue(float) check if target == null
  regardless of mTarget == null since it's possible the target was
  explicitly set to null prior to the animator being cancelled.

Bug: 30190459
Change-Id: I6da55737df30a28f48355fc7a41ab91d05979deb

core/java/android/animation/ObjectAnimator.java
core/java/android/animation/ValueAnimator.java

index 5c4b979..9a2aa30 100644 (file)
@@ -977,7 +977,7 @@ public final class ObjectAnimator extends ValueAnimator {
     @Override
     void animateValue(float fraction) {
         final Object target = getTarget();
-        if (mTarget != null && target == null) {
+        if (target == null) {
             // We lost the target reference, cancel and clean up.
             cancel();
             return;
index 0c7ee2c..e3f8fa4 100644 (file)
@@ -982,6 +982,7 @@ public class ValueAnimator extends Animator implements AnimationHandler.Animatio
         mStarted = true;
         mPaused = false;
         mRunning = false;
+        mAnimationEndRequested = false;
         // Resets mLastFrameTime when start() is called, so that if the animation was running,
         // calling start() would put the animation in the
         // started-but-not-yet-reached-the-first-frame phase.