ADD week 5

This commit is contained in:
2025-03-31 16:33:42 +02:00
parent 86f265f22d
commit bf645048e6
4927 changed files with 544053 additions and 0 deletions

View File

@ -0,0 +1,17 @@
package com.google.android.material.progressindicator;
import android.content.ContentResolver;
import android.provider.Settings;
/* loaded from: classes.dex */
public class AnimatorDurationScaleProvider {
private static float defaultSystemAnimatorDurationScale = 1.0f;
public static void setDefaultSystemAnimatorDurationScale(float f) {
defaultSystemAnimatorDurationScale = f;
}
public float getSystemAnimatorDurationScale(ContentResolver contentResolver) {
return Settings.Global.getFloat(contentResolver, "animator_duration_scale", 1.0f);
}
}

View File

@ -0,0 +1,461 @@
package com.google.android.material.progressindicator;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ProgressBar;
import androidx.core.view.ViewCompat;
import androidx.vectordrawable.graphics.drawable.Animatable2Compat;
import com.google.android.material.R;
import com.google.android.material.color.MaterialColors;
import com.google.android.material.internal.ThemeEnforcement;
import com.google.android.material.progressindicator.BaseProgressIndicatorSpec;
import com.google.android.material.theme.overlay.MaterialThemeOverlay;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Arrays;
/* loaded from: classes.dex */
public abstract class BaseProgressIndicator<S extends BaseProgressIndicatorSpec> extends ProgressBar {
static final float DEFAULT_OPACITY = 0.2f;
static final int DEF_STYLE_RES = R.style.Widget_MaterialComponents_ProgressIndicator;
public static final int HIDE_INWARD = 2;
public static final int HIDE_NONE = 0;
public static final int HIDE_OUTWARD = 1;
static final int MAX_ALPHA = 255;
static final int MAX_HIDE_DELAY = 1000;
public static final int SHOW_INWARD = 2;
public static final int SHOW_NONE = 0;
public static final int SHOW_OUTWARD = 1;
AnimatorDurationScaleProvider animatorDurationScaleProvider;
private final Runnable delayedHide;
private final Runnable delayedShow;
private final Animatable2Compat.AnimationCallback hideAnimationCallback;
private boolean isIndeterminateModeChangeRequested;
private boolean isParentDoneInitializing;
private long lastShowStartTime;
private final int minHideDelay;
private final int showDelay;
S spec;
private int storedProgress;
private boolean storedProgressAnimated;
private final Animatable2Compat.AnimationCallback switchIndeterminateModeCallback;
private int visibilityAfterHide;
@Retention(RetentionPolicy.SOURCE)
public @interface HideAnimationBehavior {
}
@Retention(RetentionPolicy.SOURCE)
public @interface ShowAnimationBehavior {
}
abstract S createSpec(Context context, AttributeSet attributeSet);
protected BaseProgressIndicator(Context context, AttributeSet attributeSet, int i, int i2) {
super(MaterialThemeOverlay.wrap(context, attributeSet, i, DEF_STYLE_RES), attributeSet, i);
this.lastShowStartTime = -1L;
this.isIndeterminateModeChangeRequested = false;
this.visibilityAfterHide = 4;
this.delayedShow = new Runnable() { // from class: com.google.android.material.progressindicator.BaseProgressIndicator.1
@Override // java.lang.Runnable
public void run() {
BaseProgressIndicator.this.internalShow();
}
};
this.delayedHide = new Runnable() { // from class: com.google.android.material.progressindicator.BaseProgressIndicator.2
@Override // java.lang.Runnable
public void run() {
BaseProgressIndicator.this.internalHide();
BaseProgressIndicator.this.lastShowStartTime = -1L;
}
};
this.switchIndeterminateModeCallback = new Animatable2Compat.AnimationCallback() { // from class: com.google.android.material.progressindicator.BaseProgressIndicator.3
@Override // androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback
public void onAnimationEnd(Drawable drawable) {
BaseProgressIndicator.this.setIndeterminate(false);
BaseProgressIndicator baseProgressIndicator = BaseProgressIndicator.this;
baseProgressIndicator.setProgressCompat(baseProgressIndicator.storedProgress, BaseProgressIndicator.this.storedProgressAnimated);
}
};
this.hideAnimationCallback = new Animatable2Compat.AnimationCallback() { // from class: com.google.android.material.progressindicator.BaseProgressIndicator.4
@Override // androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback
public void onAnimationEnd(Drawable drawable) {
super.onAnimationEnd(drawable);
if (BaseProgressIndicator.this.isIndeterminateModeChangeRequested) {
return;
}
BaseProgressIndicator baseProgressIndicator = BaseProgressIndicator.this;
baseProgressIndicator.setVisibility(baseProgressIndicator.visibilityAfterHide);
}
};
Context context2 = getContext();
this.spec = createSpec(context2, attributeSet);
TypedArray obtainStyledAttributes = ThemeEnforcement.obtainStyledAttributes(context2, attributeSet, R.styleable.BaseProgressIndicator, i, i2, new int[0]);
this.showDelay = obtainStyledAttributes.getInt(R.styleable.BaseProgressIndicator_showDelay, -1);
this.minHideDelay = Math.min(obtainStyledAttributes.getInt(R.styleable.BaseProgressIndicator_minHideDelay, -1), 1000);
obtainStyledAttributes.recycle();
this.animatorDurationScaleProvider = new AnimatorDurationScaleProvider();
this.isParentDoneInitializing = true;
}
private void registerAnimationCallbacks() {
if (getProgressDrawable() != null && getIndeterminateDrawable() != null) {
getIndeterminateDrawable().getAnimatorDelegate().registerAnimatorsCompleteCallback(this.switchIndeterminateModeCallback);
}
if (getProgressDrawable() != null) {
getProgressDrawable().registerAnimationCallback(this.hideAnimationCallback);
}
if (getIndeterminateDrawable() != null) {
getIndeterminateDrawable().registerAnimationCallback(this.hideAnimationCallback);
}
}
private void unregisterAnimationCallbacks() {
if (getIndeterminateDrawable() != null) {
getIndeterminateDrawable().unregisterAnimationCallback(this.hideAnimationCallback);
getIndeterminateDrawable().getAnimatorDelegate().unregisterAnimatorsCompleteCallback();
}
if (getProgressDrawable() != null) {
getProgressDrawable().unregisterAnimationCallback(this.hideAnimationCallback);
}
}
public void show() {
if (this.showDelay > 0) {
removeCallbacks(this.delayedShow);
postDelayed(this.delayedShow, this.showDelay);
} else {
this.delayedShow.run();
}
}
/* JADX INFO: Access modifiers changed from: private */
public void internalShow() {
if (this.minHideDelay > 0) {
this.lastShowStartTime = SystemClock.uptimeMillis();
}
setVisibility(0);
}
public void hide() {
if (getVisibility() != 0) {
removeCallbacks(this.delayedShow);
return;
}
removeCallbacks(this.delayedHide);
long uptimeMillis = SystemClock.uptimeMillis() - this.lastShowStartTime;
int i = this.minHideDelay;
if (uptimeMillis >= i) {
this.delayedHide.run();
} else {
postDelayed(this.delayedHide, i - uptimeMillis);
}
}
/* JADX INFO: Access modifiers changed from: private */
public void internalHide() {
((DrawableWithAnimatedVisibilityChange) getCurrentDrawable()).setVisible(false, false, true);
if (isNoLongerNeedToBeVisible()) {
setVisibility(4);
}
}
@Override // android.view.View
protected void onVisibilityChanged(View view, int i) {
super.onVisibilityChanged(view, i);
applyNewVisibility(i == 0);
}
@Override // android.view.View
protected void onWindowVisibilityChanged(int i) {
super.onWindowVisibilityChanged(i);
applyNewVisibility(false);
}
protected void applyNewVisibility(boolean z) {
if (this.isParentDoneInitializing) {
((DrawableWithAnimatedVisibilityChange) getCurrentDrawable()).setVisible(visibleToUser(), false, z);
}
}
@Override // android.widget.ProgressBar, android.view.View
protected void onAttachedToWindow() {
super.onAttachedToWindow();
registerAnimationCallbacks();
if (visibleToUser()) {
internalShow();
}
}
@Override // android.widget.ProgressBar, android.view.View
protected void onDetachedFromWindow() {
removeCallbacks(this.delayedHide);
removeCallbacks(this.delayedShow);
((DrawableWithAnimatedVisibilityChange) getCurrentDrawable()).hideNow();
unregisterAnimationCallbacks();
super.onDetachedFromWindow();
}
@Override // android.widget.ProgressBar, android.view.View
protected synchronized void onDraw(Canvas canvas) {
int save = canvas.save();
if (getPaddingLeft() != 0 || getPaddingTop() != 0) {
canvas.translate(getPaddingLeft(), getPaddingTop());
}
if (getPaddingRight() != 0 || getPaddingBottom() != 0) {
canvas.clipRect(0, 0, getWidth() - (getPaddingLeft() + getPaddingRight()), getHeight() - (getPaddingTop() + getPaddingBottom()));
}
getCurrentDrawable().draw(canvas);
canvas.restoreToCount(save);
}
@Override // android.widget.ProgressBar, android.view.View
protected synchronized void onMeasure(int i, int i2) {
int preferredWidth;
int preferredHeight;
DrawingDelegate<S> currentDrawingDelegate = getCurrentDrawingDelegate();
if (currentDrawingDelegate == null) {
return;
}
if (currentDrawingDelegate.getPreferredWidth() < 0) {
preferredWidth = getDefaultSize(getSuggestedMinimumWidth(), i);
} else {
preferredWidth = currentDrawingDelegate.getPreferredWidth() + getPaddingLeft() + getPaddingRight();
}
if (currentDrawingDelegate.getPreferredHeight() < 0) {
preferredHeight = getDefaultSize(getSuggestedMinimumHeight(), i2);
} else {
preferredHeight = currentDrawingDelegate.getPreferredHeight() + getPaddingTop() + getPaddingBottom();
}
setMeasuredDimension(preferredWidth, preferredHeight);
}
@Override // android.view.View
public void invalidate() {
super.invalidate();
if (getCurrentDrawable() != null) {
getCurrentDrawable().invalidateSelf();
}
}
@Override // android.widget.ProgressBar
public Drawable getCurrentDrawable() {
return isIndeterminate() ? getIndeterminateDrawable() : getProgressDrawable();
}
private DrawingDelegate<S> getCurrentDrawingDelegate() {
if (isIndeterminate()) {
if (getIndeterminateDrawable() == null) {
return null;
}
return getIndeterminateDrawable().getDrawingDelegate();
}
if (getProgressDrawable() == null) {
return null;
}
return getProgressDrawable().getDrawingDelegate();
}
@Override // android.widget.ProgressBar
public void setProgressDrawable(Drawable drawable) {
if (drawable == null) {
super.setProgressDrawable(null);
} else {
if (drawable instanceof DeterminateDrawable) {
DeterminateDrawable determinateDrawable = (DeterminateDrawable) drawable;
determinateDrawable.hideNow();
super.setProgressDrawable(determinateDrawable);
determinateDrawable.setLevelByFraction(getProgress() / getMax());
return;
}
throw new IllegalArgumentException("Cannot set framework drawable as progress drawable.");
}
}
@Override // android.widget.ProgressBar
public void setIndeterminateDrawable(Drawable drawable) {
if (drawable == null) {
super.setIndeterminateDrawable(null);
} else {
if (drawable instanceof IndeterminateDrawable) {
((DrawableWithAnimatedVisibilityChange) drawable).hideNow();
super.setIndeterminateDrawable(drawable);
return;
}
throw new IllegalArgumentException("Cannot set framework drawable as indeterminate drawable.");
}
}
@Override // android.widget.ProgressBar
public DeterminateDrawable<S> getProgressDrawable() {
return (DeterminateDrawable) super.getProgressDrawable();
}
@Override // android.widget.ProgressBar
public IndeterminateDrawable<S> getIndeterminateDrawable() {
return (IndeterminateDrawable) super.getIndeterminateDrawable();
}
boolean visibleToUser() {
return ViewCompat.isAttachedToWindow(this) && getWindowVisibility() == 0 && isEffectivelyVisible();
}
boolean isEffectivelyVisible() {
View view = this;
while (view.getVisibility() == 0) {
Object parent = view.getParent();
if (parent == null) {
return getWindowVisibility() == 0;
}
if (!(parent instanceof View)) {
return true;
}
view = (View) parent;
}
return false;
}
private boolean isNoLongerNeedToBeVisible() {
return (getProgressDrawable() == null || !getProgressDrawable().isVisible()) && (getIndeterminateDrawable() == null || !getIndeterminateDrawable().isVisible());
}
@Override // android.widget.ProgressBar
public synchronized void setIndeterminate(boolean z) {
if (z == isIndeterminate()) {
return;
}
DrawableWithAnimatedVisibilityChange drawableWithAnimatedVisibilityChange = (DrawableWithAnimatedVisibilityChange) getCurrentDrawable();
if (drawableWithAnimatedVisibilityChange != null) {
drawableWithAnimatedVisibilityChange.hideNow();
}
super.setIndeterminate(z);
DrawableWithAnimatedVisibilityChange drawableWithAnimatedVisibilityChange2 = (DrawableWithAnimatedVisibilityChange) getCurrentDrawable();
if (drawableWithAnimatedVisibilityChange2 != null) {
drawableWithAnimatedVisibilityChange2.setVisible(visibleToUser(), false, false);
}
if ((drawableWithAnimatedVisibilityChange2 instanceof IndeterminateDrawable) && visibleToUser()) {
((IndeterminateDrawable) drawableWithAnimatedVisibilityChange2).getAnimatorDelegate().startAnimator();
}
this.isIndeterminateModeChangeRequested = false;
}
public int getTrackThickness() {
return this.spec.trackThickness;
}
public void setTrackThickness(int i) {
if (this.spec.trackThickness != i) {
this.spec.trackThickness = i;
requestLayout();
}
}
public int[] getIndicatorColor() {
return this.spec.indicatorColors;
}
public void setIndicatorColor(int... iArr) {
if (iArr.length == 0) {
iArr = new int[]{MaterialColors.getColor(getContext(), R.attr.colorPrimary, -1)};
}
if (Arrays.equals(getIndicatorColor(), iArr)) {
return;
}
this.spec.indicatorColors = iArr;
getIndeterminateDrawable().getAnimatorDelegate().invalidateSpecValues();
invalidate();
}
public int getTrackColor() {
return this.spec.trackColor;
}
public void setTrackColor(int i) {
if (this.spec.trackColor != i) {
this.spec.trackColor = i;
invalidate();
}
}
public int getTrackCornerRadius() {
return this.spec.trackCornerRadius;
}
public void setTrackCornerRadius(int i) {
if (this.spec.trackCornerRadius != i) {
S s = this.spec;
s.trackCornerRadius = Math.min(i, s.trackThickness / 2);
}
}
public int getShowAnimationBehavior() {
return this.spec.showAnimationBehavior;
}
public void setShowAnimationBehavior(int i) {
this.spec.showAnimationBehavior = i;
invalidate();
}
public int getHideAnimationBehavior() {
return this.spec.hideAnimationBehavior;
}
public void setHideAnimationBehavior(int i) {
this.spec.hideAnimationBehavior = i;
invalidate();
}
@Override // android.widget.ProgressBar
public synchronized void setProgress(int i) {
if (isIndeterminate()) {
return;
}
setProgressCompat(i, false);
}
public void setProgressCompat(int i, boolean z) {
if (isIndeterminate()) {
if (getProgressDrawable() != null) {
this.storedProgress = i;
this.storedProgressAnimated = z;
this.isIndeterminateModeChangeRequested = true;
if (!getIndeterminateDrawable().isVisible() || this.animatorDurationScaleProvider.getSystemAnimatorDurationScale(getContext().getContentResolver()) == 0.0f) {
this.switchIndeterminateModeCallback.onAnimationEnd(getIndeterminateDrawable());
return;
} else {
getIndeterminateDrawable().getAnimatorDelegate().requestCancelAnimatorAfterCurrentCycle();
return;
}
}
return;
}
super.setProgress(i);
if (getProgressDrawable() == null || z) {
return;
}
getProgressDrawable().jumpToCurrentState();
}
public void setVisibilityAfterHide(int i) {
if (i != 0 && i != 4 && i != 8) {
throw new IllegalArgumentException("The component's visibility must be one of VISIBLE, INVISIBLE, and GONE defined in View.");
}
this.visibilityAfterHide = i;
}
public void setAnimatorDurationScaleProvider(AnimatorDurationScaleProvider animatorDurationScaleProvider) {
this.animatorDurationScaleProvider = animatorDurationScaleProvider;
if (getProgressDrawable() != null) {
getProgressDrawable().animatorDurationScaleProvider = animatorDurationScaleProvider;
}
if (getIndeterminateDrawable() != null) {
getIndeterminateDrawable().animatorDurationScaleProvider = animatorDurationScaleProvider;
}
}
}

