discord-jadx/app/src/main/java/androidx/appcompat/graphics/drawable/StateListDrawable.java

259 lines
11 KiB
Java

package androidx.appcompat.graphics.drawable;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.StateSet;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.appcompat.graphics.drawable.DrawableContainer;
import androidx.appcompat.resources.R;
import androidx.appcompat.widget.ResourceManagerInternal;
import androidx.core.content.res.TypedArrayUtils;
import java.io.IOException;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@SuppressLint({"RestrictedAPI"})
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
public class StateListDrawable extends DrawableContainer {
private static final boolean DEBUG = false;
private static final String TAG = "StateListDrawable";
private boolean mMutated;
private StateListState mStateListState;
public static class StateListState extends DrawableContainer.DrawableContainerState {
public int[][] mStateSets;
public StateListState(StateListState stateListState, StateListDrawable stateListDrawable, Resources resources) {
super(stateListState, stateListDrawable, resources);
if (stateListState != null) {
this.mStateSets = stateListState.mStateSets;
} else {
this.mStateSets = new int[getCapacity()][];
}
}
public int addStateSet(int[] iArr, Drawable drawable) {
int addChild = addChild(drawable);
this.mStateSets[addChild] = iArr;
return addChild;
}
@Override // androidx.appcompat.graphics.drawable.DrawableContainer.DrawableContainerState
public void growArray(int i, int i2) {
super.growArray(i, i2);
int[][] iArr = new int[i2][];
System.arraycopy(this.mStateSets, 0, iArr, 0, i);
this.mStateSets = iArr;
}
public int indexOfStateSet(int[] iArr) {
int[][] iArr2 = this.mStateSets;
int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
if (StateSet.stateSetMatches(iArr2[i], iArr)) {
return i;
}
}
return -1;
}
@Override // androidx.appcompat.graphics.drawable.DrawableContainer.DrawableContainerState
public void mutate() {
int[][] iArr = this.mStateSets;
int[][] iArr2 = new int[iArr.length][];
for (int length = iArr.length - 1; length >= 0; length--) {
int[][] iArr3 = this.mStateSets;
iArr2[length] = iArr3[length] != null ? (int[]) iArr3[length].clone() : null;
}
this.mStateSets = iArr2;
}
@Override // android.graphics.drawable.Drawable.ConstantState
@NonNull
public Drawable newDrawable() {
return new StateListDrawable(this, null);
}
@Override // android.graphics.drawable.Drawable.ConstantState
@NonNull
public Drawable newDrawable(Resources resources) {
return new StateListDrawable(this, resources);
}
}
public StateListDrawable() {
this(null, null);
}
public StateListDrawable(@Nullable StateListState stateListState) {
if (stateListState != null) {
setConstantState(stateListState);
}
}
public StateListDrawable(StateListState stateListState, Resources resources) {
setConstantState(new StateListState(stateListState, this, resources));
onStateChange(getState());
}
private void inflateChildElements(Context context, Resources resources, XmlPullParser xmlPullParser, AttributeSet attributeSet, Resources.Theme theme) throws XmlPullParserException, IOException {
int next;
StateListState stateListState = this.mStateListState;
int depth = xmlPullParser.getDepth() + 1;
while (true) {
int next2 = xmlPullParser.next();
if (next2 != 1) {
int depth2 = xmlPullParser.getDepth();
if (depth2 < depth && next2 == 3) {
return;
}
if (next2 == 2 && depth2 <= depth && xmlPullParser.getName().equals("item")) {
TypedArray obtainAttributes = TypedArrayUtils.obtainAttributes(resources, theme, attributeSet, R.styleable.StateListDrawableItem);
Drawable drawable = null;
int resourceId = obtainAttributes.getResourceId(R.styleable.StateListDrawableItem_android_drawable, -1);
if (resourceId > 0) {
drawable = ResourceManagerInternal.get().getDrawable(context, resourceId);
}
obtainAttributes.recycle();
int[] extractStateSet = extractStateSet(attributeSet);
if (drawable == null) {
do {
next = xmlPullParser.next();
} while (next == 4);
if (next == 2) {
drawable = Drawable.createFromXmlInner(resources, xmlPullParser, attributeSet, theme);
} else {
throw new XmlPullParserException(xmlPullParser.getPositionDescription() + ": <item> tag requires a 'drawable' attribute or child tag defining a drawable");
}
}
stateListState.addStateSet(extractStateSet, drawable);
}
} else {
return;
}
}
}
private void updateStateFromTypedArray(TypedArray typedArray) {
StateListState stateListState = this.mStateListState;
stateListState.mChangingConfigurations |= typedArray.getChangingConfigurations();
stateListState.mVariablePadding = typedArray.getBoolean(R.styleable.StateListDrawable_android_variablePadding, stateListState.mVariablePadding);
stateListState.mConstantSize = typedArray.getBoolean(R.styleable.StateListDrawable_android_constantSize, stateListState.mConstantSize);
stateListState.mEnterFadeDuration = typedArray.getInt(R.styleable.StateListDrawable_android_enterFadeDuration, stateListState.mEnterFadeDuration);
stateListState.mExitFadeDuration = typedArray.getInt(R.styleable.StateListDrawable_android_exitFadeDuration, stateListState.mExitFadeDuration);
stateListState.mDither = typedArray.getBoolean(R.styleable.StateListDrawable_android_dither, stateListState.mDither);
}
public void addState(int[] iArr, Drawable drawable) {
if (drawable != null) {
this.mStateListState.addStateSet(iArr, drawable);
onStateChange(getState());
}
}
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
@RequiresApi(21)
public void applyTheme(@NonNull Resources.Theme theme) {
super.applyTheme(theme);
onStateChange(getState());
}
@Override // androidx.appcompat.graphics.drawable.DrawableContainer
public void clearMutated() {
super.clearMutated();
this.mMutated = false;
}
@Override // androidx.appcompat.graphics.drawable.DrawableContainer
public StateListState cloneConstantState() {
return new StateListState(this.mStateListState, this, null);
}
public int[] extractStateSet(AttributeSet attributeSet) {
int attributeCount = attributeSet.getAttributeCount();
int[] iArr = new int[attributeCount];
int i = 0;
for (int i2 = 0; i2 < attributeCount; i2++) {
int attributeNameResource = attributeSet.getAttributeNameResource(i2);
if (!(attributeNameResource == 0 || attributeNameResource == 16842960 || attributeNameResource == 16843161)) {
int i3 = i + 1;
if (!attributeSet.getAttributeBooleanValue(i2, false)) {
attributeNameResource = -attributeNameResource;
}
iArr[i] = attributeNameResource;
i = i3;
}
}
return StateSet.trimStateSet(iArr, i);
}
public int getStateCount() {
return this.mStateListState.getChildCount();
}
public Drawable getStateDrawable(int i) {
return this.mStateListState.getChild(i);
}
public int getStateDrawableIndex(int[] iArr) {
return this.mStateListState.indexOfStateSet(iArr);
}
public StateListState getStateListState() {
return this.mStateListState;
}
public int[] getStateSet(int i) {
return this.mStateListState.mStateSets[i];
}
public void inflate(@NonNull Context context, @NonNull Resources resources, @NonNull XmlPullParser xmlPullParser, @NonNull AttributeSet attributeSet, @Nullable Resources.Theme theme) throws XmlPullParserException, IOException {
TypedArray obtainAttributes = TypedArrayUtils.obtainAttributes(resources, theme, attributeSet, R.styleable.StateListDrawable);
setVisible(obtainAttributes.getBoolean(R.styleable.StateListDrawable_android_visible, true), true);
updateStateFromTypedArray(obtainAttributes);
updateDensity(resources);
obtainAttributes.recycle();
inflateChildElements(context, resources, xmlPullParser, attributeSet, theme);
onStateChange(getState());
}
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
public boolean isStateful() {
return true;
}
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
@NonNull
public Drawable mutate() {
if (!this.mMutated && super.mutate() == this) {
this.mStateListState.mutate();
this.mMutated = true;
}
return this;
}
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
public boolean onStateChange(int[] iArr) {
boolean onStateChange = super.onStateChange(iArr);
int indexOfStateSet = this.mStateListState.indexOfStateSet(iArr);
if (indexOfStateSet < 0) {
indexOfStateSet = this.mStateListState.indexOfStateSet(StateSet.WILD_CARD);
}
return selectDrawable(indexOfStateSet) || onStateChange;
}
@Override // androidx.appcompat.graphics.drawable.DrawableContainer
public void setConstantState(@NonNull DrawableContainer.DrawableContainerState drawableContainerState) {
super.setConstantState(drawableContainerState);
if (drawableContainerState instanceof StateListState) {
this.mStateListState = (StateListState) drawableContainerState;
}
}
}