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

Commit 0a9614f5 authored by Alan Viverette's avatar Alan Viverette
Browse files

Throw exception when inset drawable is missing drawable attribute

BUG: 17068252
Change-Id: Id9c9791501ce9d56fdd67236c84775550c89032c
parent 4473ec5a
Loading
Loading
Loading
Loading
+21 −14
Original line number Diff line number Diff line
@@ -26,10 +26,13 @@ import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.Resources.Theme;
import android.graphics.*;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Insets;
import android.graphics.Outline;
import android.graphics.PorterDuff.Mode;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.Log;

import java.io.IOException;

@@ -50,8 +53,6 @@ import java.io.IOException;
 * @attr ref android.R.styleable#InsetDrawable_insetBottom
 */
public class InsetDrawable extends Drawable implements Drawable.Callback {
    private static final String LOG_TAG = "InsetDrawable";

    private final Rect mTmpRect = new Rect();

    private InsetState mInsetState;
@@ -86,7 +87,6 @@ public class InsetDrawable extends Drawable implements Drawable.Callback {
        final TypedArray a = r.obtainAttributes(attrs, R.styleable.InsetDrawable);
        super.inflateWithAttributes(r, parser, a, R.styleable.InsetDrawable_visible);
        updateStateFromTypedArray(a);
        a.recycle();

        // Load inner XML elements.
        if (mInsetState.mDrawable == null) {
@@ -104,9 +104,19 @@ public class InsetDrawable extends Drawable implements Drawable.Callback {
            dr.setCallback(this);
        }

        // Verify state.
        if (mInsetState.mDrawable == null) {
            Log.w(LOG_TAG, "No drawable specified for <inset>");
        verifyRequiredAttributes(a);
        a.recycle();
    }

    private void verifyRequiredAttributes(TypedArray a) throws XmlPullParserException {
        // If we're not waiting on a theme, verify required attributes.
        if (mInsetState.mThemeAttrs == null) {
            if (mInsetState.mThemeAttrs[R.styleable.InsetDrawable_drawable] != 0
                    && mInsetState.mDrawable == null) {
                throw new XmlPullParserException(a.getPositionDescription() +
                        ": <inset> tag requires a 'drawable' attribute or "
                        + "child tag defining a drawable");
            }
        }
    }

@@ -167,6 +177,7 @@ public class InsetDrawable extends Drawable implements Drawable.Callback {
        final TypedArray a = t.resolveAttributes(state.mThemeAttrs, R.styleable.InsetDrawable);
        try {
            updateStateFromTypedArray(a);
            verifyRequiredAttributes(a);
        } catch (XmlPullParserException e) {
            throw new RuntimeException(e);
        } finally {
@@ -224,12 +235,8 @@ public class InsetDrawable extends Drawable implements Drawable.Callback {
        padding.top += mInsetState.mInsetTop;
        padding.bottom += mInsetState.mInsetBottom;

        if (pad || (mInsetState.mInsetLeft | mInsetState.mInsetRight |
                    mInsetState.mInsetTop | mInsetState.mInsetBottom) != 0) {
            return true;
        } else {
            return false;
        }
        return pad || (mInsetState.mInsetLeft | mInsetState.mInsetRight |
                mInsetState.mInsetTop | mInsetState.mInsetBottom) != 0;
    }

    /** @hide */