View File

@ -0,0 +1,69 @@
package com.google.android.material.progressindicator;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import com.google.android.material.R;
import com.google.android.material.color.MaterialColors;
import com.google.android.material.internal.ThemeEnforcement;
import com.google.android.material.resources.MaterialResources;
/* loaded from: classes.dex */
public abstract class BaseProgressIndicatorSpec {
public int hideAnimationBehavior;
public int[] indicatorColors = new int[0];
public int showAnimationBehavior;
public int trackColor;
public int trackCornerRadius;
public int trackThickness;
public boolean isHideAnimationEnabled() {
return this.hideAnimationBehavior != 0;
}
public boolean isShowAnimationEnabled() {
return this.showAnimationBehavior != 0;
}
abstract void validateSpec();
protected BaseProgressIndicatorSpec(Context context, AttributeSet attributeSet, int i, int i2) {
int dimensionPixelSize = context.getResources().getDimensionPixelSize(R.dimen.mtrl_progress_track_thickness);
TypedArray obtainStyledAttributes = ThemeEnforcement.obtainStyledAttributes(context, attributeSet, R.styleable.BaseProgressIndicator, i, i2, new int[0]);
this.trackThickness = MaterialResources.getDimensionPixelSize(context, obtainStyledAttributes, R.styleable.BaseProgressIndicator_trackThickness, dimensionPixelSize);
this.trackCornerRadius = Math.min(MaterialResources.getDimensionPixelSize(context, obtainStyledAttributes, R.styleable.BaseProgressIndicator_trackCornerRadius, 0), this.trackThickness / 2);
this.showAnimationBehavior = obtainStyledAttributes.getInt(R.styleable.BaseProgressIndicator_showAnimationBehavior, 0);
this.hideAnimationBehavior = obtainStyledAttributes.getInt(R.styleable.BaseProgressIndicator_hideAnimationBehavior, 0);
loadIndicatorColors(context, obtainStyledAttributes);
loadTrackColor(context, obtainStyledAttributes);
obtainStyledAttributes.recycle();
}
private void loadIndicatorColors(Context context, TypedArray typedArray) {
if (!typedArray.hasValue(R.styleable.BaseProgressIndicator_indicatorColor)) {
this.indicatorColors = new int[]{MaterialColors.getColor(context, R.attr.colorPrimary, -1)};
return;
}
if (typedArray.peekValue(R.styleable.BaseProgressIndicator_indicatorColor).type != 1) {
this.indicatorColors = new int[]{typedArray.getColor(R.styleable.BaseProgressIndicator_indicatorColor, -1)};
return;
}
int[] intArray = context.getResources().getIntArray(typedArray.getResourceId(R.styleable.BaseProgressIndicator_indicatorColor, -1));
this.indicatorColors = intArray;
if (intArray.length == 0) {
throw new IllegalArgumentException("indicatorColors cannot be empty when indicatorColor is not used.");
}
}
private void loadTrackColor(Context context, TypedArray typedArray) {
if (typedArray.hasValue(R.styleable.BaseProgressIndicator_trackColor)) {
this.trackColor = typedArray.getColor(R.styleable.BaseProgressIndicator_trackColor, -1);
return;
}
this.trackColor = this.indicatorColors[0];
TypedArray obtainStyledAttributes = context.getTheme().obtainStyledAttributes(new int[]{android.R.attr.disabledAlpha});
float f = obtainStyledAttributes.getFloat(0, 0.2f);
obtainStyledAttributes.recycle();
this.trackColor = MaterialColors.compositeARGBWithAlpha(this.trackColor, (int) (f * 255.0f));
}
}

View File

@ -0,0 +1,99 @@
package com.google.android.material.progressindicator;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import com.google.android.material.color.MaterialColors;
/* loaded from: classes.dex */
final class CircularDrawingDelegate extends DrawingDelegate<CircularProgressIndicatorSpec> {
private float adjustedRadius;
private int arcDirectionFactor;
private float displayedCornerRadius;
private float displayedTrackThickness;
public CircularDrawingDelegate(CircularProgressIndicatorSpec circularProgressIndicatorSpec) {
super(circularProgressIndicatorSpec);
this.arcDirectionFactor = 1;
}
@Override // com.google.android.material.progressindicator.DrawingDelegate
public int getPreferredWidth() {
return getSize();
}
@Override // com.google.android.material.progressindicator.DrawingDelegate
public int getPreferredHeight() {
return getSize();
}
@Override // com.google.android.material.progressindicator.DrawingDelegate
public void adjustCanvas(Canvas canvas, Rect rect, float f) {
float width = rect.width() / getPreferredWidth();
float height = rect.height() / getPreferredHeight();
float f2 = (((CircularProgressIndicatorSpec) this.spec).indicatorSize / 2.0f) + ((CircularProgressIndicatorSpec) this.spec).indicatorInset;
canvas.translate((f2 * width) + rect.left, (f2 * height) + rect.top);
canvas.scale(width, height);
canvas.rotate(-90.0f);
float f3 = -f2;
canvas.clipRect(f3, f3, f2, f2);
this.arcDirectionFactor = ((CircularProgressIndicatorSpec) this.spec).indicatorDirection == 0 ? 1 : -1;
this.displayedTrackThickness = ((CircularProgressIndicatorSpec) this.spec).trackThickness * f;
this.displayedCornerRadius = ((CircularProgressIndicatorSpec) this.spec).trackCornerRadius * f;
this.adjustedRadius = (((CircularProgressIndicatorSpec) this.spec).indicatorSize - ((CircularProgressIndicatorSpec) this.spec).trackThickness) / 2.0f;
if ((this.drawable.isShowing() && ((CircularProgressIndicatorSpec) this.spec).showAnimationBehavior == 2) || (this.drawable.isHiding() && ((CircularProgressIndicatorSpec) this.spec).hideAnimationBehavior == 1)) {
this.adjustedRadius += ((1.0f - f) * ((CircularProgressIndicatorSpec) this.spec).trackThickness) / 2.0f;
} else if ((this.drawable.isShowing() && ((CircularProgressIndicatorSpec) this.spec).showAnimationBehavior == 1) || (this.drawable.isHiding() && ((CircularProgressIndicatorSpec) this.spec).hideAnimationBehavior == 2)) {
this.adjustedRadius -= ((1.0f - f) * ((CircularProgressIndicatorSpec) this.spec).trackThickness) / 2.0f;
}
}
@Override // com.google.android.material.progressindicator.DrawingDelegate
void fillIndicator(Canvas canvas, Paint paint, float f, float f2, int i) {
if (f == f2) {
return;
}
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeCap(Paint.Cap.BUTT);
paint.setAntiAlias(true);
paint.setColor(i);
paint.setStrokeWidth(this.displayedTrackThickness);
int i2 = this.arcDirectionFactor;
float f3 = f * 360.0f * i2;
float f4 = (f2 >= f ? f2 - f : (1.0f + f2) - f) * 360.0f * i2;
float f5 = this.adjustedRadius;
canvas.drawArc(new RectF(-f5, -f5, f5, f5), f3, f4, false, paint);
if (this.displayedCornerRadius <= 0.0f || Math.abs(f4) >= 360.0f) {
return;
}
paint.setStyle(Paint.Style.FILL);
drawRoundedEnd(canvas, paint, this.displayedTrackThickness, this.displayedCornerRadius, f3);
drawRoundedEnd(canvas, paint, this.displayedTrackThickness, this.displayedCornerRadius, f3 + f4);
}
@Override // com.google.android.material.progressindicator.DrawingDelegate
void fillTrack(Canvas canvas, Paint paint) {
int compositeARGBWithAlpha = MaterialColors.compositeARGBWithAlpha(((CircularProgressIndicatorSpec) this.spec).trackColor, this.drawable.getAlpha());
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeCap(Paint.Cap.BUTT);
paint.setAntiAlias(true);
paint.setColor(compositeARGBWithAlpha);
paint.setStrokeWidth(this.displayedTrackThickness);
float f = this.adjustedRadius;
canvas.drawArc(new RectF(-f, -f, f, f), 0.0f, 360.0f, false, paint);
}
private int getSize() {
return ((CircularProgressIndicatorSpec) this.spec).indicatorSize + (((CircularProgressIndicatorSpec) this.spec).indicatorInset * 2);
}
private void drawRoundedEnd(Canvas canvas, Paint paint, float f, float f2, float f3) {
canvas.save();
canvas.rotate(f3);
float f4 = this.adjustedRadius;
float f5 = f / 2.0f;
canvas.drawRoundRect(new RectF(f4 - f5, f2, f4 + f5, -f2), f2, f2, paint);
canvas.restore();
}
}

