diff options
author | Alan Viverette <alanv@google.com> | 2014-11-11 19:12:32 -0800 |
---|---|---|
committer | Alan Viverette <alanv@google.com> | 2014-11-11 19:12:32 -0800 |
commit | 2d91f63ec20c4b06e87c80451a656462eceba17f (patch) | |
tree | 020e379f7952114aa988e1dc05a05ec62b4d91be /graphics/java | |
parent | e6ef98cf0528cbc2722b979e5ad86ba859fa78b0 (diff) | |
download | frameworks_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.java | 14 | ||||
-rw-r--r-- | graphics/java/android/graphics/drawable/AnimationDrawable.java | 11 |
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 } |