diff options
author | Alan Viverette <alanv@google.com> | 2014-06-06 10:59:55 -0700 |
---|---|---|
committer | Alan Viverette <alanv@google.com> | 2014-06-06 10:59:55 -0700 |
commit | 06318a0869b9f214bc97cabf1d2b6854acb6431b (patch) | |
tree | 996f922d6c756ab2d8d9435a0ec0f1140df07ad5 /graphics | |
parent | f98a3c020d0354237e10a6a9f265e8b827357725 (diff) | |
download | frameworks_base-06318a0869b9f214bc97cabf1d2b6854acb6431b.zip frameworks_base-06318a0869b9f214bc97cabf1d2b6854acb6431b.tar.gz frameworks_base-06318a0869b9f214bc97cabf1d2b6854acb6431b.tar.bz2 |
Update drawables to fix CTS test failures
Change-Id: I78617aedab450f5bc18807c03d07ee776584ece0
Diffstat (limited to 'graphics')
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 c95ac82..ef6c085 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 241b89e..005b8ef 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 77ed29a..fea68ee 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 { |