Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 11a84b84 authored by Alan Viverette's avatar Alan Viverette
Browse files

Ensure the layer drawable callback is set when loading from theme

Previously we would skip setting the changing configurations and callback
if the drawable had been loaded post-inflation from a theme attribute.

Bug: 30756548
Change-Id: Ia5457723ae8a62506a7562299d3fe78ec21f8030
parent 4ecc9d2d
Loading
Loading
Loading
Loading
+17 −5
Original line number Diff line number Diff line
@@ -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();
        }
    }