Merge "Fix a bug that a FSD that finished all loops is not marked as stopped (isRunning returns true after it stops)." am: d3a8520df0 am: c0497985df
am: 99c592e9ca
Change-Id: I78f3005b7722d1c92f55c69e9be9a2dcfc4682e6
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);
}
}
}