View File

@ -0,0 +1,203 @@
package com.google.android.material.progressindicator;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.util.Property;
import androidx.interpolator.view.animation.FastOutSlowInInterpolator;
import androidx.vectordrawable.graphics.drawable.Animatable2Compat;
import com.google.android.material.animation.ArgbEvaluatorCompat;
import com.google.android.material.color.MaterialColors;
/* loaded from: classes.dex */
final class CircularIndeterminateAnimatorDelegate extends IndeterminateAnimatorDelegate<ObjectAnimator> {
private static final int CONSTANT_ROTATION_DEGREES = 1520;
private static final int DURATION_TO_COLLAPSE_IN_MS = 667;
private static final int DURATION_TO_COMPLETE_END_IN_MS = 333;
private static final int DURATION_TO_EXPAND_IN_MS = 667;
private static final int DURATION_TO_FADE_IN_MS = 333;
private static final int EXTRA_DEGREES_PER_CYCLE = 250;
private static final int TAIL_DEGREES_OFFSET = -20;
private static final int TOTAL_CYCLES = 4;
private static final int TOTAL_DURATION_IN_MS = 5400;
private float animationFraction;
private ObjectAnimator animator;
Animatable2Compat.AnimationCallback animatorCompleteCallback;
private final BaseProgressIndicatorSpec baseSpec;
private ObjectAnimator completeEndAnimator;
private float completeEndFraction;
private int indicatorColorIndexOffset;
private final FastOutSlowInInterpolator interpolator;
private static final int[] DELAY_TO_EXPAND_IN_MS = {0, 1350, 2700, 4050};
private static final int[] DELAY_TO_COLLAPSE_IN_MS = {667, 2017, 3367, 4717};
private static final int[] DELAY_TO_FADE_IN_MS = {1000, 2350, 3700, 5050};
private static final Property<CircularIndeterminateAnimatorDelegate, Float> ANIMATION_FRACTION = new Property<CircularIndeterminateAnimatorDelegate, Float>(Float.class, "animationFraction") { // from class: com.google.android.material.progressindicator.CircularIndeterminateAnimatorDelegate.3
@Override // android.util.Property
public Float get(CircularIndeterminateAnimatorDelegate circularIndeterminateAnimatorDelegate) {
return Float.valueOf(circularIndeterminateAnimatorDelegate.getAnimationFraction());
}
@Override // android.util.Property
public void set(CircularIndeterminateAnimatorDelegate circularIndeterminateAnimatorDelegate, Float f) {
circularIndeterminateAnimatorDelegate.setAnimationFraction(f.floatValue());
}
};
private static final Property<CircularIndeterminateAnimatorDelegate, Float> COMPLETE_END_FRACTION = new Property<CircularIndeterminateAnimatorDelegate, Float>(Float.class, "completeEndFraction") { // from class: com.google.android.material.progressindicator.CircularIndeterminateAnimatorDelegate.4
@Override // android.util.Property
public Float get(CircularIndeterminateAnimatorDelegate circularIndeterminateAnimatorDelegate) {
return Float.valueOf(circularIndeterminateAnimatorDelegate.getCompleteEndFraction());
}
@Override // android.util.Property
public void set(CircularIndeterminateAnimatorDelegate circularIndeterminateAnimatorDelegate, Float f) {
circularIndeterminateAnimatorDelegate.setCompleteEndFraction(f.floatValue());
}
};
/* JADX INFO: Access modifiers changed from: private */
public float getAnimationFraction() {
return this.animationFraction;
}
/* JADX INFO: Access modifiers changed from: private */
public float getCompleteEndFraction() {
return this.completeEndFraction;
}
/* JADX INFO: Access modifiers changed from: private */
public void setCompleteEndFraction(float f) {
this.completeEndFraction = f;
}
@Override // com.google.android.material.progressindicator.IndeterminateAnimatorDelegate
public void registerAnimatorsCompleteCallback(Animatable2Compat.AnimationCallback animationCallback) {
this.animatorCompleteCallback = animationCallback;
}
@Override // com.google.android.material.progressindicator.IndeterminateAnimatorDelegate
public void unregisterAnimatorsCompleteCallback() {
this.animatorCompleteCallback = null;
}
public CircularIndeterminateAnimatorDelegate(CircularProgressIndicatorSpec circularProgressIndicatorSpec) {
super(1);
this.indicatorColorIndexOffset = 0;
this.animatorCompleteCallback = null;
this.baseSpec = circularProgressIndicatorSpec;
this.interpolator = new FastOutSlowInInterpolator();
}
@Override // com.google.android.material.progressindicator.IndeterminateAnimatorDelegate
void startAnimator() {
maybeInitializeAnimators();
resetPropertiesForNewStart();
this.animator.start();
}
private void maybeInitializeAnimators() {
if (this.animator == null) {
ObjectAnimator ofFloat = ObjectAnimator.ofFloat(this, ANIMATION_FRACTION, 0.0f, 1.0f);
this.animator = ofFloat;
ofFloat.setDuration(5400L);
this.animator.setInterpolator(null);
this.animator.setRepeatCount(-1);
this.animator.addListener(new AnimatorListenerAdapter() { // from class: com.google.android.material.progressindicator.CircularIndeterminateAnimatorDelegate.1
@Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
public void onAnimationRepeat(Animator animator) {
super.onAnimationRepeat(animator);
CircularIndeterminateAnimatorDelegate circularIndeterminateAnimatorDelegate = CircularIndeterminateAnimatorDelegate.this;
circularIndeterminateAnimatorDelegate.indicatorColorIndexOffset = (circularIndeterminateAnimatorDelegate.indicatorColorIndexOffset + 4) % CircularIndeterminateAnimatorDelegate.this.baseSpec.indicatorColors.length;
}
});
}
if (this.completeEndAnimator == null) {
ObjectAnimator ofFloat2 = ObjectAnimator.ofFloat(this, COMPLETE_END_FRACTION, 0.0f, 1.0f);
this.completeEndAnimator = ofFloat2;
ofFloat2.setDuration(333L);
this.completeEndAnimator.setInterpolator(this.interpolator);
this.completeEndAnimator.addListener(new AnimatorListenerAdapter() { // from class: com.google.android.material.progressindicator.CircularIndeterminateAnimatorDelegate.2
@Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
public void onAnimationEnd(Animator animator) {
super.onAnimationEnd(animator);
CircularIndeterminateAnimatorDelegate.this.cancelAnimatorImmediately();
if (CircularIndeterminateAnimatorDelegate.this.animatorCompleteCallback != null) {
CircularIndeterminateAnimatorDelegate.this.animatorCompleteCallback.onAnimationEnd(CircularIndeterminateAnimatorDelegate.this.drawable);
}
}
});
}
}
@Override // com.google.android.material.progressindicator.IndeterminateAnimatorDelegate
void cancelAnimatorImmediately() {
ObjectAnimator objectAnimator = this.animator;
if (objectAnimator != null) {
objectAnimator.cancel();
}
}
@Override // com.google.android.material.progressindicator.IndeterminateAnimatorDelegate
void requestCancelAnimatorAfterCurrentCycle() {
ObjectAnimator objectAnimator = this.completeEndAnimator;
if (objectAnimator == null || objectAnimator.isRunning()) {
return;
}
if (this.drawable.isVisible()) {
this.completeEndAnimator.start();
} else {
cancelAnimatorImmediately();
}
}
@Override // com.google.android.material.progressindicator.IndeterminateAnimatorDelegate
public void invalidateSpecValues() {
resetPropertiesForNewStart();
}
private void updateSegmentPositions(int i) {
this.segmentPositions[0] = (this.animationFraction * 1520.0f) - 20.0f;
this.segmentPositions[1] = this.animationFraction * 1520.0f;
for (int i2 = 0; i2 < 4; i2++) {
float fractionInRange = getFractionInRange(i, DELAY_TO_EXPAND_IN_MS[i2], 667);
float[] fArr = this.segmentPositions;
fArr[1] = fArr[1] + (this.interpolator.getInterpolation(fractionInRange) * 250.0f);
float fractionInRange2 = getFractionInRange(i, DELAY_TO_COLLAPSE_IN_MS[i2], 667);
float[] fArr2 = this.segmentPositions;
fArr2[0] = fArr2[0] + (this.interpolator.getInterpolation(fractionInRange2) * 250.0f);
}
float[] fArr3 = this.segmentPositions;
fArr3[0] = fArr3[0] + ((this.segmentPositions[1] - this.segmentPositions[0]) * this.completeEndFraction);
float[] fArr4 = this.segmentPositions;
fArr4[0] = fArr4[0] / 360.0f;
float[] fArr5 = this.segmentPositions;
fArr5[1] = fArr5[1] / 360.0f;
}
private void maybeUpdateSegmentColors(int i) {
for (int i2 = 0; i2 < 4; i2++) {
float fractionInRange = getFractionInRange(i, DELAY_TO_FADE_IN_MS[i2], 333);
if (fractionInRange >= 0.0f && fractionInRange <= 1.0f) {
int length = (i2 + this.indicatorColorIndexOffset) % this.baseSpec.indicatorColors.length;
int length2 = (length + 1) % this.baseSpec.indicatorColors.length;
int compositeARGBWithAlpha = MaterialColors.compositeARGBWithAlpha(this.baseSpec.indicatorColors[length], this.drawable.getAlpha());
int compositeARGBWithAlpha2 = MaterialColors.compositeARGBWithAlpha(this.baseSpec.indicatorColors[length2], this.drawable.getAlpha());
this.segmentColors[0] = ArgbEvaluatorCompat.getInstance().evaluate(this.interpolator.getInterpolation(fractionInRange), Integer.valueOf(compositeARGBWithAlpha), Integer.valueOf(compositeARGBWithAlpha2)).intValue();
return;
}
}
}
void resetPropertiesForNewStart() {
this.indicatorColorIndexOffset = 0;
this.segmentColors[0] = MaterialColors.compositeARGBWithAlpha(this.baseSpec.indicatorColors[0], this.drawable.getAlpha());
this.completeEndFraction = 0.0f;
}
void setAnimationFraction(float f) {
this.animationFraction = f;
int i = (int) (f * 5400.0f);
updateSegmentPositions(i);
maybeUpdateSegmentColors(i);
this.drawable.invalidateSelf();
}
}

