summaryrefslogtreecommitdiffstats
path: root/graphics/java
diff options
context:
space:
mode:
authorAlan Viverette <alanv@google.com>2014-11-11 19:12:32 -0800
committerAlan Viverette <alanv@google.com>2014-11-11 19:12:32 -0800
commit2d91f63ec20c4b06e87c80451a656462eceba17f (patch)
tree020e379f7952114aa988e1dc05a05ec62b4d91be /graphics/java
parente6ef98cf0528cbc2722b979e5ad86ba859fa78b0 (diff)
downloadframeworks_base-2d91f63ec20c4b06e87c80451a656462eceba17f.zip
frameworks_base-2d91f63ec20c4b06e87c80451a656462eceba17f.tar.gz
frameworks_base-2d91f63ec20c4b06e87c80451a656462eceba17f.tar.bz2
Don't propagate AnimatedStateListDrawable state change to super()
Also updates child element inflation code in AnimationDrawable so that color resources can be used in the <item> drawable attribute. BUG: 18322272 Change-Id: I8d13643c5cbdb76d69634a7bac3cead9e9fba4e8
Diffstat (limited to 'graphics/java')
-rw-r--r--graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java14
-rw-r--r--graphics/java/android/graphics/drawable/AnimationDrawable.java11
2 files changed, 14 insertions, 11 deletions
diff --git a/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java b/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java
index 84555c6..6d23634 100644
--- a/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java
@@ -142,12 +142,18 @@ public class AnimatedStateListDrawable extends StateListDrawable {
// If we're not already at the target index, either attempt to find a
// valid transition to it or jump directly there.
final int targetIndex = mState.indexOfKeyframe(stateSet);
- final boolean changedIndex = targetIndex != getCurrentIndex()
+ boolean changed = targetIndex != getCurrentIndex()
&& (selectTransition(targetIndex) || selectDrawable(targetIndex));
- // Always call super.onStateChanged() to propagate the state change to
- // the current drawable.
- return super.onStateChange(stateSet) || changedIndex;
+ // We need to propagate the state change to the current drawable, but
+ // we can't call StateListDrawable.onStateChange() without changing the
+ // current drawable.
+ final Drawable current = getCurrent();
+ if (current != null) {
+ changed |= current.setState(stateSet);
+ }
+
+ return changed;
}
private boolean selectTransition(int toIndex) {
diff --git a/graphics/java/android/graphics/drawable/AnimationDrawable.java b/graphics/java/android/graphics/drawable/AnimationDrawable.java
index a8b6c94..2ddf9df 100644
--- a/graphics/java/android/graphics/drawable/AnimationDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimationDrawable.java
@@ -285,7 +285,6 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An
private void inflateChildElements(Resources r, XmlPullParser parser, AttributeSet attrs,
Theme theme) throws XmlPullParserException, IOException {
- TypedArray a;
int type;
final int innerDepth = parser.getDepth()+1;
@@ -300,7 +299,8 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An
continue;
}
- a = obtainAttributes(r, theme, attrs, R.styleable.AnimationDrawableItem);
+ final TypedArray a = obtainAttributes(r, theme, attrs,
+ R.styleable.AnimationDrawableItem);
final int duration = a.getInt(R.styleable.AnimationDrawableItem_duration, -1);
if (duration < 0) {
@@ -308,14 +308,11 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An
+ ": <item> tag requires a 'duration' attribute");
}
- final int drawableRes = a.getResourceId(R.styleable.AnimationDrawableItem_drawable, 0);
+ Drawable dr = a.getDrawable(R.styleable.AnimationDrawableItem_drawable);
a.recycle();
- Drawable dr;
- if (drawableRes != 0) {
- dr = r.getDrawable(drawableRes, theme);
- } else {
+ if (dr == null) {
while ((type=parser.next()) == XmlPullParser.TEXT) {
// Empty
}