diff options
| author | 2014-06-06 10:59:55 -0700 | |
|---|---|---|
| committer | 2014-06-06 10:59:55 -0700 | |
| commit | 06318a0869b9f214bc97cabf1d2b6854acb6431b (patch) | |
| tree | 996f922d6c756ab2d8d9435a0ec0f1140df07ad5 | |
| parent | f98a3c020d0354237e10a6a9f265e8b827357725 (diff) | |
Update drawables to fix CTS test failures
Change-Id: I78617aedab450f5bc18807c03d07ee776584ece0
3 files changed, 20 insertions, 1 deletions
diff --git a/graphics/java/android/graphics/drawable/BitmapDrawable.java b/graphics/java/android/graphics/drawable/BitmapDrawable.java index c95ac8238d72..ef6c0859f666 100644 --- a/graphics/java/android/graphics/drawable/BitmapDrawable.java +++ b/graphics/java/android/graphics/drawable/BitmapDrawable.java @@ -706,10 +706,24 @@ public class BitmapDrawable extends Drawable { final TypedArray a = obtainAttributes(r, theme, attrs, R.styleable.BitmapDrawable); updateStateFromTypedArray(a); + verifyState(a); a.recycle(); } /** + * Ensures all required attributes are set. + * + * @throws XmlPullParserException if any required attributes are missing + */ + private void verifyState(TypedArray a) throws XmlPullParserException { + final BitmapState state = mBitmapState; + if (state.mBitmap == null) { + throw new XmlPullParserException(a.getPositionDescription() + + ": <bitmap> requires a valid src attribute"); + } + } + + /** * Updates the constant state from the values in the typed array. */ private void updateStateFromTypedArray(TypedArray a) throws XmlPullParserException { @@ -912,6 +926,7 @@ public class BitmapDrawable extends Drawable { */ private BitmapDrawable(BitmapState state, Resources res, Theme theme) { if (theme != null && state.canApplyTheme()) { + // If we need to apply a theme, implicitly mutate. mBitmapState = new BitmapState(state); applyTheme(theme); } else { diff --git a/graphics/java/android/graphics/drawable/GradientDrawable.java b/graphics/java/android/graphics/drawable/GradientDrawable.java index 241b89e2d6b8..005b8efeba32 100644 --- a/graphics/java/android/graphics/drawable/GradientDrawable.java +++ b/graphics/java/android/graphics/drawable/GradientDrawable.java @@ -1662,9 +1662,12 @@ public class GradientDrawable extends Drawable { * @param theme Theme to apply to the drawable */ private GradientDrawable(GradientState state, Theme theme) { - mGradientState = new GradientState(state); if (theme != null && state.canApplyTheme()) { + // If we need to apply a theme, implicitly mutate. + mGradientState = new GradientState(state); applyTheme(theme); + } else { + mGradientState = state; } initializeWithState(state); diff --git a/graphics/java/android/graphics/drawable/NinePatchDrawable.java b/graphics/java/android/graphics/drawable/NinePatchDrawable.java index 77ed29a825d3..fea68ee1a4db 100644 --- a/graphics/java/android/graphics/drawable/NinePatchDrawable.java +++ b/graphics/java/android/graphics/drawable/NinePatchDrawable.java @@ -659,6 +659,7 @@ public class NinePatchDrawable extends Drawable { */ private NinePatchDrawable(NinePatchState state, Resources res, Theme theme) { if (theme != null && state.canApplyTheme()) { + // If we need to apply a theme, implicitly mutate. mNinePatchState = new NinePatchState(state); applyTheme(theme); } else { |