View File

@ -0,0 +1,81 @@
package com.google.android.material.progressindicator;
import android.content.Context;
import android.util.AttributeSet;
import com.google.android.material.R;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/* loaded from: classes.dex */
public class CircularProgressIndicator extends BaseProgressIndicator<CircularProgressIndicatorSpec> {
public static final int DEF_STYLE_RES = R.style.Widget_MaterialComponents_CircularProgressIndicator;
public static final int INDICATOR_DIRECTION_CLOCKWISE = 0;
public static final int INDICATOR_DIRECTION_COUNTERCLOCKWISE = 1;
@Retention(RetentionPolicy.SOURCE)
public @interface IndicatorDirection {
}
public CircularProgressIndicator(Context context) {
this(context, null);
}
public CircularProgressIndicator(Context context, AttributeSet attributeSet) {
this(context, attributeSet, R.attr.circularProgressIndicatorStyle);
}
public CircularProgressIndicator(Context context, AttributeSet attributeSet, int i) {
super(context, attributeSet, i, DEF_STYLE_RES);
initializeDrawables();
}
/* JADX INFO: Access modifiers changed from: package-private */
@Override // com.google.android.material.progressindicator.BaseProgressIndicator
public CircularProgressIndicatorSpec createSpec(Context context, AttributeSet attributeSet) {
return new CircularProgressIndicatorSpec(context, attributeSet);
}
private void initializeDrawables() {
setIndeterminateDrawable(IndeterminateDrawable.createCircularDrawable(getContext(), (CircularProgressIndicatorSpec) this.spec));
setProgressDrawable(DeterminateDrawable.createCircularDrawable(getContext(), (CircularProgressIndicatorSpec) this.spec));
}
@Override // com.google.android.material.progressindicator.BaseProgressIndicator
public void setTrackThickness(int i) {
super.setTrackThickness(i);
((CircularProgressIndicatorSpec) this.spec).validateSpec();
}
public int getIndicatorInset() {
return ((CircularProgressIndicatorSpec) this.spec).indicatorInset;
}
public void setIndicatorInset(int i) {
if (((CircularProgressIndicatorSpec) this.spec).indicatorInset != i) {
((CircularProgressIndicatorSpec) this.spec).indicatorInset = i;
invalidate();
}
}
public int getIndicatorSize() {
return ((CircularProgressIndicatorSpec) this.spec).indicatorSize;
}
public void setIndicatorSize(int i) {
int max = Math.max(i, getTrackThickness() * 2);
if (((CircularProgressIndicatorSpec) this.spec).indicatorSize != max) {
((CircularProgressIndicatorSpec) this.spec).indicatorSize = max;
((CircularProgressIndicatorSpec) this.spec).validateSpec();
invalidate();
}
}
public int getIndicatorDirection() {
return ((CircularProgressIndicatorSpec) this.spec).indicatorDirection;
}
public void setIndicatorDirection(int i) {
((CircularProgressIndicatorSpec) this.spec).indicatorDirection = i;
invalidate();
}
}

View File

@ -0,0 +1,39 @@
package com.google.android.material.progressindicator;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import com.google.android.material.R;
import com.google.android.material.internal.ThemeEnforcement;
import com.google.android.material.resources.MaterialResources;
/* loaded from: classes.dex */
public final class CircularProgressIndicatorSpec extends BaseProgressIndicatorSpec {
public int indicatorDirection;
public int indicatorInset;
public int indicatorSize;
@Override // com.google.android.material.progressindicator.BaseProgressIndicatorSpec
void validateSpec() {
}
public CircularProgressIndicatorSpec(Context context, AttributeSet attributeSet) {
this(context, attributeSet, R.attr.circularProgressIndicatorStyle);
}
public CircularProgressIndicatorSpec(Context context, AttributeSet attributeSet, int i) {
this(context, attributeSet, i, CircularProgressIndicator.DEF_STYLE_RES);
}
public CircularProgressIndicatorSpec(Context context, AttributeSet attributeSet, int i, int i2) {
super(context, attributeSet, i, i2);
int dimensionPixelSize = context.getResources().getDimensionPixelSize(R.dimen.mtrl_progress_circular_size_medium);
int dimensionPixelSize2 = context.getResources().getDimensionPixelSize(R.dimen.mtrl_progress_circular_inset_medium);
TypedArray obtainStyledAttributes = ThemeEnforcement.obtainStyledAttributes(context, attributeSet, R.styleable.CircularProgressIndicator, i, i2, new int[0]);
this.indicatorSize = Math.max(MaterialResources.getDimensionPixelSize(context, obtainStyledAttributes, R.styleable.CircularProgressIndicator_indicatorSize, dimensionPixelSize), this.trackThickness * 2);
this.indicatorInset = MaterialResources.getDimensionPixelSize(context, obtainStyledAttributes, R.styleable.CircularProgressIndicator_indicatorInset, dimensionPixelSize2);
this.indicatorDirection = obtainStyledAttributes.getInt(R.styleable.CircularProgressIndicator_indicatorDirectionCircular, 0);
obtainStyledAttributes.recycle();
validateSpec();
}
}

View File

