summaryrefslogtreecommitdiffstats
path: root/graphics/java
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2009-09-13 18:22:19 -0700
committerDianne Hackborn <hackbod@google.com>2009-09-14 16:32:56 -0700
commitc2974809373697147cbe5754835cc871fb93aef1 (patch)
tree89168e34993a97dedd3aedc3bad2d5368e81729d /graphics/java
parente7f47f50ad0a97e32c87104e56f311db910e98f1 (diff)
downloadframeworks_base-c2974809373697147cbe5754835cc871fb93aef1.zip
frameworks_base-c2974809373697147cbe5754835cc871fb93aef1.tar.gz
frameworks_base-c2974809373697147cbe5754835cc871fb93aef1.tar.bz2
Fix issue #2116977: buttons are huge and bent
Now that we are using preloaded drawables in compatibilty mode, when constructing them from their constant state we need to set the new drawable's target density appropriately. Change-Id: I3665cbea09d38b9ac5f45f8c380dc8641f86b266
Diffstat (limited to 'graphics/java')
-rw-r--r--graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java22
-rw-r--r--graphics/java/android/graphics/drawable/AnimationDrawable.java18
-rw-r--r--graphics/java/android/graphics/drawable/BitmapDrawable.java73
-rw-r--r--graphics/java/android/graphics/drawable/ClipDrawable.java23
-rw-r--r--graphics/java/android/graphics/drawable/ColorDrawable.java5
-rw-r--r--graphics/java/android/graphics/drawable/Drawable.java19
-rw-r--r--graphics/java/android/graphics/drawable/DrawableContainer.java10
-rw-r--r--graphics/java/android/graphics/drawable/GradientDrawable.java5
-rw-r--r--graphics/java/android/graphics/drawable/InsetDrawable.java23
-rw-r--r--graphics/java/android/graphics/drawable/LayerDrawable.java27
-rw-r--r--graphics/java/android/graphics/drawable/LevelListDrawable.java17
-rw-r--r--graphics/java/android/graphics/drawable/NinePatchDrawable.java38
-rw-r--r--graphics/java/android/graphics/drawable/RotateDrawable.java21
-rw-r--r--graphics/java/android/graphics/drawable/ScaleDrawable.java23
-rw-r--r--graphics/java/android/graphics/drawable/ShapeDrawable.java5
-rw-r--r--graphics/java/android/graphics/drawable/StateListDrawable.java17
-rw-r--r--graphics/java/android/graphics/drawable/TransitionDrawable.java25
17 files changed, 263 insertions, 108 deletions
diff --git a/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java b/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java
index ac96f20..58206d4 100644
--- a/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java
@@ -45,11 +45,11 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac
private boolean mRunning;
public AnimatedRotateDrawable() {
- this(null);
+ this(null, null);
}
- private AnimatedRotateDrawable(AnimatedRotateState rotateState) {
- mState = new AnimatedRotateState(rotateState, this);
+ private AnimatedRotateDrawable(AnimatedRotateState rotateState, Resources res) {
+ mState = new AnimatedRotateState(rotateState, this, res);
init();
}
@@ -296,9 +296,14 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac
private boolean mCanConstantState;
private boolean mCheckedConstantState;
- public AnimatedRotateState(AnimatedRotateState source, AnimatedRotateDrawable owner) {
+ public AnimatedRotateState(AnimatedRotateState source, AnimatedRotateDrawable owner,
+ Resources res) {
if (source != null) {
- mDrawable = source.mDrawable.getConstantState().newDrawable();
+ if (res != null) {
+ mDrawable = source.mDrawable.getConstantState().newDrawable(res);
+ } else {
+ mDrawable = source.mDrawable.getConstantState().newDrawable();
+ }
mDrawable.setCallback(owner);
mPivotXRel = source.mPivotXRel;
mPivotX = source.mPivotX;
@@ -312,7 +317,12 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac
@Override
public Drawable newDrawable() {
- return new AnimatedRotateDrawable(this);
+ return new AnimatedRotateDrawable(this, null);
+ }
+
+ @Override
+ public Drawable newDrawable(Resources res) {
+ return new AnimatedRotateDrawable(this, res);
}
@Override
diff --git a/graphics/java/android/graphics/drawable/AnimationDrawable.java b/graphics/java/android/graphics/drawable/AnimationDrawable.java
index 68718c9..fdc4c92 100644
--- a/graphics/java/android/graphics/drawable/AnimationDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimationDrawable.java
@@ -77,7 +77,7 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An
private boolean mMutated;
public AnimationDrawable() {
- this(null);
+ this(null, null);
}
@Override
@@ -297,8 +297,9 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An
private int[] mDurations;
private boolean mOneShot;
- AnimationState(AnimationState orig, AnimationDrawable owner) {
- super(orig, owner);
+ AnimationState(AnimationState orig, AnimationDrawable owner,
+ Resources res) {
+ super(orig, owner, res);
if (orig != null) {
mDurations = orig.mDurations;
@@ -311,7 +312,12 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An
@Override
public Drawable newDrawable() {
- return new AnimationDrawable(this);
+ return new AnimationDrawable(this, null);
+ }
+
+ @Override
+ public Drawable newDrawable(Resources res) {
+ return new AnimationDrawable(this, res);
}
public void addFrame(Drawable dr, int dur) {
@@ -330,8 +336,8 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An
}
}
- private AnimationDrawable(AnimationState state) {
- AnimationState as = new AnimationState(state, this);
+ private AnimationDrawable(AnimationState state, Resources res) {
+ AnimationState as = new AnimationState(state, this, res);
mAnimationState = as;
setConstantState(as);
if (state != null) {
diff --git a/graphics/java/android/graphics/drawable/BitmapDrawable.java b/graphics/java/android/graphics/drawable/BitmapDrawable.java
index 30cef67..e82f297 100644
--- a/graphics/java/android/graphics/drawable/BitmapDrawable.java
+++ b/graphics/java/android/graphics/drawable/BitmapDrawable.java
@@ -60,15 +60,15 @@ public class BitmapDrawable extends Drawable {
Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG;
private BitmapState mBitmapState;
private Bitmap mBitmap;
+ private int mTargetDensity;
+
private final Rect mDstRect = new Rect(); // Gravity.apply() sets this
private boolean mApplyGravity;
private boolean mRebuildShader;
private boolean mMutated;
- private int mTargetDensity = DisplayMetrics.DENSITY_DEFAULT;
-
- // These are scaled to match the target density.
+ // These are scaled to match the target density.
private int mBitmapWidth;
private int mBitmapHeight;
@@ -88,10 +88,7 @@ public class BitmapDrawable extends Drawable {
*/
public BitmapDrawable(Resources res) {
mBitmapState = new BitmapState((Bitmap) null);
- if (res != null) {
- setTargetDensity(res.getDisplayMetrics());
- mBitmapState.mTargetDensity = mTargetDensity;
- }
+ mBitmapState.mTargetDensity = mTargetDensity;
}
/**
@@ -101,7 +98,7 @@ public class BitmapDrawable extends Drawable {
*/
@Deprecated
public BitmapDrawable(Bitmap bitmap) {
- this(new BitmapState(bitmap));
+ this(new BitmapState(bitmap), null);
}
/**
@@ -109,22 +106,51 @@ public class BitmapDrawable extends Drawable {
* the display metrics of the resources.
*/
public BitmapDrawable(Resources res, Bitmap bitmap) {
- this(new BitmapState(bitmap));
- if (res != null) {
- setTargetDensity(res.getDisplayMetrics());
- mBitmapState.mTargetDensity = mTargetDensity;
- }
+ this(new BitmapState(bitmap), res);
+ mBitmapState.mTargetDensity = mTargetDensity;
}
+ /**
+ * Create a drawable by opening a given file path and decoding the bitmap.
+ * @deprecated Use {@link #BitmapDrawable(Resources, String)} to ensure
+ * that the drawable has correctly set its target density.
+ */
public BitmapDrawable(String filepath) {
- this(new BitmapState(BitmapFactory.decodeFile(filepath)));
+ this(new BitmapState(BitmapFactory.decodeFile(filepath)), null);
+ if (mBitmap == null) {
+ android.util.Log.w("BitmapDrawable", "BitmapDrawable cannot decode " + filepath);
+ }
+ }
+
+ /**
+ * Create a drawable by opening a given file path and decoding the bitmap.
+ */
+ public BitmapDrawable(Resources res, String filepath) {
+ this(new BitmapState(BitmapFactory.decodeFile(filepath)), null);
+ mBitmapState.mTargetDensity = mTargetDensity;
if (mBitmap == null) {
android.util.Log.w("BitmapDrawable", "BitmapDrawable cannot decode " + filepath);
}
}
+ /**
+ * Create a drawable by decoding a bitmap from the given input stream.
+ * @deprecated Use {@link #BitmapDrawable(Resources, java.io.InputStream)} to ensure
+ * that the drawable has correctly set its target density.
+ */
public BitmapDrawable(java.io.InputStream is) {
- this(new BitmapState(BitmapFactory.decodeStream(is)));
+ this(new BitmapState(BitmapFactory.decodeStream(is)), null);
+ if (mBitmap == null) {
+ android.util.Log.w("BitmapDrawable", "BitmapDrawable cannot decode " + is);
+ }
+ }
+
+ /**
+ * Create a drawable by decoding a bitmap from the given input stream.
+ */
+ public BitmapDrawable(Resources res, java.io.InputStream is) {
+ this(new BitmapState(BitmapFactory.decodeStream(is)), null);
+ mBitmapState.mTargetDensity = mTargetDensity;
if (mBitmap == null) {
android.util.Log.w("BitmapDrawable", "BitmapDrawable cannot decode " + is);
}
@@ -425,7 +451,12 @@ public class BitmapDrawable extends Drawable {
@Override
public Drawable newDrawable() {
- return new BitmapDrawable(this);
+ return new BitmapDrawable(this, null);
+ }
+
+ @Override
+ public Drawable newDrawable(Resources res) {
+ return new BitmapDrawable(this, res);
}
@Override
@@ -434,9 +465,15 @@ public class BitmapDrawable extends Drawable {
}
}
- private BitmapDrawable(BitmapState state) {
+ private BitmapDrawable(BitmapState state, Resources res) {
mBitmapState = state;
- mTargetDensity = state.mTargetDensity;
+ if (res != null) {
+ mTargetDensity = res.getDisplayMetrics().densityDpi;
+ } else if (state != null) {
+ mTargetDensity = state.mTargetDensity;
+ } else {
+ mTargetDensity = DisplayMetrics.DENSITY_DEFAULT;
+ }
setBitmap(state.mBitmap);
}
}
diff --git a/graphics/java/android/graphics/drawable/ClipDrawable.java b/graphics/java/android/graphics/drawable/ClipDrawable.java
index 95d4dd0..c387a9b 100644
--- a/graphics/java/android/graphics/drawable/ClipDrawable.java
+++ b/graphics/java/android/graphics/drawable/ClipDrawable.java
@@ -48,14 +48,14 @@ public class ClipDrawable extends Drawable implements Drawable.Callback {
public static final int VERTICAL = 2;
ClipDrawable() {
- this(null);
+ this(null, null);
}
/**
* @param orientation Bitwise-or of {@link #HORIZONTAL} and/or {@link #VERTICAL}
*/
public ClipDrawable(Drawable drawable, int gravity, int orientation) {
- this(null);
+ this(null, null);
mClipState.mDrawable = drawable;
mClipState.mGravity = gravity;
@@ -241,9 +241,13 @@ public class ClipDrawable extends Drawable implements Drawable.Callback {
private boolean mCheckedConstantState;
private boolean mCanConstantState;
- ClipState(ClipState orig, ClipDrawable owner) {
+ ClipState(ClipState orig, ClipDrawable owner, Resources res) {
if (orig != null) {
- mDrawable = orig.mDrawable.getConstantState().newDrawable();
+ if (res != null) {
+ mDrawable = orig.mDrawable.getConstantState().newDrawable(res);
+ } else {
+ mDrawable = orig.mDrawable.getConstantState().newDrawable();
+ }
mDrawable.setCallback(owner);
mOrientation = orig.mOrientation;
mGravity = orig.mGravity;
@@ -253,7 +257,12 @@ public class ClipDrawable extends Drawable implements Drawable.Callback {
@Override
public Drawable newDrawable() {
- return new ClipDrawable(this);
+ return new ClipDrawable(this, null);
+ }
+
+ @Override
+ public Drawable newDrawable(Resources res) {
+ return new ClipDrawable(this, res);
}
@Override
@@ -271,8 +280,8 @@ public class ClipDrawable extends Drawable implements Drawable.Callback {
}
}
- private ClipDrawable(ClipState state) {
- mClipState = new ClipState(state, this);
+ private ClipDrawable(ClipState state, Resources res) {
+ mClipState = new ClipState(state, this, res);
}
}
diff --git a/graphics/java/android/graphics/drawable/ColorDrawable.java b/graphics/java/android/graphics/drawable/ColorDrawable.java
index 226cc04..604c602 100644
--- a/graphics/java/android/graphics/drawable/ColorDrawable.java
+++ b/graphics/java/android/graphics/drawable/ColorDrawable.java
@@ -146,6 +146,11 @@ public class ColorDrawable extends Drawable {
}
@Override
+ public Drawable newDrawable(Resources res) {
+ return new ColorDrawable(this);
+ }
+
+ @Override
public int getChangingConfigurations() {
return mChangingConfigurations;
}
diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java
index 21b5e39..6a7b2d1 100644
--- a/graphics/java/android/graphics/drawable/Drawable.java
+++ b/graphics/java/android/graphics/drawable/Drawable.java
@@ -822,7 +822,26 @@ public abstract class Drawable {
}
public static abstract class ConstantState {
+ /**
+ * Create a new drawable without supplying resources the caller
+ * is running in. Note that using this means the density-dependent
+ * drawables (like bitmaps) will not be able to update their target
+ * density correctly.
+ */
public abstract Drawable newDrawable();
+ /**
+ * Create a new Drawable instance from its constant state. This
+ * must be implemented for drawables that change based on the target
+ * density of their caller (that is depending on whether it is
+ * in compatibility mode).
+ */
+ public Drawable newDrawable(Resources res) {
+ return newDrawable();
+ }
+ /**
+ * Return a bit mask of configuration changes that will impact
+ * this drawable (and thus require completely reloading it).
+ */
public abstract int getChangingConfigurations();
}
diff --git a/graphics/java/android/graphics/drawable/DrawableContainer.java b/graphics/java/android/graphics/drawable/DrawableContainer.java
index af1a289..3266f1e 100644
--- a/graphics/java/android/graphics/drawable/DrawableContainer.java
+++ b/graphics/java/android/graphics/drawable/DrawableContainer.java
@@ -16,6 +16,7 @@
package android.graphics.drawable;
+import android.content.res.Resources;
import android.graphics.*;
public class DrawableContainer extends Drawable implements Drawable.Callback {
@@ -285,7 +286,8 @@ public class DrawableContainer extends Drawable implements Drawable.Callback {
boolean mPaddingChecked = false;
- DrawableContainerState(DrawableContainerState orig, DrawableContainer owner) {
+ DrawableContainerState(DrawableContainerState orig, DrawableContainer owner,
+ Resources res) {
mOwner = owner;
if (orig != null) {
@@ -299,7 +301,11 @@ public class DrawableContainer extends Drawable implements Drawable.Callback {
final int N = mNumChildren;
for (int i=0; i<N; i++) {
- mDrawables[i] = origDr[i].getConstantState().newDrawable();
+ if (res != null) {
+ mDrawables[i] = origDr[i].getConstantState().newDrawable(res);
+ } else {
+ mDrawables[i] = origDr[i].getConstantState().newDrawable();
+ }
mDrawables[i].setCallback(owner);
}
diff --git a/graphics/java/android/graphics/drawable/GradientDrawable.java b/graphics/java/android/graphics/drawable/GradientDrawable.java
index a7a8708..ddbbaf1 100644
--- a/graphics/java/android/graphics/drawable/GradientDrawable.java
+++ b/graphics/java/android/graphics/drawable/GradientDrawable.java
@@ -917,6 +917,11 @@ public class GradientDrawable extends Drawable {
}
@Override
+ public Drawable newDrawable(Resources res) {
+ return new GradientDrawable(this);
+ }
+
+ @Override
public int getChangingConfigurations() {
return mChangingConfigurations;
}
diff --git a/graphics/java/android/graphics/drawable/InsetDrawable.java b/graphics/java/android/graphics/drawable/InsetDrawable.java
index 6047726..4fa9d44 100644
--- a/graphics/java/android/graphics/drawable/InsetDrawable.java
+++ b/graphics/java/android/graphics/drawable/InsetDrawable.java
@@ -49,7 +49,7 @@ public class InsetDrawable extends Drawable implements Drawable.Callback
private boolean mMutated;
/*package*/ InsetDrawable() {
- this(null);
+ this(null, null);
}
public InsetDrawable(Drawable drawable, int inset) {
@@ -58,7 +58,7 @@ public class InsetDrawable extends Drawable implements Drawable.Callback
public InsetDrawable(Drawable drawable, int insetLeft, int insetTop,
int insetRight, int insetBottom) {
- this(null);
+ this(null, null);
mInsetState.mDrawable = drawable;
mInsetState.mInsetLeft = insetLeft;
@@ -263,9 +263,13 @@ public class InsetDrawable extends Drawable implements Drawable.Callback
boolean mCheckedConstantState;
boolean mCanConstantState;
- InsetState(InsetState orig, InsetDrawable owner) {
+ InsetState(InsetState orig, InsetDrawable owner, Resources res) {
if (orig != null) {
- mDrawable = orig.mDrawable.getConstantState().newDrawable();
+ if (res != null) {
+ mDrawable = orig.mDrawable.getConstantState().newDrawable(res);
+ } else {
+ mDrawable = orig.mDrawable.getConstantState().newDrawable();
+ }
mDrawable.setCallback(owner);
mInsetLeft = orig.mInsetLeft;
mInsetTop = orig.mInsetTop;
@@ -277,7 +281,12 @@ public class InsetDrawable extends Drawable implements Drawable.Callback
@Override
public Drawable newDrawable() {
- return new InsetDrawable(this);
+ return new InsetDrawable(this, null);
+ }
+
+ @Override
+ public Drawable newDrawable(Resources res) {
+ return new InsetDrawable(this, res);
}
@Override
@@ -295,8 +304,8 @@ public class InsetDrawable extends Drawable implements Drawable.Callback
}
}
- private InsetDrawable(InsetState state) {
- mInsetState = new InsetState(state, this);
+ private InsetDrawable(InsetState state, Resources res) {
+ mInsetState = new InsetState(state, this, res);
}
}
diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java
index c777205..389fd40 100644
--- a/graphics/java/android/graphics/drawable/LayerDrawable.java
+++ b/graphics/java/android/graphics/drawable/LayerDrawable.java
@@ -70,7 +70,7 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
* @param state The constant drawable state.
*/
LayerDrawable(Drawable[] layers, LayerState state) {
- this(state);
+ this(state, null);
int length = layers.length;
ChildDrawable[] r = new ChildDrawable[length];
@@ -87,19 +87,19 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
}
LayerDrawable() {
- this((LayerState) null);
+ this((LayerState) null, null);
}
- LayerDrawable(LayerState state) {
- LayerState as = createConstantState(state);
+ LayerDrawable(LayerState state, Resources res) {
+ LayerState as = createConstantState(state, res);
mLayerState = as;
if (as.mNum > 0) {
ensurePadding();
}
}
- LayerState createConstantState(LayerState state) {
- return new LayerState(state, this);
+ LayerState createConstantState(LayerState state, Resources res) {
+ return new LayerState(state, this, res);
}
@Override
@@ -563,7 +563,7 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
private boolean mCheckedConstantState;
private boolean mCanConstantState;
- LayerState(LayerState orig, LayerDrawable owner) {
+ LayerState(LayerState orig, LayerDrawable owner, Resources res) {
if (orig != null) {
final ChildDrawable[] origChildDrawable = orig.mChildren;
final int N = orig.mNum;
@@ -577,7 +577,11 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
for (int i = 0; i < N; i++) {
final ChildDrawable r = mChildren[i] = new ChildDrawable();
final ChildDrawable or = origChildDrawable[i];
- r.mDrawable = or.mDrawable.getConstantState().newDrawable();
+ if (res != null) {
+ r.mDrawable = or.mDrawable.getConstantState().newDrawable(res);
+ } else {
+ r.mDrawable = or.mDrawable.getConstantState().newDrawable();
+ }
r.mDrawable.setCallback(owner);
r.mInsetL = or.mInsetL;
r.mInsetT = or.mInsetT;
@@ -599,7 +603,12 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
@Override
public Drawable newDrawable() {
- return new LayerDrawable(this);
+ return new LayerDrawable(this, null);
+ }
+
+ @Override
+ public Drawable newDrawable(Resources res) {
+ return new LayerDrawable(this, res);
}
@Override
diff --git a/graphics/java/android/graphics/drawable/LevelListDrawable.java b/graphics/java/android/graphics/drawable/LevelListDrawable.java
index 7ae649f..ae8f224 100644
--- a/graphics/java/android/graphics/drawable/LevelListDrawable.java
+++ b/graphics/java/android/graphics/drawable/LevelListDrawable.java
@@ -57,7 +57,7 @@ public class LevelListDrawable extends DrawableContainer {
private boolean mMutated;
public LevelListDrawable() {
- this(null);
+ this(null, null);
}
public void addLevel(int low, int high, Drawable drawable) {
@@ -154,8 +154,8 @@ public class LevelListDrawable extends DrawableContainer {
private int[] mLows;
private int[] mHighs;
- LevelListState(LevelListState orig, LevelListDrawable owner) {
- super(orig, owner);
+ LevelListState(LevelListState orig, LevelListDrawable owner, Resources res) {
+ super(orig, owner, res);
if (orig != null) {
mLows = orig.mLows;
@@ -186,7 +186,12 @@ public class LevelListDrawable extends DrawableContainer {
@Override
public Drawable newDrawable() {
- return new LevelListDrawable(this);
+ return new LevelListDrawable(this, null);
+ }
+
+ @Override
+ public Drawable newDrawable(Resources res) {
+ return new LevelListDrawable(this, res);
}
@Override
@@ -201,8 +206,8 @@ public class LevelListDrawable extends DrawableContainer {
}
}
- private LevelListDrawable(LevelListState state) {
- LevelListState as = new LevelListState(state, this);
+ private LevelListDrawable(LevelListState state, Resources res) {
+ LevelListState as = new LevelListState(state, this, res);
mLevelListState = as;
setConstantState(as);
onLevelChange(getLevel());
diff --git a/graphics/java/android/graphics/drawable/NinePatchDrawable.java b/graphics/java/android/graphics/drawable/NinePatchDrawable.java
index 997efb8..803e7b1 100644
--- a/graphics/java/android/graphics/drawable/NinePatchDrawable.java
+++ b/graphics/java/android/graphics/drawable/NinePatchDrawable.java
@@ -61,7 +61,7 @@ public class NinePatchDrawable extends Drawable {
*/
@Deprecated
public NinePatchDrawable(Bitmap bitmap, byte[] chunk, Rect padding, String srcName) {
- this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding));
+ this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding), null);
}
/**
@@ -70,11 +70,8 @@ public class NinePatchDrawable extends Drawable {
*/
public NinePatchDrawable(Resources res, Bitmap bitmap, byte[] chunk,
Rect padding, String srcName) {
- this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding));
- if (res != null) {
- setTargetDensity(res.getDisplayMetrics());
- mNinePatchState.mTargetDensity = mTargetDensity;
- }
+ this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding), res);
+ mNinePatchState.mTargetDensity = mTargetDensity;
}
/**
@@ -84,7 +81,7 @@ public class NinePatchDrawable extends Drawable {
*/
@Deprecated
public NinePatchDrawable(NinePatch patch) {
- this(new NinePatchState(patch, null));
+ this(new NinePatchState(patch, null), null);
}
/**
@@ -92,18 +89,16 @@ public class NinePatchDrawable extends Drawable {
* based on the display metrics of the resources.
*/
public NinePatchDrawable(Resources res, NinePatch patch) {
- this(new NinePatchState(patch, null));
- if (res != null) {
- setTargetDensity(res.getDisplayMetrics());
- mNinePatchState.mTargetDensity = mTargetDensity;
- }
+ this(new NinePatchState(patch, null), res);
+ mNinePatchState.mTargetDensity = mTargetDensity;
}
- private void setNinePatchState(NinePatchState state) {
+ private void setNinePatchState(NinePatchState state, Resources res) {
mNinePatchState = state;
mNinePatch = state.mNinePatch;
mPadding = state.mPadding;
- mTargetDensity = state.mTargetDensity;
+ mTargetDensity = res != null ? res.getDisplayMetrics().densityDpi
+ : state.mTargetDensity;
if (DEFAULT_DITHER != state.mDither) {
// avoid calling the setter unless we need to, since it does a
// lazy allocation of a paint
@@ -258,7 +253,8 @@ public class NinePatchDrawable extends Drawable {
}
setNinePatchState(new NinePatchState(
- new NinePatch(bitmap, bitmap.getNinePatchChunk(), "XML 9-patch"), padding, dither));
+ new NinePatch(bitmap, bitmap.getNinePatchChunk(), "XML 9-patch"),
+ padding, dither), r);
mNinePatchState.mTargetDensity = mTargetDensity;
a.recycle();
@@ -357,7 +353,12 @@ public class NinePatchDrawable extends Drawable {
@Override
public Drawable newDrawable() {
- return new NinePatchDrawable(this);
+ return new NinePatchDrawable(this, null);
+ }
+
+ @Override
+ public Drawable newDrawable(Resources res) {
+ return new NinePatchDrawable(this, res);
}
@Override
@@ -366,8 +367,7 @@ public class NinePatchDrawable extends Drawable {
}
}
- private NinePatchDrawable(NinePatchState state) {
- setNinePatchState(state);
+ private NinePatchDrawable(NinePatchState state, Resources res) {
+ setNinePatchState(state, res);
}
}
-
diff --git a/graphics/java/android/graphics/drawable/RotateDrawable.java b/graphics/java/android/graphics/drawable/RotateDrawable.java
index cb16cb7..c4a7822 100644
--- a/graphics/java/android/graphics/drawable/RotateDrawable.java
+++ b/graphics/java/android/graphics/drawable/RotateDrawable.java
@@ -54,7 +54,7 @@ public class RotateDrawable extends Drawable implements Drawable.Callback {
* <p>Create a new rotating drawable with an empty state.</p>
*/
public RotateDrawable() {
- this(null);
+ this(null, null);
}
/**
@@ -64,8 +64,8 @@ public class RotateDrawable extends Drawable implements Drawable.Callback {
*
* @param rotateState the state for this drawable
*/
- private RotateDrawable(RotateState rotateState) {
- mState = new RotateState(rotateState, this);
+ private RotateDrawable(RotateState rotateState, Resources res) {
+ mState = new RotateState(rotateState, this, res);
}
public void draw(Canvas canvas) {
@@ -291,9 +291,13 @@ public class RotateDrawable extends Drawable implements Drawable.Callback {
private boolean mCanConstantState;
private boolean mCheckedConstantState;
- public RotateState(RotateState source, RotateDrawable owner) {
+ public RotateState(RotateState source, RotateDrawable owner, Resources res) {
if (source != null) {
- mDrawable = source.mDrawable.getConstantState().newDrawable();
+ if (res != null) {
+ mDrawable = source.mDrawable.getConstantState().newDrawable(res);
+ } else {
+ mDrawable = source.mDrawable.getConstantState().newDrawable();
+ }
mDrawable.setCallback(owner);
mPivotXRel = source.mPivotXRel;
mPivotX = source.mPivotX;
@@ -307,7 +311,12 @@ public class RotateDrawable extends Drawable implements Drawable.Callback {
@Override
public Drawable newDrawable() {
- return new RotateDrawable(this);
+ return new RotateDrawable(this, null);
+ }
+
+ @Override
+ public Drawable newDrawable(Resources res) {
+ return new RotateDrawable(this, res);
}
@Override
diff --git a/graphics/java/android/graphics/drawable/ScaleDrawable.java b/graphics/java/android/graphics/drawable/ScaleDrawable.java
index 7125ab1..275e36f 100644
--- a/graphics/java/android/graphics/drawable/ScaleDrawable.java
+++ b/graphics/java/android/graphics/drawable/ScaleDrawable.java
@@ -47,11 +47,11 @@ public class ScaleDrawable extends Drawable implements Drawable.Callback {
private final Rect mTmpRect = new Rect();
ScaleDrawable() {
- this(null);
+ this(null, null);
}
public ScaleDrawable(Drawable drawable, int gravity, float scaleWidth, float scaleHeight) {
- this(null);
+ this(null, null);
mScaleState.mDrawable = drawable;
mScaleState.mGravity = gravity;
@@ -260,9 +260,13 @@ public class ScaleDrawable extends Drawable implements Drawable.Callback {
private boolean mCheckedConstantState;
private boolean mCanConstantState;
- ScaleState(ScaleState orig, ScaleDrawable owner) {
+ ScaleState(ScaleState orig, ScaleDrawable owner, Resources res) {
if (orig != null) {
- mDrawable = orig.mDrawable.getConstantState().newDrawable();
+ if (res != null) {
+ mDrawable = orig.mDrawable.getConstantState().newDrawable(res);
+ } else {
+ mDrawable = orig.mDrawable.getConstantState().newDrawable();
+ }
mDrawable.setCallback(owner);
mScaleWidth = orig.mScaleWidth;
mScaleHeight = orig.mScaleHeight;
@@ -273,7 +277,12 @@ public class ScaleDrawable extends Drawable implements Drawable.Callback {
@Override
public Drawable newDrawable() {
- return new ScaleDrawable(this);
+ return new ScaleDrawable(this, null);
+ }
+
+ @Override
+ public Drawable newDrawable(Resources res) {
+ return new ScaleDrawable(this, res);
}
@Override
@@ -291,8 +300,8 @@ public class ScaleDrawable extends Drawable implements Drawable.Callback {
}
}
- private ScaleDrawable(ScaleState state) {
- mScaleState = new ScaleState(state, this);
+ private ScaleDrawable(ScaleState state, Resources res) {
+ mScaleState = new ScaleState(state, this, res);
}
}
diff --git a/graphics/java/android/graphics/drawable/ShapeDrawable.java b/graphics/java/android/graphics/drawable/ShapeDrawable.java
index 6677a35..c699a82 100644
--- a/graphics/java/android/graphics/drawable/ShapeDrawable.java
+++ b/graphics/java/android/graphics/drawable/ShapeDrawable.java
@@ -396,6 +396,11 @@ public class ShapeDrawable extends Drawable {
}
@Override
+ public Drawable newDrawable(Resources res) {
+ return new ShapeDrawable(this);
+ }
+
+ @Override
public int getChangingConfigurations() {
return mChangingConfigurations;
}
diff --git a/graphics/java/android/graphics/drawable/StateListDrawable.java b/graphics/java/android/graphics/drawable/StateListDrawable.java
index 59cb226..b1d588e 100644
--- a/graphics/java/android/graphics/drawable/StateListDrawable.java
+++ b/graphics/java/android/graphics/drawable/StateListDrawable.java
@@ -65,7 +65,7 @@ public class StateListDrawable extends DrawableContainer {
private boolean mMutated;
public StateListDrawable() {
- this(null);
+ this(null, null);
}
/**
@@ -248,8 +248,8 @@ public class StateListDrawable extends DrawableContainer {
static final class StateListState extends DrawableContainerState {
private int[][] mStateSets;
- StateListState(StateListState orig, StateListDrawable owner) {
- super(orig, owner);
+ StateListState(StateListState orig, StateListDrawable owner, Resources res) {
+ super(orig, owner, res);
if (orig != null) {
mStateSets = orig.mStateSets;
@@ -277,7 +277,12 @@ public class StateListDrawable extends DrawableContainer {
@Override
public Drawable newDrawable() {
- return new StateListDrawable(this);
+ return new StateListDrawable(this, null);
+ }
+
+ @Override
+ public Drawable newDrawable(Resources res) {
+ return new StateListDrawable(this, res);
}
@Override
@@ -289,8 +294,8 @@ public class StateListDrawable extends DrawableContainer {
}
}
- private StateListDrawable(StateListState state) {
- StateListState as = new StateListState(state, this);
+ private StateListDrawable(StateListState state, Resources res) {
+ StateListState as = new StateListState(state, this, res);
mStateListState = as;
setConstantState(as);
onStateChange(getState());
diff --git a/graphics/java/android/graphics/drawable/TransitionDrawable.java b/graphics/java/android/graphics/drawable/TransitionDrawable.java
index 358f889..97b45d8 100644
--- a/graphics/java/android/graphics/drawable/TransitionDrawable.java
+++ b/graphics/java/android/graphics/drawable/TransitionDrawable.java
@@ -16,6 +16,7 @@
package android.graphics.drawable;
+import android.content.res.Resources;
import android.graphics.Canvas;
import android.os.SystemClock;
@@ -72,7 +73,7 @@ public class TransitionDrawable extends LayerDrawable implements Drawable.Callba
* 2 layers are required for this drawable to work properly.
*/
public TransitionDrawable(Drawable[] layers) {
- this(new TransitionState(null, null), layers);
+ this(new TransitionState(null, null, null), layers);
}
/**
@@ -82,11 +83,11 @@ public class TransitionDrawable extends LayerDrawable implements Drawable.Callba
* @see #TransitionDrawable(Drawable[])
*/
TransitionDrawable() {
- this(new TransitionState(null, null));
+ this(new TransitionState(null, null, null), (Resources)null);
}
- private TransitionDrawable(TransitionState state) {
- super(state);
+ private TransitionDrawable(TransitionState state, Resources res) {
+ super(state, res);
}
private TransitionDrawable(TransitionState state, Drawable[] layers) {
@@ -94,8 +95,8 @@ public class TransitionDrawable extends LayerDrawable implements Drawable.Callba
}
@Override
- LayerState createConstantState(LayerState state) {
- return new TransitionState((TransitionState) state, this);
+ LayerState createConstantState(LayerState state, Resources res) {
+ return new TransitionState((TransitionState) state, this, res);
}
/**
@@ -229,13 +230,19 @@ public class TransitionDrawable extends LayerDrawable implements Drawable.Callba
}
static class TransitionState extends LayerState {
- TransitionState(TransitionState orig, TransitionDrawable owner) {
- super(orig, owner);
+ TransitionState(TransitionState orig, TransitionDrawable owner,
+ Resources res) {
+ super(orig, owner, res);
}
@Override
public Drawable newDrawable() {
- return new TransitionDrawable(this);
+ return new TransitionDrawable(this, (Resources)null);
+ }
+
+ @Override
+ public Drawable newDrawable(Resources res) {
+ return new TransitionDrawable(this, res);
}
@Override