diff options
| author | 2014-10-30 17:38:39 +0000 | |
|---|---|---|
| committer | 2014-10-30 17:38:40 +0000 | |
| commit | 272e2f73bd825aa6b1db0a5b332effe8b84d7b8c (patch) | |
| tree | 65292d3d68ee32d14ccb653d6a34367460d2f8bb | |
| parent | e0a3bcfbe1637db8584b176a67447f152716036f (diff) | |
| parent | 7f4a63d1ebc13c6499a48331ecb78c4d27446dbc (diff) | |
Merge "Ensure we don't pass null values in to Theme.resolveAttributes" into lmp-mr1-dev
5 files changed, 22 insertions, 17 deletions
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java index 6e9efe1fdc1b..0145e05a86e4 100644 --- a/core/java/android/content/res/Resources.java +++ b/core/java/android/content/res/Resources.java @@ -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); diff --git a/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java b/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java index 3b125fdc8051..5a3a6177d586 100644 --- a/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java +++ b/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java @@ -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; } diff --git a/graphics/java/android/graphics/drawable/ClipDrawable.java b/graphics/java/android/graphics/drawable/ClipDrawable.java index f80a5f41075a..e5b2b768cd16 100644 --- a/graphics/java/android/graphics/drawable/ClipDrawable.java +++ b/graphics/java/android/graphics/drawable/ClipDrawable.java @@ -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; } diff --git a/graphics/java/android/graphics/drawable/RotateDrawable.java b/graphics/java/android/graphics/drawable/RotateDrawable.java index 9208a0a78bb5..3304b335ac45 100644 --- a/graphics/java/android/graphics/drawable/RotateDrawable.java +++ b/graphics/java/android/graphics/drawable/RotateDrawable.java @@ -427,19 +427,22 @@ public class RotateDrawable extends Drawable implements Drawable.Callback { return; } - final TypedArray a = t.resolveAttributes(state.mThemeAttrs, R.styleable.RotateDrawable); - try { - updateStateFromTypedArray(a); - verifyRequiredAttributes(a); - } catch (XmlPullParserException e) { - throw new RuntimeException(e); - } finally { - a.recycle(); + if (state.mThemeAttrs != null) { + final TypedArray a = t.resolveAttributes(state.mThemeAttrs, R.styleable.RotateDrawable); + try { + updateStateFromTypedArray(a); + verifyRequiredAttributes(a); + } catch (XmlPullParserException e) { + throw new RuntimeException(e); + } finally { + a.recycle(); + } } if (state.mDrawable != null && state.mDrawable.canApplyTheme()) { state.mDrawable.applyTheme(t); } + } private void inflateChildElements(Resources r, XmlPullParser parser, AttributeSet attrs, diff --git a/graphics/java/android/graphics/drawable/ScaleDrawable.java b/graphics/java/android/graphics/drawable/ScaleDrawable.java index fbe38b44a79b..35ef76f81d0b 100644 --- a/graphics/java/android/graphics/drawable/ScaleDrawable.java +++ b/graphics/java/android/graphics/drawable/ScaleDrawable.java @@ -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); |