am 272e2f73: Merge "Ensure we don\'t pass null values in to Theme.resolveAttributes" into lmp-mr1-dev

* commit '272e2f73bd825aa6b1db0a5b332effe8b84d7b8c':
  Ensure we don't pass null values in to Theme.resolveAttributes
This commit is contained in:
Alan Viverette
2014-10-30 17:43:27 +00:00
committed by Android Git Automerger
5 changed files with 22 additions and 17 deletions

View File

@@ -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);

View File

@@ -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;
} }

View File

@@ -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;
} }

View File

@@ -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,

View File

@@ -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);