Fix a bug that a FSD that finished all loops is not marked as stopped (isRunning returns true after it stops).
bug:30142379
Also use the new constant in the loop check and make it safer.
Change-Id: Id36f813fcf717607ccee5be89588d688f48f58d9
diff --git a/framesequence/src/android/support/rastermill/FrameSequenceDrawable.java b/framesequence/src/android/support/rastermill/FrameSequenceDrawable.java
index 3342429..cc17c73 100644
--- a/framesequence/src/android/support/rastermill/FrameSequenceDrawable.java
+++ b/framesequence/src/android/support/rastermill/FrameSequenceDrawable.java
@@ -231,9 +231,13 @@
}
};
- private Runnable mCallbackRunnable = new Runnable() {
+ private Runnable mFinishedCallbackRunnable = new Runnable() {
@Override
public void run() {
+ synchronized (mLock) {
+ mNextFrameToDecode = -1;
+ mState = 0;
+ }
if (mOnFinishedListener != null) {
mOnFinishedListener.onFinished(FrameSequenceDrawable.this);
}
@@ -386,8 +390,8 @@
boolean continueLooping = true;
if (mNextFrameToDecode == mFrameSequence.getFrameCount() - 1) {
mCurrentLoop++;
- if ((mLoopBehavior == LOOP_ONCE && mCurrentLoop == mLoopCount) ||
- (mLoopBehavior == LOOP_DEFAULT && mCurrentLoop == mFrameSequence.getDefaultLoopCount())) {
+ if ((mLoopBehavior == LOOP_FINITE && mCurrentLoop >= mLoopCount) ||
+ (mLoopBehavior == LOOP_DEFAULT && mCurrentLoop >= mFrameSequence.getDefaultLoopCount())) {
continueLooping = false;
}
}
@@ -395,7 +399,7 @@
if (continueLooping) {
scheduleDecodeLocked();
} else {
- scheduleSelf(mCallbackRunnable, 0);
+ scheduleSelf(mFinishedCallbackRunnable, 0);
}
}
}