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
This commit is contained in:
George Mount
2016-03-02 08:06:32 -08:00
parent 3716e52be5
commit a06b3f19d4
2 changed files with 17 additions and 5 deletions

View File

@@ -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;

View File

@@ -328,7 +328,12 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn
// Only a1's pause listener should be called.
assertTrue(l1.pauseCalled);
assertFalse(l1.resumeCalled);
a1.resume();
runTestOnUiThread(new Runnable() {
@Override
public void run() {
a1.resume();
}
});
Thread.sleep(a1.getTotalDuration());