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
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 @@
         // 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 @@
 
     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 @@
                 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 @@
                         + ": <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
                 }