diff options
author | Alan Viverette <alanv@google.com> | 2015-05-27 17:18:57 -0700 |
---|---|---|
committer | Alan Viverette <alanv@google.com> | 2015-05-28 13:50:44 -0700 |
commit | b63b93dee7744f00280ea998ef24d0a1d57d3934 (patch) | |
tree | fdfa2c462b601470ad9a5dbc7ab6d79bb8f11199 /graphics | |
parent | 517f3ee41afb7713f1fc6fa37a6f3a6efa97a020 (diff) | |
download | frameworks_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.java | 17 | ||||
-rw-r--r-- | graphics/java/android/graphics/drawable/DrawableWrapper.java | 13 |
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; } } |