From a06b3f19d498e2c387e7a976f94d3cd5f1d77c35 Mon Sep 17 00:00:00 2001 From: George Mount Date: Wed, 2 Mar 2016 08:06:32 -0800 Subject: [PATCH] Remove animation listener while paused. Bug 27418573 While an animator was paused, it continued to receive Choreographer callbacks. This has been changed now so that after the first callback, it is removed. Change-Id: If73483404b38f1f354a63fc98d07696f442987e6 --- core/java/android/animation/ValueAnimator.java | 15 +++++++++++---- .../src/android/animation/ValueAnimatorTests.java | 7 ++++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/core/java/android/animation/ValueAnimator.java b/core/java/android/animation/ValueAnimator.java index e721de96540fb..5ab2c1d491d75 100644 --- a/core/java/android/animation/ValueAnimator.java +++ b/core/java/android/animation/ValueAnimator.java @@ -1029,8 +1029,16 @@ public class ValueAnimator extends Animator implements AnimationHandler.Animatio @Override public void resume() { - if (mPaused) { + if (Looper.myLooper() == null) { + throw new AndroidRuntimeException("Animators may only be resumed from the same " + + "thread that the animator was started on"); + } + if (mPaused && !mResumed) { mResumed = true; + if (mPauseTime > 0) { + AnimationHandler handler = AnimationHandler.getInstance(); + handler.addAnimationFrameCallback(this, 0); + } } super.resume(); } @@ -1235,9 +1243,8 @@ public class ValueAnimator extends Animator implements AnimationHandler.Animatio } mLastFrameTime = frameTime; if (mPaused) { - if (mPauseTime < 0) { - mPauseTime = frameTime; - } + mPauseTime = frameTime; + handler.removeCallback(this); return; } else if (mResumed) { mResumed = false; diff --git a/core/tests/coretests/src/android/animation/ValueAnimatorTests.java b/core/tests/coretests/src/android/animation/ValueAnimatorTests.java index 998c72a9e9c8a..c92863d93fda8 100644 --- a/core/tests/coretests/src/android/animation/ValueAnimatorTests.java +++ b/core/tests/coretests/src/android/animation/ValueAnimatorTests.java @@ -328,7 +328,12 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2