Merge "Fix logic problems in AnimationDrawable and View."
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index fc95724..2734abc 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -11325,10 +11325,9 @@
attachInfo.mHandler.removeCallbacks(action);
attachInfo.mViewRootImpl.mChoreographer.removeCallbacks(
Choreographer.CALLBACK_ANIMATION, action, null);
- } else {
- // Assume that post will succeed later
- ViewRootImpl.getRunQueue().removeCallbacks(action);
}
+ // Assume that post will succeed later
+ ViewRootImpl.getRunQueue().removeCallbacks(action);
}
return true;
}
@@ -15103,9 +15102,8 @@
if (mAttachInfo != null) {
mAttachInfo.mViewRootImpl.mChoreographer.removeCallbacks(
Choreographer.CALLBACK_ANIMATION, what, who);
- } else {
- ViewRootImpl.getRunQueue().removeCallbacks(what);
}
+ ViewRootImpl.getRunQueue().removeCallbacks(what);
}
}
diff --git a/graphics/java/android/graphics/drawable/AnimationDrawable.java b/graphics/java/android/graphics/drawable/AnimationDrawable.java
index bde978d..02b2588 100644
--- a/graphics/java/android/graphics/drawable/AnimationDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimationDrawable.java
@@ -81,6 +81,7 @@
public class AnimationDrawable extends DrawableContainer implements Runnable, Animatable {
private final AnimationState mAnimationState;
private int mCurFrame = -1;
+ private boolean mAnimating;
private boolean mMutated;
public AnimationDrawable() {
@@ -137,7 +138,7 @@
* @return true if the animation is running, false otherwise
*/
public boolean isRunning() {
- return mCurFrame > -1;
+ return mAnimating;
}
/**
@@ -153,6 +154,7 @@
@Override
public void unscheduleSelf(Runnable what) {
mCurFrame = -1;
+ mAnimating = false;
super.unscheduleSelf(what);
}
@@ -222,12 +224,13 @@
}
mCurFrame = frame;
selectDrawable(frame);
- if (unschedule) {
+ if (unschedule || animate) {
unscheduleSelf(this);
}
if (animate) {
- // Unscheduling may have clobbered this value; restore it to record that we're animating
+ // Unscheduling may have clobbered these values; restore them
mCurFrame = frame;
+ mAnimating = true;
scheduleSelf(this, SystemClock.uptimeMillis() + mAnimationState.mDurations[frame]);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/AnimatedImageView.java b/packages/SystemUI/src/com/android/systemui/statusbar/AnimatedImageView.java
index 7d3e870..9839fe9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/AnimatedImageView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/AnimatedImageView.java
@@ -38,7 +38,7 @@
}
private void updateAnim() {
- Drawable drawable = mAttached ? getDrawable() : null;
+ Drawable drawable = getDrawable();
if (mAttached && mAnim != null) {
mAnim.stop();
}