summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Alan Viverette <alanv@google.com> 2016-08-24 18:46:58 +0000
committer android-build-merger <android-build-merger@google.com> 2016-08-24 18:46:58 +0000
commitcaf68d03557995f91efb91e2c973eec7fb8f6b7c (patch)
tree350ba166075b2d5784689aaf18a54157327eb00d
parentf19cbf8c871db5f1092a965dc85a1008d8116e16 (diff)
parent3deb906397c0ea64f3c479a7cae31aa06d5c95c5 (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.java22
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();
}
}