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

Commit 0cc96d38 authored by Alan Viverette's avatar Alan Viverette Committed by The Android Automerger
Browse files

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

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


import android.animation.Animator;
import android.animation.Animator;
import android.animation.StateListAnimator;
import android.animation.StateListAnimator;
import android.annotation.NonNull;
import android.util.Pools.SynchronizedPool;
import android.util.Pools.SynchronizedPool;
import android.view.ViewDebug;
import android.view.ViewDebug;
import com.android.internal.util.XmlUtils;
import com.android.internal.util.XmlUtils;
@@ -1548,20 +1549,21 @@ public class Resources {
         * contents of the typed array are ultimately filled in by
         * contents of the typed array are ultimately filled in by
         * {@link Resources#getValue}.
         * {@link Resources#getValue}.
         *
         *
         * @param values The base set of attribute values, must be equal
         * @param values The base set of attribute values, must be equal in
         *               in length to {@code attrs} or {@code null}. All values
         *               length to {@code attrs}. All values must be of type
         *               must be of type {@link TypedValue#TYPE_ATTRIBUTE}.
         *               {@link TypedValue#TYPE_ATTRIBUTE}.
         * @param attrs The desired attributes to be retrieved.
         * @param attrs The desired attributes to be retrieved.
         * @return Returns a TypedArray holding an array of the attribute
         * @return Returns a TypedArray holding an array of the attribute
         *         values. Be sure to call {@link TypedArray#recycle()}
         *         values. Be sure to call {@link TypedArray#recycle()}
         *         when done with it.
         *         when done with it.
         * @hide
         * @hide
         */
         */
        public TypedArray resolveAttributes(int[] values, int[] attrs) {
        @NonNull
        public TypedArray resolveAttributes(@NonNull int[] values, @NonNull int[] attrs) {
            final int len = attrs.length;
            final int len = attrs.length;
            if (values != null && len != values.length) {
            if (values == null || len != values.length) {
                throw new IllegalArgumentException(
                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);
            final TypedArray array = TypedArray.obtain(Resources.this, len);
+1 −1
Original line number Original line Diff line number Diff line
@@ -361,7 +361,7 @@ public class AnimatedStateListDrawable extends StateListDrawable {
        super.applyTheme(theme);
        super.applyTheme(theme);


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


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


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


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


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


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

    }
    }


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


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