summaryrefslogtreecommitdiffstats
path: root/graphics
diff options
context:
space:
mode:
authorAlan Viverette <alanv@google.com>2015-05-27 17:18:57 -0700
committerAlan Viverette <alanv@google.com>2015-05-28 13:50:44 -0700
commitb63b93dee7744f00280ea998ef24d0a1d57d3934 (patch)
treefdfa2c462b601470ad9a5dbc7ab6d79bb8f11199 /graphics
parent517f3ee41afb7713f1fc6fa37a6f3a6efa97a020 (diff)
downloadframeworks_base-b63b93dee7744f00280ea998ef24d0a1d57d3934.zip
frameworks_base-b63b93dee7744f00280ea998ef24d0a1d57d3934.tar.gz
frameworks_base-b63b93dee7744f00280ea998ef24d0a1d57d3934.tar.bz2
Fix drawable CTS breakages
1. ClipDrawable.getOpacity() now correctly respects the current level 2. DrawableWrapper checks the contained drawable's changing config even if it doesn't have a constant state 3. DrawableWrapper gives priority to the last valid child drawable rather than the drawable attribute Bug: 21406104 Change-Id: I442fe90d0a3865bfdc6b2d14a7358178310dde02
Diffstat (limited to 'graphics')
-rw-r--r--graphics/java/android/graphics/drawable/ClipDrawable.java17
-rw-r--r--graphics/java/android/graphics/drawable/DrawableWrapper.java13
2 files changed, 22 insertions, 8 deletions
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 @@ public class ClipDrawable extends DrawableWrapper {
}
@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 @@ public abstract class DrawableWrapper extends Drawable implements Drawable.Callb
@Override
public int getChangingConfigurations() {
return super.getChangingConfigurations()
- | (mState != null ? mState.getChangingConfigurations() : 0);
+ | (mState != null ? mState.getChangingConfigurations() : 0)
+ | mDrawable.getChangingConfigurations();
}
@Override
@@ -366,15 +367,12 @@ public abstract class DrawableWrapper extends Drawable implements Drawable.Callb
}
/**
- * 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 @@ public abstract class DrawableWrapper extends Drawable implements Drawable.Callb
&& (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
if (type == XmlPullParser.START_TAG) {
dr = Drawable.createFromXmlInner(r, parser, attrs, theme);
- break;
}
}