Make LD stateful / opacity management look more like DC

Some initial cleanup before making changes to either class.

Test: n/a, refactoring only
Bug: 33124798
Change-Id: Idf0328bcc6de72b694ca7b35122ecad845cf1c4b
This commit is contained in:
Alan Viverette
2016-11-28 14:55:18 -05:00
parent cd3672586e
commit eb7277590a
3 changed files with 67 additions and 68 deletions

View File

@@ -1128,8 +1128,6 @@ public class DrawableContainer extends Drawable implements Drawable.Callback {
createAllFutures();
mCheckedOpacity = true;
final int N = mNumChildren;
final Drawable[] drawables = mDrawables;
int op = (N > 0) ? drawables[0].getOpacity() : PixelFormat.TRANSPARENT;
@@ -1138,6 +1136,7 @@ public class DrawableContainer extends Drawable implements Drawable.Callback {
}
mOpacity = op;
mCheckedOpacity = true;
return op;
}
@@ -1148,19 +1147,19 @@ public class DrawableContainer extends Drawable implements Drawable.Callback {
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) {

View File

@@ -137,7 +137,7 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
layers[i].setCallback(this);
mLayerState.mChildrenChangingConfigurations |= layers[i].getChangingConfigurations();
}
mLayerState.mNum = length;
mLayerState.mNumChildren = length;
mLayerState.mChildren = r;
ensurePadding();
@@ -154,7 +154,7 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
*/
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
}
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
}
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
}
st.mChildren[i] = layer;
st.mNum++;
st.mNumChildren++;
st.invalidateCache();
return i;
}
@@ -514,7 +514,7 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
*/
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
* @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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
* @return The number of layers.
*/
public int getNumberOfLayers() {
return mLayerState.mNum;
return mLayerState.mNumChildren;
}
/**
@@ -593,7 +593,7 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
*/
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
* @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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
* @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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
@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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
// 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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
// 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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
@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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
@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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
@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 class LayerDrawable extends Drawable implements Drawable.Callback {
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
@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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
@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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
@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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
@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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
@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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
@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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
* 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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
}
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
static class LayerState extends ConstantState {
private int[] mThemeAttrs;
int mNum;
int mNumChildren;
ChildDrawable[] mChildren;
int mDensity;
@@ -1922,10 +1922,10 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
@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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
applyDensityScaling(orig.mDensity, mDensity);
}
} else {
mNum = 0;
mNumChildren = 0;
mChildren = null;
}
}
@@ -2022,7 +2022,7 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
}
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 class LayerDrawable extends Drawable implements Drawable.Callback {
}
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
}
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 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
}
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 class LayerDrawable extends Drawable implements Drawable.Callback {
}
public void invalidateCache() {
mHaveOpacity = false;
mHaveIsStateful = false;
mCheckedOpacity = false;
mCheckedStateful = false;
}
}

View File

@@ -667,7 +667,7 @@ public class RippleDrawable extends LayerDrawable {
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 @@ public class RippleDrawable extends LayerDrawable {
// 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 @@ public class RippleDrawable extends LayerDrawable {
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 @@ public class RippleDrawable extends LayerDrawable {
mLayerState = mState;
mDensity = Drawable.resolveDensity(res, mState.mDensity);
if (mState.mNum > 0) {
if (mState.mNumChildren > 0) {
ensurePadding();
refreshPadding();
}