@ -0,0 +1,217 @@
package com.google.android.material.progressindicator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Rect;
import androidx.dynamicanimation.animation.DynamicAnimation;
import androidx.dynamicanimation.animation.FloatPropertyCompat;
import androidx.dynamicanimation.animation.SpringAnimation;
import androidx.dynamicanimation.animation.SpringForce;
import androidx.vectordrawable.graphics.drawable.Animatable2Compat;
import com.google.android.material.color.MaterialColors;
import com.google.android.material.progressindicator.BaseProgressIndicatorSpec;
/* loaded from: classes.dex */
public final class DeterminateDrawable<S extends BaseProgressIndicatorSpec> extends DrawableWithAnimatedVisibilityChange {
private static final FloatPropertyCompat<DeterminateDrawable> INDICATOR_LENGTH_IN_LEVEL = new FloatPropertyCompat<DeterminateDrawable>("indicatorLevel") { // from class: com.google.android.material.progressindicator.DeterminateDrawable.1
@Override // androidx.dynamicanimation.animation.FloatPropertyCompat
public float getValue(DeterminateDrawable determinateDrawable) {
return determinateDrawable.getIndicatorFraction() * 10000.0f;
}
@Override // androidx.dynamicanimation.animation.FloatPropertyCompat
public void setValue(DeterminateDrawable determinateDrawable, float f) {
determinateDrawable.setIndicatorFraction(f / 10000.0f);
}
};
private static final int MAX_DRAWABLE_LEVEL = 10000;
private static final float SPRING_FORCE_STIFFNESS = 50.0f;
private DrawingDelegate<S> drawingDelegate;
private float indicatorFraction;
private boolean skipAnimationOnLevelChange;
private final SpringAnimation springAnimation;
private final SpringForce springForce;
/* JADX INFO: Access modifiers changed from: private */
public float getIndicatorFraction() {
return this.indicatorFraction;
}
DrawingDelegate<S> getDrawingDelegate() {
return this.drawingDelegate;
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, androidx.vectordrawable.graphics.drawable.Animatable2Compat
public /* bridge */ /* synthetic */ void clearAnimationCallbacks() {
super.clearAnimationCallbacks();
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, android.graphics.drawable.Drawable
public /* bridge */ /* synthetic */ int getAlpha() {
return super.getAlpha();
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, android.graphics.drawable.Drawable
public /* bridge */ /* synthetic */ int getOpacity() {
return super.getOpacity();
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange
public /* bridge */ /* synthetic */ boolean hideNow() {
return super.hideNow();
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange
public /* bridge */ /* synthetic */ boolean isHiding() {
return super.isHiding();
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, android.graphics.drawable.Animatable
public /* bridge */ /* synthetic */ boolean isRunning() {
return super.isRunning();
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange
public /* bridge */ /* synthetic */ boolean isShowing() {
return super.isShowing();
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, androidx.vectordrawable.graphics.drawable.Animatable2Compat
public /* bridge */ /* synthetic */ void registerAnimationCallback(Animatable2Compat.AnimationCallback animationCallback) {
super.registerAnimationCallback(animationCallback);
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, android.graphics.drawable.Drawable
public /* bridge */ /* synthetic */ void setAlpha(int i) {
super.setAlpha(i);
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, android.graphics.drawable.Drawable
public /* bridge */ /* synthetic */ void setColorFilter(ColorFilter colorFilter) {
super.setColorFilter(colorFilter);
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, android.graphics.drawable.Drawable
public /* bridge */ /* synthetic */ boolean setVisible(boolean z, boolean z2) {
return super.setVisible(z, z2);
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange
public /* bridge */ /* synthetic */ boolean setVisible(boolean z, boolean z2, boolean z3) {
return super.setVisible(z, z2, z3);
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, android.graphics.drawable.Animatable
public /* bridge */ /* synthetic */ void start() {
super.start();
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, android.graphics.drawable.Animatable
public /* bridge */ /* synthetic */ void stop() {
super.stop();
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, androidx.vectordrawable.graphics.drawable.Animatable2Compat
public /* bridge */ /* synthetic */ boolean unregisterAnimationCallback(Animatable2Compat.AnimationCallback animationCallback) {
return super.unregisterAnimationCallback(animationCallback);
}
DeterminateDrawable(Context context, BaseProgressIndicatorSpec baseProgressIndicatorSpec, DrawingDelegate<S> drawingDelegate) {
super(context, baseProgressIndicatorSpec);
this.skipAnimationOnLevelChange = false;
setDrawingDelegate(drawingDelegate);
SpringForce springForce = new SpringForce();
this.springForce = springForce;
springForce.setDampingRatio(1.0f);
springForce.setStiffness(50.0f);
SpringAnimation springAnimation = new SpringAnimation(this, INDICATOR_LENGTH_IN_LEVEL);
this.springAnimation = springAnimation;
springAnimation.setSpring(springForce);
setGrowFraction(1.0f);
}
public static DeterminateDrawable<LinearProgressIndicatorSpec> createLinearDrawable(Context context, LinearProgressIndicatorSpec linearProgressIndicatorSpec) {
return new DeterminateDrawable<>(context, linearProgressIndicatorSpec, new LinearDrawingDelegate(linearProgressIndicatorSpec));
}
public static DeterminateDrawable<CircularProgressIndicatorSpec> createCircularDrawable(Context context, CircularProgressIndicatorSpec circularProgressIndicatorSpec) {
return new DeterminateDrawable<>(context, circularProgressIndicatorSpec, new CircularDrawingDelegate(circularProgressIndicatorSpec));
}
public void addSpringAnimationEndListener(DynamicAnimation.OnAnimationEndListener onAnimationEndListener) {
this.springAnimation.addEndListener(onAnimationEndListener);
}
public void removeSpringAnimationEndListener(DynamicAnimation.OnAnimationEndListener onAnimationEndListener) {
this.springAnimation.removeEndListener(onAnimationEndListener);
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange
boolean setVisibleInternal(boolean z, boolean z2, boolean z3) {
boolean visibleInternal = super.setVisibleInternal(z, z2, z3);
float systemAnimatorDurationScale = this.animatorDurationScaleProvider.getSystemAnimatorDurationScale(this.context.getContentResolver());
if (systemAnimatorDurationScale == 0.0f) {
this.skipAnimationOnLevelChange = true;
} else {
this.skipAnimationOnLevelChange = false;
this.springForce.setStiffness(50.0f / systemAnimatorDurationScale);
}
return visibleInternal;
}
@Override // android.graphics.drawable.Drawable
public void jumpToCurrentState() {
this.springAnimation.skipToEnd();
setIndicatorFraction(getLevel() / 10000.0f);
}
@Override // android.graphics.drawable.Drawable
protected boolean onLevelChange(int i) {
if (this.skipAnimationOnLevelChange) {
this.springAnimation.skipToEnd();
setIndicatorFraction(i / 10000.0f);
return true;
}
this.springAnimation.setStartValue(getIndicatorFraction() * 10000.0f);
this.springAnimation.animateToFinalPosition(i);
return true;
}
@Override // android.graphics.drawable.Drawable
public int getIntrinsicWidth() {
return this.drawingDelegate.getPreferredWidth();
}
@Override // android.graphics.drawable.Drawable
public int getIntrinsicHeight() {
return this.drawingDelegate.getPreferredHeight();
}
void setLevelByFraction(float f) {
setLevel((int) (f * 10000.0f));
}
@Override // android.graphics.drawable.Drawable
public void draw(Canvas canvas) {
Rect rect = new Rect();
if (!getBounds().isEmpty() && isVisible() && canvas.getClipBounds(rect)) {
canvas.save();
this.drawingDelegate.validateSpecAndAdjustCanvas(canvas, getBounds(), getGrowFraction());
this.drawingDelegate.fillTrack(canvas, this.paint);
this.drawingDelegate.fillIndicator(canvas, this.paint, 0.0f, getIndicatorFraction(), MaterialColors.compositeARGBWithAlpha(this.baseSpec.indicatorColors[0], getAlpha()));
canvas.restore();
}
}
/* JADX INFO: Access modifiers changed from: private */
public void setIndicatorFraction(float f) {
this.indicatorFraction = f;
invalidateSelf();
}
void setDrawingDelegate(DrawingDelegate<S> drawingDelegate) {
this.drawingDelegate = drawingDelegate;
drawingDelegate.registerDrawable(this);
}
}

View File

@ -0,0 +1,302 @@
package com.google.android.material.progressindicator;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.util.Property;
import androidx.vectordrawable.graphics.drawable.Animatable2Compat;
import com.google.android.material.animation.AnimationUtils;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/* loaded from: classes.dex */
abstract class DrawableWithAnimatedVisibilityChange extends Drawable implements Animatable2Compat {
private static final boolean DEFAULT_DRAWABLE_RESTART = false;
private static final int GROW_DURATION = 500;
private static final Property<DrawableWithAnimatedVisibilityChange, Float> GROW_FRACTION = new Property<DrawableWithAnimatedVisibilityChange, Float>(Float.class, "growFraction") { // from class: com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange.3
@Override // android.util.Property
public Float get(DrawableWithAnimatedVisibilityChange drawableWithAnimatedVisibilityChange) {
return Float.valueOf(drawableWithAnimatedVisibilityChange.getGrowFraction());
}
@Override // android.util.Property
public void set(DrawableWithAnimatedVisibilityChange drawableWithAnimatedVisibilityChange, Float f) {
drawableWithAnimatedVisibilityChange.setGrowFraction(f.floatValue());
}
};
private List<Animatable2Compat.AnimationCallback> animationCallbacks;
final BaseProgressIndicatorSpec baseSpec;
final Context context;
private float growFraction;
private ValueAnimator hideAnimator;
private boolean ignoreCallbacks;
private Animatable2Compat.AnimationCallback internalAnimationCallback;
private float mockGrowFraction;
private boolean mockHideAnimationRunning;
private boolean mockShowAnimationRunning;
private ValueAnimator showAnimator;
private int totalAlpha;
final Paint paint = new Paint();
AnimatorDurationScaleProvider animatorDurationScaleProvider = new AnimatorDurationScaleProvider();
@Override // android.graphics.drawable.Drawable
public int getAlpha() {
return this.totalAlpha;
}
ValueAnimator getHideAnimator() {
return this.hideAnimator;
}
@Override // android.graphics.drawable.Drawable
public int getOpacity() {
return -3;
}
void setInternalAnimationCallback(Animatable2Compat.AnimationCallback animationCallback) {
this.internalAnimationCallback = animationCallback;
}
void setMockHideAnimationRunning(boolean z, float f) {
this.mockHideAnimationRunning = z;
this.mockGrowFraction = f;
}
void setMockShowAnimationRunning(boolean z, float f) {
this.mockShowAnimationRunning = z;
this.mockGrowFraction = f;
}
DrawableWithAnimatedVisibilityChange(Context context, BaseProgressIndicatorSpec baseProgressIndicatorSpec) {
this.context = context;
this.baseSpec = baseProgressIndicatorSpec;
setAlpha(255);
}
private void maybeInitializeAnimators() {
if (this.showAnimator == null) {
ObjectAnimator ofFloat = ObjectAnimator.ofFloat(this, GROW_FRACTION, 0.0f, 1.0f);
this.showAnimator = ofFloat;
ofFloat.setDuration(500L);
this.showAnimator.setInterpolator(AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR);
setShowAnimator(this.showAnimator);
}
if (this.hideAnimator == null) {
ObjectAnimator ofFloat2 = ObjectAnimator.ofFloat(this, GROW_FRACTION, 1.0f, 0.0f);
this.hideAnimator = ofFloat2;
ofFloat2.setDuration(500L);
this.hideAnimator.setInterpolator(AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR);
setHideAnimator(this.hideAnimator);
}
}
public void registerAnimationCallback(Animatable2Compat.AnimationCallback animationCallback) {
if (this.animationCallbacks == null) {
this.animationCallbacks = new ArrayList();
}
if (this.animationCallbacks.contains(animationCallback)) {
return;
}
this.animationCallbacks.add(animationCallback);
}
public boolean unregisterAnimationCallback(Animatable2Compat.AnimationCallback animationCallback) {
List<Animatable2Compat.AnimationCallback> list = this.animationCallbacks;
if (list == null || !list.contains(animationCallback)) {
return false;
}
this.animationCallbacks.remove(animationCallback);
if (!this.animationCallbacks.isEmpty()) {
return true;
}
this.animationCallbacks = null;
return true;
}
public void clearAnimationCallbacks() {
this.animationCallbacks.clear();
this.animationCallbacks = null;
}
/* JADX INFO: Access modifiers changed from: private */
public void dispatchAnimationStart() {
Animatable2Compat.AnimationCallback animationCallback = this.internalAnimationCallback;
if (animationCallback != null) {
animationCallback.onAnimationStart(this);
}
List<Animatable2Compat.AnimationCallback> list = this.animationCallbacks;
if (list == null || this.ignoreCallbacks) {
return;
}
Iterator<Animatable2Compat.AnimationCallback> it = list.iterator();
while (it.hasNext()) {
it.next().onAnimationStart(this);
}
}
/* JADX INFO: Access modifiers changed from: private */
public void dispatchAnimationEnd() {
Animatable2Compat.AnimationCallback animationCallback = this.internalAnimationCallback;
if (animationCallback != null) {
animationCallback.onAnimationEnd(this);
}
List<Animatable2Compat.AnimationCallback> list = this.animationCallbacks;
if (list == null || this.ignoreCallbacks) {
return;
}
Iterator<Animatable2Compat.AnimationCallback> it = list.iterator();
while (it.hasNext()) {
it.next().onAnimationEnd(this);
}
}
public void start() {
setVisibleInternal(true, true, false);
}
public void stop() {
setVisibleInternal(false, true, false);
}
public boolean isRunning() {
return isShowing() || isHiding();
}
public boolean isShowing() {
ValueAnimator valueAnimator = this.showAnimator;
return (valueAnimator != null && valueAnimator.isRunning()) || this.mockShowAnimationRunning;
}
public boolean isHiding() {
ValueAnimator valueAnimator = this.hideAnimator;
return (valueAnimator != null && valueAnimator.isRunning()) || this.mockHideAnimationRunning;
}
public boolean hideNow() {
return setVisible(false, false, false);
}
@Override // android.graphics.drawable.Drawable
public boolean setVisible(boolean z, boolean z2) {
return setVisible(z, z2, true);
}
public boolean setVisible(boolean z, boolean z2, boolean z3) {
return setVisibleInternal(z, z2, z3 && this.animatorDurationScaleProvider.getSystemAnimatorDurationScale(this.context.getContentResolver()) > 0.0f);
}
boolean setVisibleInternal(boolean z, boolean z2, boolean z3) {
maybeInitializeAnimators();
if (!isVisible() && !z) {
return false;
}
ValueAnimator valueAnimator = z ? this.showAnimator : this.hideAnimator;
ValueAnimator valueAnimator2 = z ? this.hideAnimator : this.showAnimator;
if (!z3) {
if (valueAnimator2.isRunning()) {
cancelAnimatorsWithoutCallbacks(valueAnimator2);
}
if (valueAnimator.isRunning()) {
valueAnimator.end();
} else {
endAnimatorsWithoutCallbacks(valueAnimator);
}
return super.setVisible(z, false);
}
if (z3 && valueAnimator.isRunning()) {
return false;
}
boolean z4 = !z || super.setVisible(z, false);
if (!(z ? this.baseSpec.isShowAnimationEnabled() : this.baseSpec.isHideAnimationEnabled())) {
endAnimatorsWithoutCallbacks(valueAnimator);
return z4;
}
if (z2 || !valueAnimator.isPaused()) {
valueAnimator.start();
} else {
valueAnimator.resume();
}
return z4;
}
private void cancelAnimatorsWithoutCallbacks(ValueAnimator... valueAnimatorArr) {
boolean z = this.ignoreCallbacks;
this.ignoreCallbacks = true;
for (ValueAnimator valueAnimator : valueAnimatorArr) {
valueAnimator.cancel();
}
this.ignoreCallbacks = z;
}
private void endAnimatorsWithoutCallbacks(ValueAnimator... valueAnimatorArr) {
boolean z = this.ignoreCallbacks;
this.ignoreCallbacks = true;
for (ValueAnimator valueAnimator : valueAnimatorArr) {
valueAnimator.end();
}
this.ignoreCallbacks = z;
}
@Override // android.graphics.drawable.Drawable
public void setAlpha(int i) {
this.totalAlpha = i;
invalidateSelf();
}
@Override // android.graphics.drawable.Drawable
public void setColorFilter(ColorFilter colorFilter) {
this.paint.setColorFilter(colorFilter);
invalidateSelf();
}
private void setShowAnimator(ValueAnimator valueAnimator) {
ValueAnimator valueAnimator2 = this.showAnimator;
if (valueAnimator2 != null && valueAnimator2.isRunning()) {
throw new IllegalArgumentException("Cannot set showAnimator while the current showAnimator is running.");
}
this.showAnimator = valueAnimator;
valueAnimator.addListener(new AnimatorListenerAdapter() { // from class: com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange.1
@Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
public void onAnimationStart(Animator animator) {
super.onAnimationStart(animator);
DrawableWithAnimatedVisibilityChange.this.dispatchAnimationStart();
}
});
}
private void setHideAnimator(ValueAnimator valueAnimator) {
ValueAnimator valueAnimator2 = this.hideAnimator;
if (valueAnimator2 != null && valueAnimator2.isRunning()) {
throw new IllegalArgumentException("Cannot set hideAnimator while the current hideAnimator is running.");
}
this.hideAnimator = valueAnimator;
valueAnimator.addListener(new AnimatorListenerAdapter() { // from class: com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange.2
@Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
public void onAnimationEnd(Animator animator) {
super.onAnimationEnd(animator);
DrawableWithAnimatedVisibilityChange.super.setVisible(false, false);
DrawableWithAnimatedVisibilityChange.this.dispatchAnimationEnd();
}
});
}
float getGrowFraction() {
if (this.baseSpec.isShowAnimationEnabled() || this.baseSpec.isHideAnimationEnabled()) {
return (this.mockHideAnimationRunning || this.mockShowAnimationRunning) ? this.mockGrowFraction : this.growFraction;
}
return 1.0f;
}
void setGrowFraction(float f) {
if (this.growFraction != f) {
this.growFraction = f;
invalidateSelf();
}
}
}

View File

@ -0,0 +1,35 @@
package com.google.android.material.progressindicator;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import com.google.android.material.progressindicator.BaseProgressIndicatorSpec;
/* loaded from: classes.dex */
abstract class DrawingDelegate<S extends BaseProgressIndicatorSpec> {
protected DrawableWithAnimatedVisibilityChange drawable;
S spec;
abstract void adjustCanvas(Canvas canvas, Rect rect, float f);
abstract void fillIndicator(Canvas canvas, Paint paint, float f, float f2, int i);
abstract void fillTrack(Canvas canvas, Paint paint);
abstract int getPreferredHeight();
abstract int getPreferredWidth();
protected void registerDrawable(DrawableWithAnimatedVisibilityChange drawableWithAnimatedVisibilityChange) {
this.drawable = drawableWithAnimatedVisibilityChange;
}
public DrawingDelegate(S s) {
this.spec = s;
}
void validateSpecAndAdjustCanvas(Canvas canvas, Rect rect, float f) {
this.spec.validateSpec();
adjustCanvas(canvas, rect, f);
}
}

View File

@ -0,0 +1,36 @@
package com.google.android.material.progressindicator;
import android.animation.Animator;
import androidx.vectordrawable.graphics.drawable.Animatable2Compat;
/* loaded from: classes.dex */
abstract class IndeterminateAnimatorDelegate<T extends Animator> {
protected IndeterminateDrawable drawable;
protected final int[] segmentColors;
protected final float[] segmentPositions;
abstract void cancelAnimatorImmediately();
protected float getFractionInRange(int i, int i2, int i3) {
return (i - i2) / i3;
}
public abstract void invalidateSpecValues();
public abstract void registerAnimatorsCompleteCallback(Animatable2Compat.AnimationCallback animationCallback);
protected void registerDrawable(IndeterminateDrawable indeterminateDrawable) {
this.drawable = indeterminateDrawable;
}
abstract void requestCancelAnimatorAfterCurrentCycle();
abstract void startAnimator();
public abstract void unregisterAnimatorsCompleteCallback();
protected IndeterminateAnimatorDelegate(int i) {
this.segmentPositions = new float[i * 2];
this.segmentColors = new int[i];
}
}

View File

@ -0,0 +1,168 @@
package com.google.android.material.progressindicator;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Rect;
import android.os.Build;
import androidx.vectordrawable.graphics.drawable.Animatable2Compat;
import com.google.android.material.progressindicator.BaseProgressIndicatorSpec;
/* loaded from: classes.dex */
public final class IndeterminateDrawable<S extends BaseProgressIndicatorSpec> extends DrawableWithAnimatedVisibilityChange {
private IndeterminateAnimatorDelegate<ObjectAnimator> animatorDelegate;
private DrawingDelegate<S> drawingDelegate;
IndeterminateAnimatorDelegate<ObjectAnimator> getAnimatorDelegate() {
return this.animatorDelegate;
}
DrawingDelegate<S> getDrawingDelegate() {
return this.drawingDelegate;
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, androidx.vectordrawable.graphics.drawable.Animatable2Compat
public /* bridge */ /* synthetic */ void clearAnimationCallbacks() {
super.clearAnimationCallbacks();
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, android.graphics.drawable.Drawable
public /* bridge */ /* synthetic */ int getAlpha() {
return super.getAlpha();
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, android.graphics.drawable.Drawable
public /* bridge */ /* synthetic */ int getOpacity() {
return super.getOpacity();
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange
public /* bridge */ /* synthetic */ boolean hideNow() {
return super.hideNow();
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange
public /* bridge */ /* synthetic */ boolean isHiding() {
return super.isHiding();
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, android.graphics.drawable.Animatable
public /* bridge */ /* synthetic */ boolean isRunning() {
return super.isRunning();
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange
public /* bridge */ /* synthetic */ boolean isShowing() {
return super.isShowing();
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, androidx.vectordrawable.graphics.drawable.Animatable2Compat
public /* bridge */ /* synthetic */ void registerAnimationCallback(Animatable2Compat.AnimationCallback animationCallback) {
super.registerAnimationCallback(animationCallback);
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, android.graphics.drawable.Drawable
public /* bridge */ /* synthetic */ void setAlpha(int i) {
super.setAlpha(i);
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, android.graphics.drawable.Drawable
public /* bridge */ /* synthetic */ void setColorFilter(ColorFilter colorFilter) {
super.setColorFilter(colorFilter);
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, android.graphics.drawable.Drawable
public /* bridge */ /* synthetic */ boolean setVisible(boolean z, boolean z2) {
return super.setVisible(z, z2);
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange
public /* bridge */ /* synthetic */ boolean setVisible(boolean z, boolean z2, boolean z3) {
return super.setVisible(z, z2, z3);
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, android.graphics.drawable.Animatable
public /* bridge */ /* synthetic */ void start() {
super.start();
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, android.graphics.drawable.Animatable
public /* bridge */ /* synthetic */ void stop() {
super.stop();
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange, androidx.vectordrawable.graphics.drawable.Animatable2Compat
public /* bridge */ /* synthetic */ boolean unregisterAnimationCallback(Animatable2Compat.AnimationCallback animationCallback) {
return super.unregisterAnimationCallback(animationCallback);
}
IndeterminateDrawable(Context context, BaseProgressIndicatorSpec baseProgressIndicatorSpec, DrawingDelegate<S> drawingDelegate, IndeterminateAnimatorDelegate<ObjectAnimator> indeterminateAnimatorDelegate) {
super(context, baseProgressIndicatorSpec);
setDrawingDelegate(drawingDelegate);
setAnimatorDelegate(indeterminateAnimatorDelegate);
}
public static IndeterminateDrawable<LinearProgressIndicatorSpec> createLinearDrawable(Context context, LinearProgressIndicatorSpec linearProgressIndicatorSpec) {
IndeterminateAnimatorDelegate linearIndeterminateDisjointAnimatorDelegate;
LinearDrawingDelegate linearDrawingDelegate = new LinearDrawingDelegate(linearProgressIndicatorSpec);
if (linearProgressIndicatorSpec.indeterminateAnimationType == 0) {
linearIndeterminateDisjointAnimatorDelegate = new LinearIndeterminateContiguousAnimatorDelegate(linearProgressIndicatorSpec);
} else {
linearIndeterminateDisjointAnimatorDelegate = new LinearIndeterminateDisjointAnimatorDelegate(context, linearProgressIndicatorSpec);
}
return new IndeterminateDrawable<>(context, linearProgressIndicatorSpec, linearDrawingDelegate, linearIndeterminateDisjointAnimatorDelegate);
}
public static IndeterminateDrawable<CircularProgressIndicatorSpec> createCircularDrawable(Context context, CircularProgressIndicatorSpec circularProgressIndicatorSpec) {
return new IndeterminateDrawable<>(context, circularProgressIndicatorSpec, new CircularDrawingDelegate(circularProgressIndicatorSpec), new CircularIndeterminateAnimatorDelegate(circularProgressIndicatorSpec));
}
@Override // com.google.android.material.progressindicator.DrawableWithAnimatedVisibilityChange
boolean setVisibleInternal(boolean z, boolean z2, boolean z3) {
boolean visibleInternal = super.setVisibleInternal(z, z2, z3);
if (!isRunning()) {
this.animatorDelegate.cancelAnimatorImmediately();
}
float systemAnimatorDurationScale = this.animatorDurationScaleProvider.getSystemAnimatorDurationScale(this.context.getContentResolver());
if (z && (z3 || (Build.VERSION.SDK_INT <= 22 && systemAnimatorDurationScale > 0.0f))) {
this.animatorDelegate.startAnimator();
}
return visibleInternal;
}
@Override // android.graphics.drawable.Drawable
public int getIntrinsicWidth() {
return this.drawingDelegate.getPreferredWidth();
}
@Override // android.graphics.drawable.Drawable
public int getIntrinsicHeight() {
return this.drawingDelegate.getPreferredHeight();
}
@Override // android.graphics.drawable.Drawable
public void draw(Canvas canvas) {
Rect rect = new Rect();
if (!getBounds().isEmpty() && isVisible() && canvas.getClipBounds(rect)) {
canvas.save();
this.drawingDelegate.validateSpecAndAdjustCanvas(canvas, getBounds(), getGrowFraction());
this.drawingDelegate.fillTrack(canvas, this.paint);
for (int i = 0; i < this.animatorDelegate.segmentColors.length; i++) {
int i2 = i * 2;
this.drawingDelegate.fillIndicator(canvas, this.paint, this.animatorDelegate.segmentPositions[i2], this.animatorDelegate.segmentPositions[i2 + 1], this.animatorDelegate.segmentColors[i]);
}
canvas.restore();
}
}
void setAnimatorDelegate(IndeterminateAnimatorDelegate<ObjectAnimator> indeterminateAnimatorDelegate) {
this.animatorDelegate = indeterminateAnimatorDelegate;
indeterminateAnimatorDelegate.registerDrawable(this);
}
void setDrawingDelegate(DrawingDelegate<S> drawingDelegate) {
this.drawingDelegate = drawingDelegate;
drawingDelegate.registerDrawable(this);
}
}

View File

@ -0,0 +1,86 @@
package com.google.android.material.progressindicator;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.RectF;
import com.google.android.material.color.MaterialColors;
/* loaded from: classes.dex */
final class LinearDrawingDelegate extends DrawingDelegate<LinearProgressIndicatorSpec> {
private float displayedCornerRadius;
private Path displayedTrackPath;
private float displayedTrackThickness;
private float trackLength;
@Override // com.google.android.material.progressindicator.DrawingDelegate
public int getPreferredWidth() {
return -1;
}
public LinearDrawingDelegate(LinearProgressIndicatorSpec linearProgressIndicatorSpec) {
super(linearProgressIndicatorSpec);
this.trackLength = 300.0f;
}
@Override // com.google.android.material.progressindicator.DrawingDelegate
public int getPreferredHeight() {
return ((LinearProgressIndicatorSpec) this.spec).trackThickness;
}
@Override // com.google.android.material.progressindicator.DrawingDelegate
public void adjustCanvas(Canvas canvas, Rect rect, float f) {
this.trackLength = rect.width();
float f2 = ((LinearProgressIndicatorSpec) this.spec).trackThickness;
canvas.translate(rect.left + (rect.width() / 2.0f), rect.top + (rect.height() / 2.0f) + Math.max(0.0f, (rect.height() - ((LinearProgressIndicatorSpec) this.spec).trackThickness) / 2.0f));
if (((LinearProgressIndicatorSpec) this.spec).drawHorizontallyInverse) {
canvas.scale(-1.0f, 1.0f);
}
if ((this.drawable.isShowing() && ((LinearProgressIndicatorSpec) this.spec).showAnimationBehavior == 1) || (this.drawable.isHiding() && ((LinearProgressIndicatorSpec) this.spec).hideAnimationBehavior == 2)) {
canvas.scale(1.0f, -1.0f);
}
if (this.drawable.isShowing() || this.drawable.isHiding()) {
canvas.translate(0.0f, (((LinearProgressIndicatorSpec) this.spec).trackThickness * (f - 1.0f)) / 2.0f);
}
float f3 = this.trackLength;
canvas.clipRect((-f3) / 2.0f, (-f2) / 2.0f, f3 / 2.0f, f2 / 2.0f);
this.displayedTrackThickness = ((LinearProgressIndicatorSpec) this.spec).trackThickness * f;
this.displayedCornerRadius = ((LinearProgressIndicatorSpec) this.spec).trackCornerRadius * f;
}
@Override // com.google.android.material.progressindicator.DrawingDelegate
public void fillIndicator(Canvas canvas, Paint paint, float f, float f2, int i) {
if (f == f2) {
return;
}
float f3 = this.trackLength;
float f4 = (-f3) / 2.0f;
paint.setStyle(Paint.Style.FILL);
paint.setAntiAlias(true);
paint.setColor(i);
canvas.save();
canvas.clipPath(this.displayedTrackPath);
float f5 = this.displayedTrackThickness;
RectF rectF = new RectF(((f * f3) + f4) - (this.displayedCornerRadius * 2.0f), (-f5) / 2.0f, f4 + (f2 * f3), f5 / 2.0f);
float f6 = this.displayedCornerRadius;
canvas.drawRoundRect(rectF, f6, f6, paint);
canvas.restore();
}
@Override // com.google.android.material.progressindicator.DrawingDelegate
void fillTrack(Canvas canvas, Paint paint) {
int compositeARGBWithAlpha = MaterialColors.compositeARGBWithAlpha(((LinearProgressIndicatorSpec) this.spec).trackColor, this.drawable.getAlpha());
paint.setStyle(Paint.Style.FILL);
paint.setAntiAlias(true);
paint.setColor(compositeARGBWithAlpha);
Path path = new Path();
this.displayedTrackPath = path;
float f = this.trackLength;
float f2 = this.displayedTrackThickness;
RectF rectF = new RectF((-f) / 2.0f, (-f2) / 2.0f, f / 2.0f, f2 / 2.0f);
float f3 = this.displayedCornerRadius;
path.addRoundRect(rectF, f3, f3, Path.Direction.CCW);
canvas.drawPath(this.displayedTrackPath, paint);
}
}

View File

@ -0,0 +1,135 @@
package com.google.android.material.progressindicator;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.util.Property;
import androidx.interpolator.view.animation.FastOutSlowInInterpolator;
import androidx.vectordrawable.graphics.drawable.Animatable2Compat;
import com.google.android.material.color.MaterialColors;
import java.util.Arrays;
/* loaded from: classes.dex */
final class LinearIndeterminateContiguousAnimatorDelegate extends IndeterminateAnimatorDelegate<ObjectAnimator> {
private static final Property<LinearIndeterminateContiguousAnimatorDelegate, Float> ANIMATION_FRACTION = new Property<LinearIndeterminateContiguousAnimatorDelegate, Float>(Float.class, "animationFraction") { // from class: com.google.android.material.progressindicator.LinearIndeterminateContiguousAnimatorDelegate.2
@Override // android.util.Property
public Float get(LinearIndeterminateContiguousAnimatorDelegate linearIndeterminateContiguousAnimatorDelegate) {
return Float.valueOf(linearIndeterminateContiguousAnimatorDelegate.getAnimationFraction());
}
@Override // android.util.Property
public void set(LinearIndeterminateContiguousAnimatorDelegate linearIndeterminateContiguousAnimatorDelegate, Float f) {
linearIndeterminateContiguousAnimatorDelegate.setAnimationFraction(f.floatValue());
}
};
private static final int DURATION_PER_CYCLE_IN_MS = 333;
private static final int TOTAL_DURATION_IN_MS = 667;
private float animationFraction;
private ObjectAnimator animator;
private final BaseProgressIndicatorSpec baseSpec;
private boolean dirtyColors;
private FastOutSlowInInterpolator interpolator;
private int newIndicatorColorIndex;
/* JADX INFO: Access modifiers changed from: private */
public float getAnimationFraction() {
return this.animationFraction;
}
@Override // com.google.android.material.progressindicator.IndeterminateAnimatorDelegate
public void registerAnimatorsCompleteCallback(Animatable2Compat.AnimationCallback animationCallback) {
}
@Override // com.google.android.material.progressindicator.IndeterminateAnimatorDelegate
public void requestCancelAnimatorAfterCurrentCycle() {
}
@Override // com.google.android.material.progressindicator.IndeterminateAnimatorDelegate
public void unregisterAnimatorsCompleteCallback() {
}
public LinearIndeterminateContiguousAnimatorDelegate(LinearProgressIndicatorSpec linearProgressIndicatorSpec) {
super(3);
this.newIndicatorColorIndex = 1;
this.baseSpec = linearProgressIndicatorSpec;
this.interpolator = new FastOutSlowInInterpolator();
}
@Override // com.google.android.material.progressindicator.IndeterminateAnimatorDelegate
public void startAnimator() {
maybeInitializeAnimators();
resetPropertiesForNewStart();
this.animator.start();
}
private void maybeInitializeAnimators() {
if (this.animator == null) {
ObjectAnimator ofFloat = ObjectAnimator.ofFloat(this, ANIMATION_FRACTION, 0.0f, 1.0f);
this.animator = ofFloat;
ofFloat.setDuration(333L);
this.animator.setInterpolator(null);
this.animator.setRepeatCount(-1);
this.animator.addListener(new AnimatorListenerAdapter() { // from class: com.google.android.material.progressindicator.LinearIndeterminateContiguousAnimatorDelegate.1
@Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
public void onAnimationRepeat(Animator animator) {
super.onAnimationRepeat(animator);
LinearIndeterminateContiguousAnimatorDelegate linearIndeterminateContiguousAnimatorDelegate = LinearIndeterminateContiguousAnimatorDelegate.this;
linearIndeterminateContiguousAnimatorDelegate.newIndicatorColorIndex = (linearIndeterminateContiguousAnimatorDelegate.newIndicatorColorIndex + 1) % LinearIndeterminateContiguousAnimatorDelegate.this.baseSpec.indicatorColors.length;
LinearIndeterminateContiguousAnimatorDelegate.this.dirtyColors = true;
}
});
}
}
@Override // com.google.android.material.progressindicator.IndeterminateAnimatorDelegate
public void cancelAnimatorImmediately() {
ObjectAnimator objectAnimator = this.animator;
if (objectAnimator != null) {
objectAnimator.cancel();
}
}
@Override // com.google.android.material.progressindicator.IndeterminateAnimatorDelegate
public void invalidateSpecValues() {
resetPropertiesForNewStart();
}
private void updateSegmentPositions(int i) {
this.segmentPositions[0] = 0.0f;
float fractionInRange = getFractionInRange(i, 0, TOTAL_DURATION_IN_MS);
float[] fArr = this.segmentPositions;
float[] fArr2 = this.segmentPositions;
float interpolation = this.interpolator.getInterpolation(fractionInRange);
fArr2[2] = interpolation;
fArr[1] = interpolation;
float[] fArr3 = this.segmentPositions;
float[] fArr4 = this.segmentPositions;
float interpolation2 = this.interpolator.getInterpolation(fractionInRange + 0.49925038f);
fArr4[4] = interpolation2;
fArr3[3] = interpolation2;
this.segmentPositions[5] = 1.0f;
}
private void maybeUpdateSegmentColors() {
if (!this.dirtyColors || this.segmentPositions[3] >= 1.0f) {
return;
}
this.segmentColors[2] = this.segmentColors[1];
this.segmentColors[1] = this.segmentColors[0];
this.segmentColors[0] = MaterialColors.compositeARGBWithAlpha(this.baseSpec.indicatorColors[this.newIndicatorColorIndex], this.drawable.getAlpha());
this.dirtyColors = false;
}
void resetPropertiesForNewStart() {
this.dirtyColors = true;
this.newIndicatorColorIndex = 1;
Arrays.fill(this.segmentColors, MaterialColors.compositeARGBWithAlpha(this.baseSpec.indicatorColors[0], this.drawable.getAlpha()));
}
void setAnimationFraction(float f) {
this.animationFraction = f;
updateSegmentPositions((int) (f * 333.0f));
maybeUpdateSegmentColors();
this.drawable.invalidateSelf();
}
}

View File

@ -0,0 +1,158 @@
package com.google.android.material.progressindicator;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.util.Property;
import android.view.animation.Interpolator;
import androidx.vectordrawable.graphics.drawable.Animatable2Compat;
import androidx.vectordrawable.graphics.drawable.AnimationUtilsCompat;
import com.google.android.material.R;
import com.google.android.material.color.MaterialColors;
import java.util.Arrays;
/* loaded from: classes.dex */
final class LinearIndeterminateDisjointAnimatorDelegate extends IndeterminateAnimatorDelegate<ObjectAnimator> {
private static final int TOTAL_DURATION_IN_MS = 1800;
private float animationFraction;
private ObjectAnimator animator;
Animatable2Compat.AnimationCallback animatorCompleteCallback;
private final BaseProgressIndicatorSpec baseSpec;
private ObjectAnimator completeEndAnimator;
private boolean dirtyColors;
private int indicatorColorIndex;
private final Interpolator[] interpolatorArray;
private static final int[] DURATION_TO_MOVE_SEGMENT_ENDS = {533, 567, 850, 750};
private static final int[] DELAY_TO_MOVE_SEGMENT_ENDS = {1267, 1000, 333, 0};
private static final Property<LinearIndeterminateDisjointAnimatorDelegate, Float> ANIMATION_FRACTION = new Property<LinearIndeterminateDisjointAnimatorDelegate, Float>(Float.class, "animationFraction") { // from class: com.google.android.material.progressindicator.LinearIndeterminateDisjointAnimatorDelegate.3
@Override // android.util.Property
public Float get(LinearIndeterminateDisjointAnimatorDelegate linearIndeterminateDisjointAnimatorDelegate) {
return Float.valueOf(linearIndeterminateDisjointAnimatorDelegate.getAnimationFraction());
}
@Override // android.util.Property
public void set(LinearIndeterminateDisjointAnimatorDelegate linearIndeterminateDisjointAnimatorDelegate, Float f) {
linearIndeterminateDisjointAnimatorDelegate.setAnimationFraction(f.floatValue());
}
};
/* JADX INFO: Access modifiers changed from: private */
public float getAnimationFraction() {
return this.animationFraction;
}
@Override // com.google.android.material.progressindicator.IndeterminateAnimatorDelegate
public void registerAnimatorsCompleteCallback(Animatable2Compat.AnimationCallback animationCallback) {
this.animatorCompleteCallback = animationCallback;
}
@Override // com.google.android.material.progressindicator.IndeterminateAnimatorDelegate
public void unregisterAnimatorsCompleteCallback() {
this.animatorCompleteCallback = null;
}
public LinearIndeterminateDisjointAnimatorDelegate(Context context, LinearProgressIndicatorSpec linearProgressIndicatorSpec) {
super(2);
this.indicatorColorIndex = 0;
this.animatorCompleteCallback = null;
this.baseSpec = linearProgressIndicatorSpec;
this.interpolatorArray = new Interpolator[]{AnimationUtilsCompat.loadInterpolator(context, R.anim.linear_indeterminate_line1_head_interpolator), AnimationUtilsCompat.loadInterpolator(context, R.anim.linear_indeterminate_line1_tail_interpolator), AnimationUtilsCompat.loadInterpolator(context, R.anim.linear_indeterminate_line2_head_interpolator), AnimationUtilsCompat.loadInterpolator(context, R.anim.linear_indeterminate_line2_tail_interpolator)};
}
@Override // com.google.android.material.progressindicator.IndeterminateAnimatorDelegate
public void startAnimator() {
maybeInitializeAnimators();
resetPropertiesForNewStart();
this.animator.start();
}
private void maybeInitializeAnimators() {
if (this.animator == null) {
ObjectAnimator ofFloat = ObjectAnimator.ofFloat(this, ANIMATION_FRACTION, 0.0f, 1.0f);
this.animator = ofFloat;
ofFloat.setDuration(1800L);
this.animator.setInterpolator(null);
this.animator.setRepeatCount(-1);
this.animator.addListener(new AnimatorListenerAdapter() { // from class: com.google.android.material.progressindicator.LinearIndeterminateDisjointAnimatorDelegate.1
@Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
public void onAnimationRepeat(Animator animator) {
super.onAnimationRepeat(animator);
LinearIndeterminateDisjointAnimatorDelegate linearIndeterminateDisjointAnimatorDelegate = LinearIndeterminateDisjointAnimatorDelegate.this;
linearIndeterminateDisjointAnimatorDelegate.indicatorColorIndex = (linearIndeterminateDisjointAnimatorDelegate.indicatorColorIndex + 1) % LinearIndeterminateDisjointAnimatorDelegate.this.baseSpec.indicatorColors.length;
LinearIndeterminateDisjointAnimatorDelegate.this.dirtyColors = true;
}
});
}
if (this.completeEndAnimator == null) {
ObjectAnimator ofFloat2 = ObjectAnimator.ofFloat(this, ANIMATION_FRACTION, 1.0f);
this.completeEndAnimator = ofFloat2;
ofFloat2.setDuration(1800L);
this.completeEndAnimator.setInterpolator(null);
this.completeEndAnimator.addListener(new AnimatorListenerAdapter() { // from class: com.google.android.material.progressindicator.LinearIndeterminateDisjointAnimatorDelegate.2
@Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
public void onAnimationEnd(Animator animator) {
super.onAnimationEnd(animator);
LinearIndeterminateDisjointAnimatorDelegate.this.cancelAnimatorImmediately();
if (LinearIndeterminateDisjointAnimatorDelegate.this.animatorCompleteCallback != null) {
LinearIndeterminateDisjointAnimatorDelegate.this.animatorCompleteCallback.onAnimationEnd(LinearIndeterminateDisjointAnimatorDelegate.this.drawable);
}
}
});
}
}
@Override // com.google.android.material.progressindicator.IndeterminateAnimatorDelegate
public void cancelAnimatorImmediately() {
ObjectAnimator objectAnimator = this.animator;
if (objectAnimator != null) {
objectAnimator.cancel();
}
}
@Override // com.google.android.material.progressindicator.IndeterminateAnimatorDelegate
public void requestCancelAnimatorAfterCurrentCycle() {
ObjectAnimator objectAnimator = this.completeEndAnimator;
if (objectAnimator == null || objectAnimator.isRunning()) {
return;
}
cancelAnimatorImmediately();
if (this.drawable.isVisible()) {
this.completeEndAnimator.setFloatValues(this.animationFraction, 1.0f);
this.completeEndAnimator.setDuration((long) ((1.0f - this.animationFraction) * 1800.0f));
this.completeEndAnimator.start();
}
}
@Override // com.google.android.material.progressindicator.IndeterminateAnimatorDelegate
public void invalidateSpecValues() {
resetPropertiesForNewStart();
}
private void updateSegmentPositions(int i) {
for (int i2 = 0; i2 < 4; i2++) {
this.segmentPositions[i2] = Math.max(0.0f, Math.min(1.0f, this.interpolatorArray[i2].getInterpolation(getFractionInRange(i, DELAY_TO_MOVE_SEGMENT_ENDS[i2], DURATION_TO_MOVE_SEGMENT_ENDS[i2]))));
}
}
private void maybeUpdateSegmentColors() {
if (this.dirtyColors) {
Arrays.fill(this.segmentColors, MaterialColors.compositeARGBWithAlpha(this.baseSpec.indicatorColors[this.indicatorColorIndex], this.drawable.getAlpha()));
this.dirtyColors = false;
}
}
void resetPropertiesForNewStart() {
this.indicatorColorIndex = 0;
int compositeARGBWithAlpha = MaterialColors.compositeARGBWithAlpha(this.baseSpec.indicatorColors[0], this.drawable.getAlpha());
this.segmentColors[0] = compositeARGBWithAlpha;
this.segmentColors[1] = compositeARGBWithAlpha;
}
void setAnimationFraction(float f) {
this.animationFraction = f;
updateSegmentPositions((int) (f * 1800.0f));
maybeUpdateSegmentColors();
this.drawable.invalidateSelf();
}
}

View File

@ -0,0 +1,133 @@
package com.google.android.material.progressindicator;
import android.content.Context;
import android.util.AttributeSet;
import androidx.core.view.ViewCompat;
import com.google.android.material.R;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/* loaded from: classes.dex */
public class LinearProgressIndicator extends BaseProgressIndicator<LinearProgressIndicatorSpec> {
public static final int DEF_STYLE_RES = R.style.Widget_MaterialComponents_LinearProgressIndicator;
public static final int INDETERMINATE_ANIMATION_TYPE_CONTIGUOUS = 0;
public static final int INDETERMINATE_ANIMATION_TYPE_DISJOINT = 1;
public static final int INDICATOR_DIRECTION_END_TO_START = 3;
public static final int INDICATOR_DIRECTION_LEFT_TO_RIGHT = 0;
public static final int INDICATOR_DIRECTION_RIGHT_TO_LEFT = 1;
public static final int INDICATOR_DIRECTION_START_TO_END = 2;
@Retention(RetentionPolicy.SOURCE)
public @interface IndeterminateAnimationType {
}
@Retention(RetentionPolicy.SOURCE)
public @interface IndicatorDirection {
}
public LinearProgressIndicator(Context context) {
this(context, null);
}
public LinearProgressIndicator(Context context, AttributeSet attributeSet) {
this(context, attributeSet, R.attr.linearProgressIndicatorStyle);
}
public LinearProgressIndicator(Context context, AttributeSet attributeSet, int i) {
super(context, attributeSet, i, DEF_STYLE_RES);
initializeDrawables();
}
/* JADX INFO: Access modifiers changed from: package-private */
@Override // com.google.android.material.progressindicator.BaseProgressIndicator
public LinearProgressIndicatorSpec createSpec(Context context, AttributeSet attributeSet) {
return new LinearProgressIndicatorSpec(context, attributeSet);
}
@Override // android.view.View
protected void onLayout(boolean z, int i, int i2, int i3, int i4) {
super.onLayout(z, i, i2, i3, i4);
LinearProgressIndicatorSpec linearProgressIndicatorSpec = (LinearProgressIndicatorSpec) this.spec;
boolean z2 = true;
if (((LinearProgressIndicatorSpec) this.spec).indicatorDirection != 1 && ((ViewCompat.getLayoutDirection(this) != 1 || ((LinearProgressIndicatorSpec) this.spec).indicatorDirection != 2) && (ViewCompat.getLayoutDirection(this) != 0 || ((LinearProgressIndicatorSpec) this.spec).indicatorDirection != 3))) {
z2 = false;
}
linearProgressIndicatorSpec.drawHorizontallyInverse = z2;
}
@Override // android.widget.ProgressBar, android.view.View
protected void onSizeChanged(int i, int i2, int i3, int i4) {
int paddingLeft = i - (getPaddingLeft() + getPaddingRight());
int paddingTop = i2 - (getPaddingTop() + getPaddingBottom());
IndeterminateDrawable indeterminateDrawable = getIndeterminateDrawable();
if (indeterminateDrawable != null) {
indeterminateDrawable.setBounds(0, 0, paddingLeft, paddingTop);
}
DeterminateDrawable progressDrawable = getProgressDrawable();
if (progressDrawable != null) {
progressDrawable.setBounds(0, 0, paddingLeft, paddingTop);
}
}
private void initializeDrawables() {
setIndeterminateDrawable(IndeterminateDrawable.createLinearDrawable(getContext(), (LinearProgressIndicatorSpec) this.spec));
setProgressDrawable(DeterminateDrawable.createLinearDrawable(getContext(), (LinearProgressIndicatorSpec) this.spec));
}
@Override // com.google.android.material.progressindicator.BaseProgressIndicator
public void setIndicatorColor(int... iArr) {
super.setIndicatorColor(iArr);
((LinearProgressIndicatorSpec) this.spec).validateSpec();
}
@Override // com.google.android.material.progressindicator.BaseProgressIndicator
public void setTrackCornerRadius(int i) {
super.setTrackCornerRadius(i);
((LinearProgressIndicatorSpec) this.spec).validateSpec();
invalidate();
}
public int getIndeterminateAnimationType() {
return ((LinearProgressIndicatorSpec) this.spec).indeterminateAnimationType;
}
public void setIndeterminateAnimationType(int i) {
if (((LinearProgressIndicatorSpec) this.spec).indeterminateAnimationType == i) {
return;
}
if (visibleToUser() && isIndeterminate()) {
throw new IllegalStateException("Cannot change indeterminate animation type while the progress indicator is show in indeterminate mode.");
}
((LinearProgressIndicatorSpec) this.spec).indeterminateAnimationType = i;
((LinearProgressIndicatorSpec) this.spec).validateSpec();
if (i == 0) {
getIndeterminateDrawable().setAnimatorDelegate(new LinearIndeterminateContiguousAnimatorDelegate((LinearProgressIndicatorSpec) this.spec));
} else {
getIndeterminateDrawable().setAnimatorDelegate(new LinearIndeterminateDisjointAnimatorDelegate(getContext(), (LinearProgressIndicatorSpec) this.spec));
}
invalidate();
}
public int getIndicatorDirection() {
return ((LinearProgressIndicatorSpec) this.spec).indicatorDirection;
}
public void setIndicatorDirection(int i) {
((LinearProgressIndicatorSpec) this.spec).indicatorDirection = i;
LinearProgressIndicatorSpec linearProgressIndicatorSpec = (LinearProgressIndicatorSpec) this.spec;
boolean z = true;
if (i != 1 && ((ViewCompat.getLayoutDirection(this) != 1 || ((LinearProgressIndicatorSpec) this.spec).indicatorDirection != 2) && (ViewCompat.getLayoutDirection(this) != 0 || i != 3))) {
z = false;
}
linearProgressIndicatorSpec.drawHorizontallyInverse = z;
invalidate();
}
@Override // com.google.android.material.progressindicator.BaseProgressIndicator
public void setProgressCompat(int i, boolean z) {
if (this.spec != 0 && ((LinearProgressIndicatorSpec) this.spec).indeterminateAnimationType == 0 && isIndeterminate()) {
return;
}
super.setProgressCompat(i, z);
}
}

View File

@ -0,0 +1,44 @@
package com.google.android.material.progressindicator;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import com.google.android.material.R;
import com.google.android.material.internal.ThemeEnforcement;
/* loaded from: classes.dex */
public final class LinearProgressIndicatorSpec extends BaseProgressIndicatorSpec {
boolean drawHorizontallyInverse;
public int indeterminateAnimationType;
public int indicatorDirection;
public LinearProgressIndicatorSpec(Context context, AttributeSet attributeSet) {
this(context, attributeSet, R.attr.linearProgressIndicatorStyle);
}
public LinearProgressIndicatorSpec(Context context, AttributeSet attributeSet, int i) {
this(context, attributeSet, i, LinearProgressIndicator.DEF_STYLE_RES);
}
public LinearProgressIndicatorSpec(Context context, AttributeSet attributeSet, int i, int i2) {
super(context, attributeSet, i, i2);
TypedArray obtainStyledAttributes = ThemeEnforcement.obtainStyledAttributes(context, attributeSet, R.styleable.LinearProgressIndicator, R.attr.linearProgressIndicatorStyle, LinearProgressIndicator.DEF_STYLE_RES, new int[0]);
this.indeterminateAnimationType = obtainStyledAttributes.getInt(R.styleable.LinearProgressIndicator_indeterminateAnimationType, 1);
this.indicatorDirection = obtainStyledAttributes.getInt(R.styleable.LinearProgressIndicator_indicatorDirectionLinear, 0);
obtainStyledAttributes.recycle();
validateSpec();
this.drawHorizontallyInverse = this.indicatorDirection == 1;
}
@Override // com.google.android.material.progressindicator.BaseProgressIndicatorSpec
void validateSpec() {
if (this.indeterminateAnimationType == 0) {
if (this.trackCornerRadius > 0) {
throw new IllegalArgumentException("Rounded corners are not supported in contiguous indeterminate animation.");
}
if (this.indicatorColors.length < 3) {
throw new IllegalArgumentException("Contiguous indeterminate animation must be used with 3 or more indicator colors.");
}
}
}
}