diff options
| author | Alan Viverette <alanv@google.com> | 2014-01-13 12:59:50 -0800 |
|---|---|---|
| committer | Alan Viverette <alanv@google.com> | 2014-01-13 12:59:50 -0800 |
| commit | ee779ea446dd1161ba2fc50356edd5722454f141 (patch) | |
| tree | 5388af6c5e3b9ff128dc9228a25c04a5e1ad2fe8 | |
| parent | f634bc0ff507ebbaae5a8eaed52efa5706fc0208 (diff) | |
Fixing LayerDrawable methods for find layer and invalidate
BUG: 12475487
BUG: 12475575
Change-Id: I98eb2674a5090a20cae1cd69db6022859dcab36c
| -rw-r--r-- | graphics/java/android/graphics/drawable/LayerDrawable.java | 66 |
1 files changed, 17 insertions, 49 deletions
diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java index 51c183f582be..e8b3f64989b5 100644 --- a/graphics/java/android/graphics/drawable/LayerDrawable.java +++ b/graphics/java/android/graphics/drawable/LayerDrawable.java @@ -64,10 +64,8 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { private int[] mPaddingR; private int[] mPaddingB; - private final Rect mCachedPadding = new Rect(); private final Rect mTmpRect = new Rect(); private boolean mMutated; - private boolean mHasCachedPadding; /** * Create a new layer drawable with the list of specified layers. @@ -229,15 +227,18 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { } /** - * Look for a layer with the given id, and returns its {@link Drawable}. + * Looks for a layer with the given ID and returns its {@link Drawable}. + * <p> + * If multiple layers are found for the given ID, returns the + * {@link Drawable} for the matching layer at the highest index. * * @param id The layer ID to search for. - * @return The {@link Drawable} of the layer that has the given id in the hierarchy or null. + * @return The {@link Drawable} for the highest-indexed layer that has the + * given ID, or null if not found. */ public Drawable findDrawableByLayerId(int id) { final ChildDrawable[] layers = mLayerState.mChildren; - final int N = mLayerState.mNum; - for (int i = 0; i < N; i++) { + for (int i = mLayerState.mNum - 1; i >= 0; i--) { if (layers[i].mId == id) { return layers[i].mDrawable; } @@ -314,11 +315,6 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { } childDrawable.mDrawable = drawable; - - if (refreshChildPadding(i, childDrawable)) { - invalidatePadding(); - } - return true; } } @@ -328,7 +324,6 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { /** * Specifies the insets in pixels for the drawable at the specified index. - * Insets are used to adjust the drawable bounds. * * @param index the index of the drawable to adjust * @param l number of pixels to add to the left bound @@ -342,7 +337,6 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { childDrawable.mInsetT = t; childDrawable.mInsetR = r; childDrawable.mInsetB = b; - invalidatePadding(); } /** @@ -351,14 +345,12 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { * * @param mode padding mode, one of: * <ul> - * <li>{@link #PADDING_MODE_NEST} - * <li>{@link #PADDING_MODE_STACK} + * <li>{@link #PADDING_MODE_NEST} <li>{@link #PADDING_MODE_STACK} * </ul> */ public void setPaddingMode(int mode) { if (mLayerState.mPaddingMode != mode) { mLayerState.mPaddingMode = mode; - invalidatePadding(); } } @@ -370,36 +362,19 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { return mLayerState.mPaddingMode; } - /** - * Invalidates cached padding. - */ - private void invalidatePadding() { - mHasCachedPadding = false; - onBoundsChange(getBounds()); - } - @Override public void invalidateDrawable(Drawable who) { - final Callback callback = getCallback(); - if (callback != null) { - callback.invalidateDrawable(this); - } + invalidateSelf(); } @Override public void scheduleDrawable(Drawable who, Runnable what, long when) { - final Callback callback = getCallback(); - if (callback != null) { - callback.scheduleDrawable(this, what, when); - } + scheduleSelf(what, when); } @Override public void unscheduleDrawable(Drawable who, Runnable what) { - final Callback callback = getCallback(); - if (callback != null) { - callback.unscheduleDrawable(this, what); - } + unscheduleSelf(what); } @Override @@ -420,19 +395,12 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { @Override public boolean getPadding(Rect padding) { - final Rect cachedPadding = mCachedPadding; - if (!mHasCachedPadding) { - if (mLayerState.mPaddingMode == PADDING_MODE_NEST) { - computeNestedPadding(cachedPadding); - } else { - computeStackedPadding(cachedPadding); - } - - mHasCachedPadding = true; + if (mLayerState.mPaddingMode == PADDING_MODE_NEST) { + computeNestedPadding(padding); + } else { + computeStackedPadding(padding); } - padding.set(cachedPadding); - return padding.left != 0 || padding.top != 0 || padding.right != 0 || padding.bottom != 0; } @@ -588,7 +556,7 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { } if (paddingChanged) { - invalidatePadding(); + onBoundsChange(getBounds()); } return changed; @@ -613,7 +581,7 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { } if (paddingChanged) { - invalidatePadding(); + onBoundsChange(getBounds()); } return changed; |
