Merge "Fix drawable CTS breakages" into mnc-dev
diff --git a/graphics/java/android/graphics/drawable/ClipDrawable.java b/graphics/java/android/graphics/drawable/ClipDrawable.java
index 2acf602..31fccd0 100644
--- a/graphics/java/android/graphics/drawable/ClipDrawable.java
+++ b/graphics/java/android/graphics/drawable/ClipDrawable.java
@@ -150,6 +150,23 @@
     }
 
     @Override
+    public int getOpacity() {
+        final Drawable dr = getDrawable();
+        final int opacity = dr.getOpacity();
+        if (opacity == PixelFormat.TRANSPARENT || dr.getLevel() == 0) {
+            return PixelFormat.TRANSPARENT;
+        }
+
+        final int level = getLevel();
+        if (level >= MAX_LEVEL) {
+            return dr.getOpacity();
+        }
+
+        // Some portion of non-transparent drawable is showing.
+        return PixelFormat.TRANSLUCENT;
+    }
+
+    @Override
     public void draw(Canvas canvas) {
         final Drawable dr = getDrawable();
         if (dr.getLevel() == 0) {
diff --git a/graphics/java/android/graphics/drawable/DrawableWrapper.java b/graphics/java/android/graphics/drawable/DrawableWrapper.java
index 58d43f9..9185e1a 100644
--- a/graphics/java/android/graphics/drawable/DrawableWrapper.java
+++ b/graphics/java/android/graphics/drawable/DrawableWrapper.java
@@ -180,7 +180,8 @@
     @Override
     public int getChangingConfigurations() {
         return super.getChangingConfigurations()
-                | (mState != null ? mState.getChangingConfigurations() : 0);
+                | (mState != null ? mState.getChangingConfigurations() : 0)
+                | mDrawable.getChangingConfigurations();
     }
 
     @Override
@@ -366,15 +367,12 @@
     }
 
     /**
-     * Called during inflation to inflate the child element.
+     * Called during inflation to inflate the child element. The last valid
+     * child element will take precedence over any other child elements or
+     * explicit drawable attribute.
      */
     void inflateChildDrawable(Resources r, XmlPullParser parser, AttributeSet attrs,
             Resources.Theme theme) throws XmlPullParserException, IOException {
-        // Drawable specified on the root element takes precedence.
-        if (getDrawable() != null) {
-            return;
-        }
-
         // Seek to the first child element.
         Drawable dr = null;
         int type;
@@ -383,7 +381,6 @@
                 && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
             if (type == XmlPullParser.START_TAG) {
                 dr = Drawable.createFromXmlInner(r, parser, attrs, theme);
-                break;
             }
         }