Merge "Make LD stateful / opacity management look more like DC"
diff --git a/graphics/java/android/graphics/drawable/DrawableContainer.java b/graphics/java/android/graphics/drawable/DrawableContainer.java
index abdc2b9..d88aee9 100644
--- a/graphics/java/android/graphics/drawable/DrawableContainer.java
+++ b/graphics/java/android/graphics/drawable/DrawableContainer.java
@@ -1128,8 +1128,6 @@
createAllFutures();
- mCheckedOpacity = true;
-
final int N = mNumChildren;
final Drawable[] drawables = mDrawables;
int op = (N > 0) ? drawables[0].getOpacity() : PixelFormat.TRANSPARENT;
@@ -1138,6 +1136,7 @@
}
mOpacity = op;
+ mCheckedOpacity = true;
return op;
}
@@ -1148,19 +1147,19 @@
createAllFutures();
- mCheckedStateful = true;
-
final int N = mNumChildren;
final Drawable[] drawables = mDrawables;
+ boolean isStateful = false;
for (int i = 0; i < N; i++) {
if (drawables[i].isStateful()) {
- mStateful = true;
- return true;
+ isStateful = true;
+ break;
}
}
- mStateful = false;
- return false;
+ mStateful = isStateful;
+ mCheckedStateful = true;
+ return isStateful;
}
public void growArray(int oldSize, int newSize) {
diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java
index e09fea5..355e45e 100644
--- a/graphics/java/android/graphics/drawable/LayerDrawable.java
+++ b/graphics/java/android/graphics/drawable/LayerDrawable.java
@@ -137,7 +137,7 @@
layers[i].setCallback(this);
mLayerState.mChildrenChangingConfigurations |= layers[i].getChangingConfigurations();
}
- mLayerState.mNum = length;
+ mLayerState.mNumChildren = length;
mLayerState.mChildren = r;
ensurePadding();
@@ -154,7 +154,7 @@
*/
LayerDrawable(@Nullable LayerState state, @Nullable Resources res) {
mLayerState = createConstantState(state, res);
- if (mLayerState.mNum > 0) {
+ if (mLayerState.mNumChildren > 0) {
ensurePadding();
refreshPadding();
}
@@ -185,7 +185,7 @@
a.recycle();
final ChildDrawable[] array = state.mChildren;
- final int N = state.mNum;
+ final int N = state.mNumChildren;
for (int i = 0; i < N; i++) {
final ChildDrawable layer = array[i];
layer.setDensity(density);
@@ -217,7 +217,7 @@
}
final ChildDrawable[] array = state.mChildren;
- final int N = state.mNum;
+ final int N = state.mNumChildren;
for (int i = 0; i < N; i++) {
final ChildDrawable layer = array[i];
layer.setDensity(density);
@@ -416,7 +416,7 @@
}
final ChildDrawable[] layers = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
if (layers[i].mDrawable.isProjected()) {
return true;
@@ -435,7 +435,7 @@
int addLayer(@NonNull ChildDrawable layer) {
final LayerState st = mLayerState;
final int N = st.mChildren != null ? st.mChildren.length : 0;
- final int i = st.mNum;
+ final int i = st.mNumChildren;
if (i >= N) {
final ChildDrawable[] nu = new ChildDrawable[N + 10];
if (i > 0) {
@@ -446,7 +446,7 @@
}
st.mChildren[i] = layer;
- st.mNum++;
+ st.mNumChildren++;
st.invalidateCache();
return i;
}
@@ -514,7 +514,7 @@
*/
public Drawable findDrawableByLayerId(int id) {
final ChildDrawable[] layers = mLayerState.mChildren;
- for (int i = mLayerState.mNum - 1; i >= 0; i--) {
+ for (int i = mLayerState.mNumChildren - 1; i >= 0; i--) {
if (layers[i].mId == id) {
return layers[i].mDrawable;
}
@@ -549,7 +549,7 @@
* @attr ref android.R.styleable#LayerDrawableItem_id
*/
public int getId(int index) {
- if (index >= mLayerState.mNum) {
+ if (index >= mLayerState.mNumChildren) {
throw new IndexOutOfBoundsException();
}
return mLayerState.mChildren[index].mId;
@@ -561,7 +561,7 @@
* @return The number of layers.
*/
public int getNumberOfLayers() {
- return mLayerState.mNum;
+ return mLayerState.mNumChildren;
}
/**
@@ -593,7 +593,7 @@
*/
public int findIndexByLayerId(int id) {
final ChildDrawable[] layers = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final ChildDrawable childDrawable = layers[i];
if (childDrawable.mId == id) {
@@ -615,7 +615,7 @@
* @attr ref android.R.styleable#LayerDrawableItem_drawable
*/
public void setDrawable(int index, Drawable drawable) {
- if (index >= mLayerState.mNum) {
+ if (index >= mLayerState.mNumChildren) {
throw new IndexOutOfBoundsException();
}
@@ -651,7 +651,7 @@
* @attr ref android.R.styleable#LayerDrawableItem_drawable
*/
public Drawable getDrawable(int index) {
- if (index >= mLayerState.mNum) {
+ if (index >= mLayerState.mNumChildren) {
throw new IndexOutOfBoundsException();
}
return mLayerState.mChildren[index].mDrawable;
@@ -1003,7 +1003,7 @@
@Override
public void draw(Canvas canvas) {
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null) {
@@ -1230,7 +1230,7 @@
// Add all the padding.
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
refreshChildPadding(i, array[i]);
@@ -1249,7 +1249,7 @@
// Take the max padding.
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
refreshChildPadding(i, array[i]);
@@ -1268,7 +1268,7 @@
@Override
public void getOutline(@NonNull Outline outline) {
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null) {
@@ -1283,7 +1283,7 @@
@Override
public void setHotspot(float x, float y) {
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null) {
@@ -1295,7 +1295,7 @@
@Override
public void setHotspotBounds(int left, int top, int right, int bottom) {
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null) {
@@ -1323,7 +1323,7 @@
public boolean setVisible(boolean visible, boolean restart) {
final boolean changed = super.setVisible(visible, restart);
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null) {
@@ -1337,7 +1337,7 @@
@Override
public void setDither(boolean dither) {
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null) {
@@ -1349,7 +1349,7 @@
@Override
public void setAlpha(int alpha) {
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null) {
@@ -1371,7 +1371,7 @@
@Override
public void setColorFilter(ColorFilter colorFilter) {
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null) {
@@ -1383,7 +1383,7 @@
@Override
public void setTintList(ColorStateList tint) {
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null) {
@@ -1395,7 +1395,7 @@
@Override
public void setTintMode(Mode tintMode) {
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null) {
@@ -1406,7 +1406,7 @@
private Drawable getFirstNonNullDrawable() {
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null) {
@@ -1444,7 +1444,7 @@
mLayerState.mAutoMirrored = mirrored;
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null) {
@@ -1461,7 +1461,7 @@
@Override
public void jumpToCurrentState() {
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null) {
@@ -1480,7 +1480,7 @@
boolean changed = false;
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null && dr.isStateful() && dr.setState(state)) {
@@ -1501,7 +1501,7 @@
boolean changed = false;
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null && dr.setLevel(level)) {
@@ -1543,7 +1543,7 @@
final boolean isPaddingNested = mLayerState.mPaddingMode == PADDING_MODE_NEST;
final ChildDrawable[] array = mLayerState.mChildren;
- for (int i = 0, count = mLayerState.mNum; i < count; i++) {
+ for (int i = 0, count = mLayerState.mNumChildren; i < count; i++) {
final ChildDrawable r = array[i];
final Drawable d = r.mDrawable;
if (d == null) {
@@ -1642,7 +1642,7 @@
final boolean nest = mLayerState.mPaddingMode == PADDING_MODE_NEST;
final boolean isLayoutRtl = getLayoutDirection() == LayoutDirection.RTL;
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final ChildDrawable r = array[i];
if (r.mDrawable == null) {
@@ -1684,7 +1684,7 @@
final boolean nest = mLayerState.mPaddingMode == PADDING_MODE_NEST;
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final ChildDrawable r = array[i];
if (r.mDrawable == null) {
@@ -1733,7 +1733,7 @@
* Ensures the child padding caches are large enough.
*/
void ensurePadding() {
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
if (mPaddingL != null && mPaddingL.length >= N) {
return;
}
@@ -1745,7 +1745,7 @@
}
void refreshPadding() {
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
final ChildDrawable[] array = mLayerState.mChildren;
for (int i = 0; i < N; i++) {
refreshChildPadding(i, array[i]);
@@ -1766,7 +1766,7 @@
if (!mMutated && super.mutate() == this) {
mLayerState = createConstantState(mLayerState, null);
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null) {
@@ -1785,7 +1785,7 @@
super.clearMutated();
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null) {
@@ -1800,7 +1800,7 @@
boolean changed = false;
final ChildDrawable[] array = mLayerState.mChildren;
- final int N = mLayerState.mNum;
+ final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null) {
@@ -1905,7 +1905,7 @@
static class LayerState extends ConstantState {
private int[] mThemeAttrs;
- int mNum;
+ int mNumChildren;
ChildDrawable[] mChildren;
int mDensity;
@@ -1922,10 +1922,10 @@
@Config int mChangingConfigurations;
@Config int mChildrenChangingConfigurations;
- private boolean mHaveOpacity;
+ private boolean mCheckedOpacity;
private int mOpacity;
- private boolean mHaveIsStateful;
+ private boolean mCheckedStateful;
private boolean mIsStateful;
private boolean mAutoMirrored = false;
@@ -1938,9 +1938,9 @@
if (orig != null) {
final ChildDrawable[] origChildDrawable = orig.mChildren;
- final int N = orig.mNum;
+ final int N = orig.mNumChildren;
- mNum = N;
+ mNumChildren = N;
mChildren = new ChildDrawable[N];
mChangingConfigurations = orig.mChangingConfigurations;
@@ -1951,9 +1951,9 @@
mChildren[i] = new ChildDrawable(or, owner, res);
}
- mHaveOpacity = orig.mHaveOpacity;
+ mCheckedOpacity = orig.mCheckedOpacity;
mOpacity = orig.mOpacity;
- mHaveIsStateful = orig.mHaveIsStateful;
+ mCheckedStateful = orig.mCheckedStateful;
mIsStateful = orig.mIsStateful;
mAutoMirrored = orig.mAutoMirrored;
mPaddingMode = orig.mPaddingMode;
@@ -1970,7 +1970,7 @@
applyDensityScaling(orig.mDensity, mDensity);
}
} else {
- mNum = 0;
+ mNumChildren = 0;
mChildren = null;
}
}
@@ -2022,7 +2022,7 @@
}
final ChildDrawable[] array = mChildren;
- final int N = mNum;
+ final int N = mNumChildren;
for (int i = 0; i < N; i++) {
final ChildDrawable layer = array[i];
if (layer.canApplyTheme()) {
@@ -2050,12 +2050,12 @@
}
public final int getOpacity() {
- if (mHaveOpacity) {
+ if (mCheckedOpacity) {
return mOpacity;
}
+ final int N = mNumChildren;
final ChildDrawable[] array = mChildren;
- final int N = mNum;
// Seek to the first non-null drawable.
int firstIndex = -1;
@@ -2082,17 +2082,17 @@
}
mOpacity = op;
- mHaveOpacity = true;
+ mCheckedOpacity = true;
return op;
}
public final boolean isStateful() {
- if (mHaveIsStateful) {
+ if (mCheckedStateful) {
return mIsStateful;
}
+ final int N = mNumChildren;
final ChildDrawable[] array = mChildren;
- final int N = mNum;
boolean isStateful = false;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
@@ -2103,13 +2103,13 @@
}
mIsStateful = isStateful;
- mHaveIsStateful = true;
+ mCheckedStateful = true;
return isStateful;
}
public final boolean canConstantState() {
final ChildDrawable[] array = mChildren;
- final int N = mNum;
+ final int N = mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null && dr.getConstantState() == null) {
@@ -2122,8 +2122,8 @@
}
public void invalidateCache() {
- mHaveOpacity = false;
- mHaveIsStateful = false;
+ mCheckedOpacity = false;
+ mCheckedStateful = false;
}
}
diff --git a/graphics/java/android/graphics/drawable/RippleDrawable.java b/graphics/java/android/graphics/drawable/RippleDrawable.java
index caf2e7a..f83c160 100644
--- a/graphics/java/android/graphics/drawable/RippleDrawable.java
+++ b/graphics/java/android/graphics/drawable/RippleDrawable.java
@@ -667,7 +667,7 @@
public void getOutline(@NonNull Outline outline) {
final LayerState state = mLayerState;
final ChildDrawable[] children = state.mChildren;
- final int N = state.mNum;
+ final int N = state.mNumChildren;
for (int i = 0; i < N; i++) {
if (children[i].mId != R.id.mask) {
children[i].mDrawable.getOutline(outline);
@@ -815,7 +815,7 @@
// Check for non-opaque, non-mask content.
final ChildDrawable[] array = mLayerState.mChildren;
- final int count = mLayerState.mNum;
+ final int count = mLayerState.mNumChildren;
for (int i = 0; i < count; i++) {
if (array[i].mDrawable.getOpacity() != PixelFormat.OPAQUE) {
return MASK_CONTENT;
@@ -829,7 +829,7 @@
private void drawContent(Canvas canvas) {
// Draw everything except the mask.
final ChildDrawable[] array = mLayerState.mChildren;
- final int count = mLayerState.mNum;
+ final int count = mLayerState.mNumChildren;
for (int i = 0; i < count; i++) {
if (array[i].mId != R.id.mask) {
array[i].mDrawable.draw(canvas);
@@ -1045,7 +1045,7 @@
mLayerState = mState;
mDensity = Drawable.resolveDensity(res, mState.mDensity);
- if (mState.mNum > 0) {
+ if (mState.mNumChildren > 0) {
ensurePadding();
refreshPadding();
}