711 lines
32 KiB
Java
711 lines
32 KiB
Java
package androidx.appcompat.graphics.drawable;
|
|
|
|
import android.animation.ObjectAnimator;
|
|
import android.animation.TimeInterpolator;
|
|
import android.annotation.SuppressLint;
|
|
import android.content.Context;
|
|
import android.content.res.ColorStateList;
|
|
import android.content.res.Resources;
|
|
import android.content.res.TypedArray;
|
|
import android.content.res.XmlResourceParser;
|
|
import android.graphics.Canvas;
|
|
import android.graphics.ColorFilter;
|
|
import android.graphics.Outline;
|
|
import android.graphics.PorterDuff;
|
|
import android.graphics.Rect;
|
|
import android.graphics.drawable.Animatable;
|
|
import android.graphics.drawable.AnimationDrawable;
|
|
import android.graphics.drawable.Drawable;
|
|
import android.util.AttributeSet;
|
|
import android.util.Log;
|
|
import android.util.StateSet;
|
|
import android.util.Xml;
|
|
import androidx.annotation.DrawableRes;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.annotation.RequiresApi;
|
|
import androidx.appcompat.graphics.drawable.DrawableContainer;
|
|
import androidx.appcompat.graphics.drawable.StateListDrawable;
|
|
import androidx.appcompat.resources.R;
|
|
import androidx.appcompat.widget.ResourceManagerInternal;
|
|
import androidx.collection.LongSparseArray;
|
|
import androidx.collection.SparseArrayCompat;
|
|
import androidx.core.content.res.TypedArrayUtils;
|
|
import androidx.core.graphics.drawable.TintAwareDrawable;
|
|
import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat;
|
|
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat;
|
|
import java.io.IOException;
|
|
import org.xmlpull.v1.XmlPullParser;
|
|
import org.xmlpull.v1.XmlPullParserException;
|
|
@SuppressLint({"RestrictedAPI"})
|
|
public class AnimatedStateListDrawableCompat extends StateListDrawable implements TintAwareDrawable {
|
|
private static final String ELEMENT_ITEM = "item";
|
|
private static final String ELEMENT_TRANSITION = "transition";
|
|
private static final String ITEM_MISSING_DRAWABLE_ERROR = ": <item> tag requires a 'drawable' attribute or child tag defining a drawable";
|
|
private static final String LOGTAG = AnimatedStateListDrawableCompat.class.getSimpleName();
|
|
private static final String TRANSITION_MISSING_DRAWABLE_ERROR = ": <transition> tag requires a 'drawable' attribute or child tag defining a drawable";
|
|
private static final String TRANSITION_MISSING_FROM_TO_ID = ": <transition> tag requires 'fromId' & 'toId' attributes";
|
|
private boolean mMutated;
|
|
private AnimatedStateListState mState;
|
|
private Transition mTransition;
|
|
private int mTransitionFromIndex;
|
|
private int mTransitionToIndex;
|
|
|
|
public static class AnimatableTransition extends Transition {
|
|
private final Animatable mA;
|
|
|
|
public AnimatableTransition(Animatable animatable) {
|
|
super();
|
|
this.mA = animatable;
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat.Transition
|
|
public void start() {
|
|
this.mA.start();
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat.Transition
|
|
public void stop() {
|
|
this.mA.stop();
|
|
}
|
|
}
|
|
|
|
public static class AnimatedStateListState extends StateListDrawable.StateListState {
|
|
private static final long REVERSED_BIT = 4294967296L;
|
|
private static final long REVERSIBLE_FLAG_BIT = 8589934592L;
|
|
public SparseArrayCompat<Integer> mStateIds;
|
|
public LongSparseArray<Long> mTransitions;
|
|
|
|
public AnimatedStateListState(@Nullable AnimatedStateListState animatedStateListState, @NonNull AnimatedStateListDrawableCompat animatedStateListDrawableCompat, @Nullable Resources resources) {
|
|
super(animatedStateListState, animatedStateListDrawableCompat, resources);
|
|
if (animatedStateListState != null) {
|
|
this.mTransitions = animatedStateListState.mTransitions;
|
|
this.mStateIds = animatedStateListState.mStateIds;
|
|
return;
|
|
}
|
|
this.mTransitions = new LongSparseArray<>();
|
|
this.mStateIds = new SparseArrayCompat<>();
|
|
}
|
|
|
|
private static long generateTransitionKey(int i, int i2) {
|
|
return ((long) i2) | (((long) i) << 32);
|
|
}
|
|
|
|
public int addStateSet(@NonNull int[] iArr, @NonNull Drawable drawable, int i) {
|
|
int addStateSet = super.addStateSet(iArr, drawable);
|
|
this.mStateIds.put(addStateSet, Integer.valueOf(i));
|
|
return addStateSet;
|
|
}
|
|
|
|
public int addTransition(int i, int i2, @NonNull Drawable drawable, boolean z2) {
|
|
int addChild = super.addChild(drawable);
|
|
long generateTransitionKey = generateTransitionKey(i, i2);
|
|
long j = z2 ? 8589934592L : 0;
|
|
long j2 = (long) addChild;
|
|
this.mTransitions.append(generateTransitionKey, Long.valueOf(j2 | j));
|
|
if (z2) {
|
|
this.mTransitions.append(generateTransitionKey(i2, i), Long.valueOf(4294967296L | j2 | j));
|
|
}
|
|
return addChild;
|
|
}
|
|
|
|
public int getKeyframeIdAt(int i) {
|
|
if (i < 0) {
|
|
return 0;
|
|
}
|
|
return this.mStateIds.get(i, 0).intValue();
|
|
}
|
|
|
|
public int indexOfKeyframe(@NonNull int[] iArr) {
|
|
int indexOfStateSet = super.indexOfStateSet(iArr);
|
|
return indexOfStateSet >= 0 ? indexOfStateSet : super.indexOfStateSet(StateSet.WILD_CARD);
|
|
}
|
|
|
|
public int indexOfTransition(int i, int i2) {
|
|
return (int) this.mTransitions.get(generateTransitionKey(i, i2), -1L).longValue();
|
|
}
|
|
|
|
public boolean isTransitionReversed(int i, int i2) {
|
|
return (this.mTransitions.get(generateTransitionKey(i, i2), -1L).longValue() & 4294967296L) != 0;
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.StateListDrawable.StateListState, androidx.appcompat.graphics.drawable.DrawableContainer.DrawableContainerState
|
|
public void mutate() {
|
|
this.mTransitions = this.mTransitions.clone();
|
|
this.mStateIds = this.mStateIds.clone();
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.StateListDrawable.StateListState, android.graphics.drawable.Drawable.ConstantState
|
|
@NonNull
|
|
public Drawable newDrawable() {
|
|
return new AnimatedStateListDrawableCompat(this, null);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.StateListDrawable.StateListState, android.graphics.drawable.Drawable.ConstantState
|
|
@NonNull
|
|
public Drawable newDrawable(Resources resources) {
|
|
return new AnimatedStateListDrawableCompat(this, resources);
|
|
}
|
|
|
|
public boolean transitionHasReversibleFlag(int i, int i2) {
|
|
return (this.mTransitions.get(generateTransitionKey(i, i2), -1L).longValue() & 8589934592L) != 0;
|
|
}
|
|
}
|
|
|
|
public static class AnimatedVectorDrawableTransition extends Transition {
|
|
private final AnimatedVectorDrawableCompat mAvd;
|
|
|
|
public AnimatedVectorDrawableTransition(AnimatedVectorDrawableCompat animatedVectorDrawableCompat) {
|
|
super();
|
|
this.mAvd = animatedVectorDrawableCompat;
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat.Transition
|
|
public void start() {
|
|
this.mAvd.start();
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat.Transition
|
|
public void stop() {
|
|
this.mAvd.stop();
|
|
}
|
|
}
|
|
|
|
public static class AnimationDrawableTransition extends Transition {
|
|
private final ObjectAnimator mAnim;
|
|
private final boolean mHasReversibleFlag;
|
|
|
|
public AnimationDrawableTransition(AnimationDrawable animationDrawable, boolean z2, boolean z3) {
|
|
super();
|
|
int numberOfFrames = animationDrawable.getNumberOfFrames();
|
|
int i = z2 ? numberOfFrames - 1 : 0;
|
|
int i2 = z2 ? 0 : numberOfFrames - 1;
|
|
FrameInterpolator frameInterpolator = new FrameInterpolator(animationDrawable, z2);
|
|
ObjectAnimator ofInt = ObjectAnimator.ofInt(animationDrawable, "currentIndex", i, i2);
|
|
ofInt.setAutoCancel(true);
|
|
ofInt.setDuration((long) frameInterpolator.getTotalDuration());
|
|
ofInt.setInterpolator(frameInterpolator);
|
|
this.mHasReversibleFlag = z3;
|
|
this.mAnim = ofInt;
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat.Transition
|
|
public boolean canReverse() {
|
|
return this.mHasReversibleFlag;
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat.Transition
|
|
public void reverse() {
|
|
this.mAnim.reverse();
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat.Transition
|
|
public void start() {
|
|
this.mAnim.start();
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat.Transition
|
|
public void stop() {
|
|
this.mAnim.cancel();
|
|
}
|
|
}
|
|
|
|
public static class FrameInterpolator implements TimeInterpolator {
|
|
private int[] mFrameTimes;
|
|
private int mFrames;
|
|
private int mTotalDuration;
|
|
|
|
public FrameInterpolator(AnimationDrawable animationDrawable, boolean z2) {
|
|
updateFrames(animationDrawable, z2);
|
|
}
|
|
|
|
@Override // android.animation.TimeInterpolator
|
|
public float getInterpolation(float f) {
|
|
int i = (int) ((f * ((float) this.mTotalDuration)) + 0.5f);
|
|
int i2 = this.mFrames;
|
|
int[] iArr = this.mFrameTimes;
|
|
int i3 = 0;
|
|
while (i3 < i2 && i >= iArr[i3]) {
|
|
i -= iArr[i3];
|
|
i3++;
|
|
}
|
|
return (((float) i3) / ((float) i2)) + (i3 < i2 ? ((float) i) / ((float) this.mTotalDuration) : 0.0f);
|
|
}
|
|
|
|
public int getTotalDuration() {
|
|
return this.mTotalDuration;
|
|
}
|
|
|
|
public int updateFrames(AnimationDrawable animationDrawable, boolean z2) {
|
|
int numberOfFrames = animationDrawable.getNumberOfFrames();
|
|
this.mFrames = numberOfFrames;
|
|
int[] iArr = this.mFrameTimes;
|
|
if (iArr == null || iArr.length < numberOfFrames) {
|
|
this.mFrameTimes = new int[numberOfFrames];
|
|
}
|
|
int[] iArr2 = this.mFrameTimes;
|
|
int i = 0;
|
|
for (int i2 = 0; i2 < numberOfFrames; i2++) {
|
|
int duration = animationDrawable.getDuration(z2 ? (numberOfFrames - i2) - 1 : i2);
|
|
iArr2[i2] = duration;
|
|
i += duration;
|
|
}
|
|
this.mTotalDuration = i;
|
|
return i;
|
|
}
|
|
}
|
|
|
|
public static abstract class Transition {
|
|
private Transition() {
|
|
}
|
|
|
|
public boolean canReverse() {
|
|
return false;
|
|
}
|
|
|
|
public void reverse() {
|
|
}
|
|
|
|
public abstract void start();
|
|
|
|
public abstract void stop();
|
|
}
|
|
|
|
public AnimatedStateListDrawableCompat() {
|
|
this(null, null);
|
|
}
|
|
|
|
public AnimatedStateListDrawableCompat(@Nullable AnimatedStateListState animatedStateListState, @Nullable Resources resources) {
|
|
super(null);
|
|
this.mTransitionToIndex = -1;
|
|
this.mTransitionFromIndex = -1;
|
|
setConstantState(new AnimatedStateListState(animatedStateListState, this, resources));
|
|
onStateChange(getState());
|
|
jumpToCurrentState();
|
|
}
|
|
|
|
@Nullable
|
|
public static AnimatedStateListDrawableCompat create(@NonNull Context context, @DrawableRes int i, @Nullable Resources.Theme theme) {
|
|
XmlResourceParser xml;
|
|
int next;
|
|
try {
|
|
Resources resources = context.getResources();
|
|
xml = resources.getXml(i);
|
|
AttributeSet asAttributeSet = Xml.asAttributeSet(xml);
|
|
if (next == 2) {
|
|
return createFromXmlInner(context, resources, xml, asAttributeSet, theme);
|
|
}
|
|
throw new XmlPullParserException("No start tag found");
|
|
} catch (XmlPullParserException e) {
|
|
Log.e(LOGTAG, "parser error", e);
|
|
return null;
|
|
} catch (IOException e2) {
|
|
Log.e(LOGTAG, "parser error", e2);
|
|
return null;
|
|
}
|
|
while (true) {
|
|
next = xml.next();
|
|
if (next == 2 || next == 1) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static AnimatedStateListDrawableCompat createFromXmlInner(@NonNull Context context, @NonNull Resources resources, @NonNull XmlPullParser xmlPullParser, @NonNull AttributeSet attributeSet, @Nullable Resources.Theme theme) throws IOException, XmlPullParserException {
|
|
String name = xmlPullParser.getName();
|
|
if (name.equals("animated-selector")) {
|
|
AnimatedStateListDrawableCompat animatedStateListDrawableCompat = new AnimatedStateListDrawableCompat();
|
|
animatedStateListDrawableCompat.inflate(context, resources, xmlPullParser, attributeSet, theme);
|
|
return animatedStateListDrawableCompat;
|
|
}
|
|
throw new XmlPullParserException(xmlPullParser.getPositionDescription() + ": invalid animated-selector tag " + name);
|
|
}
|
|
|
|
private void inflateChildElements(@NonNull Context context, @NonNull Resources resources, @NonNull XmlPullParser xmlPullParser, @NonNull AttributeSet attributeSet, @Nullable Resources.Theme theme) throws XmlPullParserException, IOException {
|
|
int depth = xmlPullParser.getDepth() + 1;
|
|
while (true) {
|
|
int next = xmlPullParser.next();
|
|
if (next != 1) {
|
|
int depth2 = xmlPullParser.getDepth();
|
|
if (depth2 < depth && next == 3) {
|
|
return;
|
|
}
|
|
if (next == 2 && depth2 <= depth) {
|
|
if (xmlPullParser.getName().equals(ELEMENT_ITEM)) {
|
|
parseItem(context, resources, xmlPullParser, attributeSet, theme);
|
|
} else if (xmlPullParser.getName().equals(ELEMENT_TRANSITION)) {
|
|
parseTransition(context, resources, xmlPullParser, attributeSet, theme);
|
|
}
|
|
}
|
|
} else {
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void init() {
|
|
onStateChange(getState());
|
|
}
|
|
|
|
private int parseItem(@NonNull Context context, @NonNull Resources resources, @NonNull XmlPullParser xmlPullParser, @NonNull AttributeSet attributeSet, @Nullable Resources.Theme theme) throws XmlPullParserException, IOException {
|
|
int next;
|
|
TypedArray obtainAttributes = TypedArrayUtils.obtainAttributes(resources, theme, attributeSet, R.styleable.AnimatedStateListDrawableItem);
|
|
int resourceId = obtainAttributes.getResourceId(R.styleable.AnimatedStateListDrawableItem_android_id, 0);
|
|
int resourceId2 = obtainAttributes.getResourceId(R.styleable.AnimatedStateListDrawableItem_android_drawable, -1);
|
|
Drawable drawable = resourceId2 > 0 ? ResourceManagerInternal.get().getDrawable(context, resourceId2) : null;
|
|
obtainAttributes.recycle();
|
|
int[] extractStateSet = extractStateSet(attributeSet);
|
|
if (drawable == null) {
|
|
do {
|
|
next = xmlPullParser.next();
|
|
} while (next == 4);
|
|
if (next == 2) {
|
|
drawable = xmlPullParser.getName().equals("vector") ? VectorDrawableCompat.createFromXmlInner(resources, xmlPullParser, attributeSet, theme) : Drawable.createFromXmlInner(resources, xmlPullParser, attributeSet, theme);
|
|
} else {
|
|
throw new XmlPullParserException(xmlPullParser.getPositionDescription() + ITEM_MISSING_DRAWABLE_ERROR);
|
|
}
|
|
}
|
|
if (drawable != null) {
|
|
return this.mState.addStateSet(extractStateSet, drawable, resourceId);
|
|
}
|
|
throw new XmlPullParserException(xmlPullParser.getPositionDescription() + ITEM_MISSING_DRAWABLE_ERROR);
|
|
}
|
|
|
|
private int parseTransition(@NonNull Context context, @NonNull Resources resources, @NonNull XmlPullParser xmlPullParser, @NonNull AttributeSet attributeSet, @Nullable Resources.Theme theme) throws XmlPullParserException, IOException {
|
|
int next;
|
|
TypedArray obtainAttributes = TypedArrayUtils.obtainAttributes(resources, theme, attributeSet, R.styleable.AnimatedStateListDrawableTransition);
|
|
int resourceId = obtainAttributes.getResourceId(R.styleable.AnimatedStateListDrawableTransition_android_fromId, -1);
|
|
int resourceId2 = obtainAttributes.getResourceId(R.styleable.AnimatedStateListDrawableTransition_android_toId, -1);
|
|
int resourceId3 = obtainAttributes.getResourceId(R.styleable.AnimatedStateListDrawableTransition_android_drawable, -1);
|
|
Drawable drawable = resourceId3 > 0 ? ResourceManagerInternal.get().getDrawable(context, resourceId3) : null;
|
|
boolean z2 = obtainAttributes.getBoolean(R.styleable.AnimatedStateListDrawableTransition_android_reversible, false);
|
|
obtainAttributes.recycle();
|
|
if (drawable == null) {
|
|
do {
|
|
next = xmlPullParser.next();
|
|
} while (next == 4);
|
|
if (next == 2) {
|
|
drawable = xmlPullParser.getName().equals("animated-vector") ? AnimatedVectorDrawableCompat.createFromXmlInner(context, resources, xmlPullParser, attributeSet, theme) : Drawable.createFromXmlInner(resources, xmlPullParser, attributeSet, theme);
|
|
} else {
|
|
throw new XmlPullParserException(xmlPullParser.getPositionDescription() + TRANSITION_MISSING_DRAWABLE_ERROR);
|
|
}
|
|
}
|
|
if (drawable == null) {
|
|
throw new XmlPullParserException(xmlPullParser.getPositionDescription() + TRANSITION_MISSING_DRAWABLE_ERROR);
|
|
} else if (resourceId != -1 && resourceId2 != -1) {
|
|
return this.mState.addTransition(resourceId, resourceId2, drawable, z2);
|
|
} else {
|
|
throw new XmlPullParserException(xmlPullParser.getPositionDescription() + TRANSITION_MISSING_FROM_TO_ID);
|
|
}
|
|
}
|
|
|
|
private boolean selectTransition(int i) {
|
|
int i2;
|
|
int indexOfTransition;
|
|
Transition transition;
|
|
Transition transition2 = this.mTransition;
|
|
if (transition2 == null) {
|
|
i2 = getCurrentIndex();
|
|
} else if (i == this.mTransitionToIndex) {
|
|
return true;
|
|
} else {
|
|
if (i != this.mTransitionFromIndex || !transition2.canReverse()) {
|
|
i2 = this.mTransitionToIndex;
|
|
transition2.stop();
|
|
} else {
|
|
transition2.reverse();
|
|
this.mTransitionToIndex = this.mTransitionFromIndex;
|
|
this.mTransitionFromIndex = i;
|
|
return true;
|
|
}
|
|
}
|
|
this.mTransition = null;
|
|
this.mTransitionFromIndex = -1;
|
|
this.mTransitionToIndex = -1;
|
|
AnimatedStateListState animatedStateListState = this.mState;
|
|
int keyframeIdAt = animatedStateListState.getKeyframeIdAt(i2);
|
|
int keyframeIdAt2 = animatedStateListState.getKeyframeIdAt(i);
|
|
if (keyframeIdAt2 == 0 || keyframeIdAt == 0 || (indexOfTransition = animatedStateListState.indexOfTransition(keyframeIdAt, keyframeIdAt2)) < 0) {
|
|
return false;
|
|
}
|
|
boolean transitionHasReversibleFlag = animatedStateListState.transitionHasReversibleFlag(keyframeIdAt, keyframeIdAt2);
|
|
selectDrawable(indexOfTransition);
|
|
Drawable current = getCurrent();
|
|
if (current instanceof AnimationDrawable) {
|
|
transition = new AnimationDrawableTransition((AnimationDrawable) current, animatedStateListState.isTransitionReversed(keyframeIdAt, keyframeIdAt2), transitionHasReversibleFlag);
|
|
} else if (current instanceof AnimatedVectorDrawableCompat) {
|
|
transition = new AnimatedVectorDrawableTransition((AnimatedVectorDrawableCompat) current);
|
|
} else {
|
|
if (current instanceof Animatable) {
|
|
transition = new AnimatableTransition((Animatable) current);
|
|
}
|
|
return false;
|
|
}
|
|
transition.start();
|
|
this.mTransition = transition;
|
|
this.mTransitionFromIndex = i2;
|
|
this.mTransitionToIndex = i;
|
|
return true;
|
|
}
|
|
|
|
private void updateStateFromTypedArray(TypedArray typedArray) {
|
|
AnimatedStateListState animatedStateListState = this.mState;
|
|
animatedStateListState.mChangingConfigurations |= typedArray.getChangingConfigurations();
|
|
animatedStateListState.setVariablePadding(typedArray.getBoolean(R.styleable.AnimatedStateListDrawableCompat_android_variablePadding, animatedStateListState.mVariablePadding));
|
|
animatedStateListState.setConstantSize(typedArray.getBoolean(R.styleable.AnimatedStateListDrawableCompat_android_constantSize, animatedStateListState.mConstantSize));
|
|
animatedStateListState.setEnterFadeDuration(typedArray.getInt(R.styleable.AnimatedStateListDrawableCompat_android_enterFadeDuration, animatedStateListState.mEnterFadeDuration));
|
|
animatedStateListState.setExitFadeDuration(typedArray.getInt(R.styleable.AnimatedStateListDrawableCompat_android_exitFadeDuration, animatedStateListState.mExitFadeDuration));
|
|
setDither(typedArray.getBoolean(R.styleable.AnimatedStateListDrawableCompat_android_dither, animatedStateListState.mDither));
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.StateListDrawable
|
|
public /* bridge */ /* synthetic */ void addState(int[] iArr, Drawable drawable) {
|
|
super.addState(iArr, drawable);
|
|
}
|
|
|
|
public void addState(@NonNull int[] iArr, @NonNull Drawable drawable, int i) {
|
|
if (drawable != null) {
|
|
this.mState.addStateSet(iArr, drawable, i);
|
|
onStateChange(getState());
|
|
return;
|
|
}
|
|
throw new IllegalArgumentException("Drawable must not be null");
|
|
}
|
|
|
|
public <T extends Drawable & Animatable> void addTransition(int i, int i2, @NonNull T t, boolean z2) {
|
|
if (t != null) {
|
|
this.mState.addTransition(i, i2, t, z2);
|
|
return;
|
|
}
|
|
throw new IllegalArgumentException("Transition drawable must not be null");
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.StateListDrawable, androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
@RequiresApi(21)
|
|
public /* bridge */ /* synthetic */ void applyTheme(@NonNull Resources.Theme theme) {
|
|
super.applyTheme(theme);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
@RequiresApi(21)
|
|
public /* bridge */ /* synthetic */ boolean canApplyTheme() {
|
|
return super.canApplyTheme();
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.StateListDrawable, androidx.appcompat.graphics.drawable.DrawableContainer
|
|
public void clearMutated() {
|
|
super.clearMutated();
|
|
this.mMutated = false;
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.StateListDrawable, androidx.appcompat.graphics.drawable.DrawableContainer
|
|
public AnimatedStateListState cloneConstantState() {
|
|
return new AnimatedStateListState(this.mState, this, null);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public /* bridge */ /* synthetic */ void draw(@NonNull Canvas canvas) {
|
|
super.draw(canvas);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public /* bridge */ /* synthetic */ int getAlpha() {
|
|
return super.getAlpha();
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public /* bridge */ /* synthetic */ int getChangingConfigurations() {
|
|
return super.getChangingConfigurations();
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
@NonNull
|
|
public /* bridge */ /* synthetic */ Drawable getCurrent() {
|
|
return super.getCurrent();
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public /* bridge */ /* synthetic */ void getHotspotBounds(@NonNull Rect rect) {
|
|
super.getHotspotBounds(rect);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public /* bridge */ /* synthetic */ int getIntrinsicHeight() {
|
|
return super.getIntrinsicHeight();
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public /* bridge */ /* synthetic */ int getIntrinsicWidth() {
|
|
return super.getIntrinsicWidth();
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public /* bridge */ /* synthetic */ int getMinimumHeight() {
|
|
return super.getMinimumHeight();
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public /* bridge */ /* synthetic */ int getMinimumWidth() {
|
|
return super.getMinimumWidth();
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public /* bridge */ /* synthetic */ int getOpacity() {
|
|
return super.getOpacity();
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
@RequiresApi(21)
|
|
public /* bridge */ /* synthetic */ void getOutline(@NonNull Outline outline) {
|
|
super.getOutline(outline);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public /* bridge */ /* synthetic */ boolean getPadding(@NonNull Rect rect) {
|
|
return super.getPadding(rect);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.StateListDrawable
|
|
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.AnimatedStateListDrawableCompat);
|
|
setVisible(obtainAttributes.getBoolean(R.styleable.AnimatedStateListDrawableCompat_android_visible, true), true);
|
|
updateStateFromTypedArray(obtainAttributes);
|
|
updateDensity(resources);
|
|
obtainAttributes.recycle();
|
|
inflateChildElements(context, resources, xmlPullParser, attributeSet, theme);
|
|
init();
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable.Callback
|
|
public /* bridge */ /* synthetic */ void invalidateDrawable(@NonNull Drawable drawable) {
|
|
super.invalidateDrawable(drawable);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public /* bridge */ /* synthetic */ boolean isAutoMirrored() {
|
|
return super.isAutoMirrored();
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.StateListDrawable, androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public boolean isStateful() {
|
|
return true;
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public void jumpToCurrentState() {
|
|
super.jumpToCurrentState();
|
|
Transition transition = this.mTransition;
|
|
if (transition != null) {
|
|
transition.stop();
|
|
this.mTransition = null;
|
|
selectDrawable(this.mTransitionToIndex);
|
|
this.mTransitionToIndex = -1;
|
|
this.mTransitionFromIndex = -1;
|
|
}
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.StateListDrawable, androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public Drawable mutate() {
|
|
if (!this.mMutated && super.mutate() == this) {
|
|
this.mState.mutate();
|
|
this.mMutated = true;
|
|
}
|
|
return this;
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public /* bridge */ /* synthetic */ boolean onLayoutDirectionChanged(int i) {
|
|
return super.onLayoutDirectionChanged(i);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.StateListDrawable, androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public boolean onStateChange(int[] iArr) {
|
|
int indexOfKeyframe = this.mState.indexOfKeyframe(iArr);
|
|
boolean z2 = indexOfKeyframe != getCurrentIndex() && (selectTransition(indexOfKeyframe) || selectDrawable(indexOfKeyframe));
|
|
Drawable current = getCurrent();
|
|
return current != null ? z2 | current.setState(iArr) : z2;
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable.Callback
|
|
public /* bridge */ /* synthetic */ void scheduleDrawable(@NonNull Drawable drawable, @NonNull Runnable runnable, long j) {
|
|
super.scheduleDrawable(drawable, runnable, j);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public /* bridge */ /* synthetic */ void setAlpha(int i) {
|
|
super.setAlpha(i);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public /* bridge */ /* synthetic */ void setAutoMirrored(boolean z2) {
|
|
super.setAutoMirrored(z2);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public /* bridge */ /* synthetic */ void setColorFilter(ColorFilter colorFilter) {
|
|
super.setColorFilter(colorFilter);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.StateListDrawable, androidx.appcompat.graphics.drawable.DrawableContainer
|
|
public void setConstantState(@NonNull DrawableContainer.DrawableContainerState drawableContainerState) {
|
|
super.setConstantState(drawableContainerState);
|
|
if (drawableContainerState instanceof AnimatedStateListState) {
|
|
this.mState = (AnimatedStateListState) drawableContainerState;
|
|
}
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public /* bridge */ /* synthetic */ void setDither(boolean z2) {
|
|
super.setDither(z2);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer
|
|
public /* bridge */ /* synthetic */ void setEnterFadeDuration(int i) {
|
|
super.setEnterFadeDuration(i);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer
|
|
public /* bridge */ /* synthetic */ void setExitFadeDuration(int i) {
|
|
super.setExitFadeDuration(i);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public /* bridge */ /* synthetic */ void setHotspot(float f, float f2) {
|
|
super.setHotspot(f, f2);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public /* bridge */ /* synthetic */ void setHotspotBounds(int i, int i2, int i3, int i4) {
|
|
super.setHotspotBounds(i, i2, i3, i4);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable, androidx.core.graphics.drawable.TintAwareDrawable
|
|
public /* bridge */ /* synthetic */ void setTintList(ColorStateList colorStateList) {
|
|
super.setTintList(colorStateList);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable, androidx.core.graphics.drawable.TintAwareDrawable
|
|
public /* bridge */ /* synthetic */ void setTintMode(@NonNull PorterDuff.Mode mode) {
|
|
super.setTintMode(mode);
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable
|
|
public boolean setVisible(boolean z2, boolean z3) {
|
|
boolean visible = super.setVisible(z2, z3);
|
|
Transition transition = this.mTransition;
|
|
if (transition != null && (visible || z3)) {
|
|
if (z2) {
|
|
transition.start();
|
|
} else {
|
|
jumpToCurrentState();
|
|
}
|
|
}
|
|
return visible;
|
|
}
|
|
|
|
@Override // androidx.appcompat.graphics.drawable.DrawableContainer, android.graphics.drawable.Drawable.Callback
|
|
public /* bridge */ /* synthetic */ void unscheduleDrawable(@NonNull Drawable drawable, @NonNull Runnable runnable) {
|
|
super.unscheduleDrawable(drawable, runnable);
|
|
}
|
|
}
|