Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a06b3f19 authored by George Mount's avatar George Mount
Browse files

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
parent 3716e52b
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -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;
            }
            handler.removeCallback(this);
            return;
        } else if (mResumed) {
            mResumed = false;
+6 −1
Original line number Diff line number Diff line
@@ -328,7 +328,12 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn
        // Only a1's pause listener should be called.
        assertTrue(l1.pauseCalled);
        assertFalse(l1.resumeCalled);
        runTestOnUiThread(new Runnable() {
            @Override
            public void run() {
                a1.resume();
            }
        });

        Thread.sleep(a1.getTotalDuration());