From 06318a0869b9f214bc97cabf1d2b6854acb6431b Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Fri, 6 Jun 2014 10:59:55 -0700 Subject: [PATCH] Update drawables to fix CTS test failures Change-Id: I78617aedab450f5bc18807c03d07ee776584ece0 --- .../android/graphics/drawable/BitmapDrawable.java | 15 +++++++++++++++ .../graphics/drawable/GradientDrawable.java | 5 ++++- .../graphics/drawable/NinePatchDrawable.java | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/graphics/java/android/graphics/drawable/BitmapDrawable.java b/graphics/java/android/graphics/drawable/BitmapDrawable.java index c95ac8238d724..ef6c0859f6663 100644 --- a/graphics/java/android/graphics/drawable/BitmapDrawable.java +++ b/graphics/java/android/graphics/drawable/BitmapDrawable.java @@ -706,9 +706,23 @@ 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() + + ": requires a valid src attribute"); + } + } + /** * Updates the constant state from the values in the typed array. */ @@ -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 241b89e2d6b89..005b8efeba32e 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 77ed29a825d34..fea68ee1a4db8 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 {