summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Spurlock <jspurlock@google.com>2013-11-15 17:10:03 -0500
committerJohn Spurlock <jspurlock@google.com>2013-11-18 15:59:37 -0500
commit180979f76b0c99cd7053a44692f6408721b74bce (patch)
tree1f81118ce47d94b87d1422ca96d98cf6171aa1b2
parentaff6ea9516ebb4c7e5bf487f7c867f31e8fbbd96 (diff)
downloadframeworks_base-180979f76b0c99cd7053a44692f6408721b74bce.zip
frameworks_base-180979f76b0c99cd7053a44692f6408721b74bce.tar.gz
frameworks_base-180979f76b0c99cd7053a44692f6408721b74bce.tar.bz2
Fix logic problems in AnimationDrawable and View.
1. View now checks both queues when unscheduling runnables, fixing the case where work was scheduled pre-attach, and unscheduled post-attach. 2. AnimationDrawable avoids posting duplicate runnables when rescheduling itself. 3. Decouple is-animation-running state from current frame pointer in AnimationDrawable. Some calls init to the first frame, but do not kick off the animation. 4. Remove workaround in SystemUI's AnimatedImageView (status bar icon) now that the underlying framework issues are fixed. Bug:11694594 Change-Id: I77ca6bd80262f7edcf980b2d7efc2592f8051f29
-rw-r--r--core/java/android/view/View.java8
-rw-r--r--graphics/java/android/graphics/drawable/AnimationDrawable.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/AnimatedImageView.java2
3 files changed, 10 insertions, 9 deletions
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 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
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 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
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 @@ import android.util.AttributeSet;
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 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An
* @return true if the animation is running, false otherwise
*/
public boolean isRunning() {
- return mCurFrame > -1;
+ return mAnimating;
}
/**
@@ -153,6 +154,7 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An
@Override
public void unscheduleSelf(Runnable what) {
mCurFrame = -1;
+ mAnimating = false;
super.unscheduleSelf(what);
}
@@ -222,12 +224,13 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An
}
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 @@ public class AnimatedImageView extends ImageView {
}
private void updateAnim() {
- Drawable drawable = mAttached ? getDrawable() : null;
+ Drawable drawable = getDrawable();
if (mAttached && mAnim != null) {
mAnim.stop();
}