From 543a7ed7af992c5f62a9df1a20f3a2397d3e6ec3 Mon Sep 17 00:00:00 2001 From: Justin Klaassen Date: Fri, 22 Jul 2016 19:30:03 -0700 Subject: [PATCH] Fix NPE in ValueAnimator - 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 | 2 +- core/java/android/animation/ValueAnimator.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/core/java/android/animation/ObjectAnimator.java b/core/java/android/animation/ObjectAnimator.java index 5c4b979ccb3cb..9a2aa302a4baf 100644 --- a/core/java/android/animation/ObjectAnimator.java +++ b/core/java/android/animation/ObjectAnimator.java @@ -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; diff --git a/core/java/android/animation/ValueAnimator.java b/core/java/android/animation/ValueAnimator.java index 0c7ee2c8c2fec..e3f8fa49f9dde 100644 --- a/core/java/android/animation/ValueAnimator.java +++ b/core/java/android/animation/ValueAnimator.java @@ -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.