diff options
| author | 2016-08-24 18:46:58 +0000 | |
|---|---|---|
| committer | 2016-08-24 18:46:58 +0000 | |
| commit | caf68d03557995f91efb91e2c973eec7fb8f6b7c (patch) | |
| tree | 350ba166075b2d5784689aaf18a54157327eb00d | |
| parent | f19cbf8c871db5f1092a965dc85a1008d8116e16 (diff) | |
| parent | 3deb906397c0ea64f3c479a7cae31aa06d5c95c5 (diff) | |
Ensure the layer drawable callback is set when loading from theme am: 11a84b8429
am: 3deb906397
Change-Id: I31e90f3871f4612fe74cbdabc49fde94a8940d83
| -rw-r--r-- | graphics/java/android/graphics/drawable/LayerDrawable.java | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java index 1864206118b2..c30c4c2f02d6 100644 --- a/graphics/java/android/graphics/drawable/LayerDrawable.java +++ b/graphics/java/android/graphics/drawable/LayerDrawable.java @@ -269,7 +269,8 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { // If the layer doesn't have a drawable or unresolved theme // attribute for a drawable, attempt to parse one from the child - // element. + // element. If multiple child elements exist, we'll only use the + // first one. if (layer.mDrawable == null && (layer.mThemeAttrs == null || layer.mThemeAttrs[R.styleable.LayerDrawableItem_drawable] == 0)) { while ((type = parser.next()) == XmlPullParser.TEXT) { @@ -279,13 +280,12 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { + ": <item> tag requires a 'drawable' attribute or " + "child tag defining a drawable"); } - layer.mDrawable = Drawable.createFromXmlInner(r, parser, attrs, theme); - } - if (layer.mDrawable != null) { + // We found a child drawable. Take ownership. + layer.mDrawable = Drawable.createFromXmlInner(r, parser, attrs, theme); + layer.mDrawable.setCallback(this); state.mChildrenChangingConfigurations |= layer.mDrawable.getChangingConfigurations(); - layer.mDrawable.setCallback(this); } addLayer(layer); @@ -387,7 +387,19 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { final Drawable dr = a.getDrawable(R.styleable.LayerDrawableItem_drawable); if (dr != null) { + if (layer.mDrawable != null) { + // It's possible that a drawable was already set, in which case + // we should clear the callback. We may have also integrated the + // drawable's changing configurations, but we don't have enough + // information to revert that change. + layer.mDrawable.setCallback(null); + } + + // Take ownership of the new drawable. layer.mDrawable = dr; + layer.mDrawable.setCallback(this); + state.mChildrenChangingConfigurations |= + layer.mDrawable.getChangingConfigurations(); } } |