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

Commit 7f4a63d1 authored by Alan Viverette's avatar Alan Viverette
Browse files

Ensure we don't pass null values in to Theme.resolveAttributes

BUG: 18182274
Change-Id: I08acf877cb81478cc205254edf92a31fcf05991d
parent 674a3a21
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.content.res;

import android.animation.Animator;
import android.animation.StateListAnimator;
import android.annotation.NonNull;
import android.util.Pools.SynchronizedPool;
import android.view.ViewDebug;
import com.android.internal.util.XmlUtils;
@@ -1548,20 +1549,21 @@ public class Resources {
         * contents of the typed array are ultimately filled in by
         * {@link Resources#getValue}.
         *
         * @param values The base set of attribute values, must be equal
         *               in length to {@code attrs} or {@code null}. All values
         *               must be of type {@link TypedValue#TYPE_ATTRIBUTE}.
         * @param values The base set of attribute values, must be equal in
         *               length to {@code attrs}. All values must be of type
         *               {@link TypedValue#TYPE_ATTRIBUTE}.
         * @param attrs The desired attributes to be retrieved.
         * @return Returns a TypedArray holding an array of the attribute
         *         values. Be sure to call {@link TypedArray#recycle()}
         *         when done with it.
         * @hide
         */
        public TypedArray resolveAttributes(int[] values, int[] attrs) {
        @NonNull
        public TypedArray resolveAttributes(@NonNull int[] values, @NonNull int[] attrs) {
            final int len = attrs.length;
            if (values != null && len != values.length) {
            if (values == null || len != values.length) {
                throw new IllegalArgumentException(
                        "Base attribute values must be null or the same length as attrs");
                        "Base attribute values must the same length as attrs");
            }

            final TypedArray array = TypedArray.obtain(Resources.this, len);
+1 −1
Original line number Diff line number Diff line
@@ -361,7 +361,7 @@ public class AnimatedStateListDrawable extends StateListDrawable {
        super.applyTheme(theme);

        final AnimatedStateListState state = mState;
        if (state == null || !state.canApplyTheme()) {
        if (state == null || state.mAnimThemeAttrs == null) {
            return;
        }

+1 −1
Original line number Diff line number Diff line
@@ -148,7 +148,7 @@ public class ClipDrawable extends Drawable implements Drawable.Callback {
        super.applyTheme(t);

        final ClipState state = mState;
        if (state == null) {
        if (state == null || state.mThemeAttrs == null) {
            return;
        }

+11 −8
Original line number Diff line number Diff line
@@ -427,6 +427,7 @@ public class RotateDrawable extends Drawable implements Drawable.Callback {
            return;
        }

        if (state.mThemeAttrs != null) {
            final TypedArray a = t.resolveAttributes(state.mThemeAttrs, R.styleable.RotateDrawable);
            try {
                updateStateFromTypedArray(a);
@@ -436,10 +437,12 @@ public class RotateDrawable extends Drawable implements Drawable.Callback {
            } finally {
                a.recycle();
            }
        }

        if (state.mDrawable != null && state.mDrawable.canApplyTheme()) {
            state.mDrawable.applyTheme(t);
        }

    }

    private void inflateChildElements(Resources r, XmlPullParser parser, AttributeSet attrs,
+1 −1
Original line number Diff line number Diff line
@@ -114,7 +114,7 @@ public class ScaleDrawable extends Drawable implements Drawable.Callback {
            return;
        }

        if (state.mThemeAttrs == null) {
        if (state.mThemeAttrs != null) {
            final TypedArray a = t.resolveAttributes(state.mThemeAttrs, R.styleable.ScaleDrawable);
            try {
                updateStateFromTypedArray(a);