ADD week 5
This commit is contained in:
		| @@ -0,0 +1,78 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.util.AttributeSet; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class BaselineLayout extends ViewGroup { | ||||
|     private int baseline; | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     public int getBaseline() { | ||||
|         return this.baseline; | ||||
|     } | ||||
|  | ||||
|     public BaselineLayout(Context context) { | ||||
|         super(context, null, 0); | ||||
|         this.baseline = -1; | ||||
|     } | ||||
|  | ||||
|     public BaselineLayout(Context context, AttributeSet attributeSet) { | ||||
|         super(context, attributeSet, 0); | ||||
|         this.baseline = -1; | ||||
|     } | ||||
|  | ||||
|     public BaselineLayout(Context context, AttributeSet attributeSet, int i) { | ||||
|         super(context, attributeSet, i); | ||||
|         this.baseline = -1; | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     protected void onMeasure(int i, int i2) { | ||||
|         int childCount = getChildCount(); | ||||
|         int i3 = 0; | ||||
|         int i4 = 0; | ||||
|         int i5 = 0; | ||||
|         int i6 = -1; | ||||
|         int i7 = -1; | ||||
|         for (int i8 = 0; i8 < childCount; i8++) { | ||||
|             View childAt = getChildAt(i8); | ||||
|             if (childAt.getVisibility() != 8) { | ||||
|                 measureChild(childAt, i, i2); | ||||
|                 int baseline = childAt.getBaseline(); | ||||
|                 if (baseline != -1) { | ||||
|                     i6 = Math.max(i6, baseline); | ||||
|                     i7 = Math.max(i7, childAt.getMeasuredHeight() - baseline); | ||||
|                 } | ||||
|                 i4 = Math.max(i4, childAt.getMeasuredWidth()); | ||||
|                 i3 = Math.max(i3, childAt.getMeasuredHeight()); | ||||
|                 i5 = View.combineMeasuredStates(i5, childAt.getMeasuredState()); | ||||
|             } | ||||
|         } | ||||
|         if (i6 != -1) { | ||||
|             i3 = Math.max(i3, Math.max(i7, getPaddingBottom()) + i6); | ||||
|             this.baseline = i6; | ||||
|         } | ||||
|         setMeasuredDimension(View.resolveSizeAndState(Math.max(i4, getSuggestedMinimumWidth()), i, i5), View.resolveSizeAndState(Math.max(i3, getSuggestedMinimumHeight()), i2, i5 << 16)); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.ViewGroup, android.view.View | ||||
|     protected void onLayout(boolean z, int i, int i2, int i3, int i4) { | ||||
|         int childCount = getChildCount(); | ||||
|         int paddingLeft = getPaddingLeft(); | ||||
|         int paddingRight = ((i3 - i) - getPaddingRight()) - paddingLeft; | ||||
|         int paddingTop = getPaddingTop(); | ||||
|         for (int i5 = 0; i5 < childCount; i5++) { | ||||
|             View childAt = getChildAt(i5); | ||||
|             if (childAt.getVisibility() != 8) { | ||||
|                 int measuredWidth = childAt.getMeasuredWidth(); | ||||
|                 int measuredHeight = childAt.getMeasuredHeight(); | ||||
|                 int i6 = ((paddingRight - measuredWidth) / 2) + paddingLeft; | ||||
|                 int baseline = (this.baseline == -1 || childAt.getBaseline() == -1) ? paddingTop : (this.baseline + paddingTop) - childAt.getBaseline(); | ||||
|                 childAt.layout(i6, baseline, measuredWidth + i6, measuredHeight + baseline); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,168 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import com.google.android.material.internal.MaterialCheckable; | ||||
| import java.util.ArrayList; | ||||
| import java.util.HashMap; | ||||
| import java.util.HashSet; | ||||
| import java.util.Iterator; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Set; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class CheckableGroup<T extends MaterialCheckable<T>> { | ||||
|     private final Map<Integer, T> checkables = new HashMap(); | ||||
|     private final Set<Integer> checkedIds = new HashSet(); | ||||
|     private OnCheckedStateChangeListener onCheckedStateChangeListener; | ||||
|     private boolean selectionRequired; | ||||
|     private boolean singleSelection; | ||||
|  | ||||
|     public interface OnCheckedStateChangeListener { | ||||
|         void onCheckedStateChanged(Set<Integer> set); | ||||
|     } | ||||
|  | ||||
|     public boolean isSelectionRequired() { | ||||
|         return this.selectionRequired; | ||||
|     } | ||||
|  | ||||
|     public boolean isSingleSelection() { | ||||
|         return this.singleSelection; | ||||
|     } | ||||
|  | ||||
|     public void setOnCheckedStateChangeListener(OnCheckedStateChangeListener onCheckedStateChangeListener) { | ||||
|         this.onCheckedStateChangeListener = onCheckedStateChangeListener; | ||||
|     } | ||||
|  | ||||
|     public void setSelectionRequired(boolean z) { | ||||
|         this.selectionRequired = z; | ||||
|     } | ||||
|  | ||||
|     public void setSingleSelection(boolean z) { | ||||
|         if (this.singleSelection != z) { | ||||
|             this.singleSelection = z; | ||||
|             clearCheck(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Multi-variable type inference failed */ | ||||
|     public void addCheckable(T t) { | ||||
|         this.checkables.put(Integer.valueOf(t.getId()), t); | ||||
|         if (t.isChecked()) { | ||||
|             checkInternal(t); | ||||
|         } | ||||
|         t.setInternalOnCheckedChangeListener(new MaterialCheckable.OnCheckedChangeListener<T>() { // from class: com.google.android.material.internal.CheckableGroup.1 | ||||
|             @Override // com.google.android.material.internal.MaterialCheckable.OnCheckedChangeListener | ||||
|             public void onCheckedChanged(T t2, boolean z) { | ||||
|                 if (z) { | ||||
|                     if (!CheckableGroup.this.checkInternal(t2)) { | ||||
|                         return; | ||||
|                     } | ||||
|                 } else { | ||||
|                     CheckableGroup checkableGroup = CheckableGroup.this; | ||||
|                     if (!checkableGroup.uncheckInternal(t2, checkableGroup.selectionRequired)) { | ||||
|                         return; | ||||
|                     } | ||||
|                 } | ||||
|                 CheckableGroup.this.onCheckedStateChanged(); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     public void removeCheckable(T t) { | ||||
|         t.setInternalOnCheckedChangeListener(null); | ||||
|         this.checkables.remove(Integer.valueOf(t.getId())); | ||||
|         this.checkedIds.remove(Integer.valueOf(t.getId())); | ||||
|     } | ||||
|  | ||||
|     public void check(int i) { | ||||
|         T t = this.checkables.get(Integer.valueOf(i)); | ||||
|         if (t != null && checkInternal(t)) { | ||||
|             onCheckedStateChanged(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void uncheck(int i) { | ||||
|         T t = this.checkables.get(Integer.valueOf(i)); | ||||
|         if (t != null && uncheckInternal(t, this.selectionRequired)) { | ||||
|             onCheckedStateChanged(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void clearCheck() { | ||||
|         boolean z = !this.checkedIds.isEmpty(); | ||||
|         Iterator<T> it = this.checkables.values().iterator(); | ||||
|         while (it.hasNext()) { | ||||
|             uncheckInternal(it.next(), false); | ||||
|         } | ||||
|         if (z) { | ||||
|             onCheckedStateChanged(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public int getSingleCheckedId() { | ||||
|         if (!this.singleSelection || this.checkedIds.isEmpty()) { | ||||
|             return -1; | ||||
|         } | ||||
|         return this.checkedIds.iterator().next().intValue(); | ||||
|     } | ||||
|  | ||||
|     public Set<Integer> getCheckedIds() { | ||||
|         return new HashSet(this.checkedIds); | ||||
|     } | ||||
|  | ||||
|     public List<Integer> getCheckedIdsSortedByChildOrder(ViewGroup viewGroup) { | ||||
|         Set<Integer> checkedIds = getCheckedIds(); | ||||
|         ArrayList arrayList = new ArrayList(); | ||||
|         for (int i = 0; i < viewGroup.getChildCount(); i++) { | ||||
|             View childAt = viewGroup.getChildAt(i); | ||||
|             if ((childAt instanceof MaterialCheckable) && checkedIds.contains(Integer.valueOf(childAt.getId()))) { | ||||
|                 arrayList.add(Integer.valueOf(childAt.getId())); | ||||
|             } | ||||
|         } | ||||
|         return arrayList; | ||||
|     } | ||||
|  | ||||
|     /* JADX INFO: Access modifiers changed from: private */ | ||||
|     public boolean checkInternal(MaterialCheckable<T> materialCheckable) { | ||||
|         int id = materialCheckable.getId(); | ||||
|         if (this.checkedIds.contains(Integer.valueOf(id))) { | ||||
|             return false; | ||||
|         } | ||||
|         T t = this.checkables.get(Integer.valueOf(getSingleCheckedId())); | ||||
|         if (t != null) { | ||||
|             uncheckInternal(t, false); | ||||
|         } | ||||
|         boolean add = this.checkedIds.add(Integer.valueOf(id)); | ||||
|         if (!materialCheckable.isChecked()) { | ||||
|             materialCheckable.setChecked(true); | ||||
|         } | ||||
|         return add; | ||||
|     } | ||||
|  | ||||
|     /* JADX INFO: Access modifiers changed from: private */ | ||||
|     public boolean uncheckInternal(MaterialCheckable<T> materialCheckable, boolean z) { | ||||
|         int id = materialCheckable.getId(); | ||||
|         if (!this.checkedIds.contains(Integer.valueOf(id))) { | ||||
|             return false; | ||||
|         } | ||||
|         if (z && this.checkedIds.size() == 1 && this.checkedIds.contains(Integer.valueOf(id))) { | ||||
|             materialCheckable.setChecked(true); | ||||
|             return false; | ||||
|         } | ||||
|         boolean remove = this.checkedIds.remove(Integer.valueOf(id)); | ||||
|         if (materialCheckable.isChecked()) { | ||||
|             materialCheckable.setChecked(false); | ||||
|         } | ||||
|         return remove; | ||||
|     } | ||||
|  | ||||
|     /* JADX INFO: Access modifiers changed from: private */ | ||||
|     public void onCheckedStateChanged() { | ||||
|         OnCheckedStateChangeListener onCheckedStateChangeListener = this.onCheckedStateChangeListener; | ||||
|         if (onCheckedStateChangeListener != null) { | ||||
|             onCheckedStateChangeListener.onCheckedStateChanged(getCheckedIds()); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,164 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.R; | ||||
| import android.content.Context; | ||||
| import android.os.Parcel; | ||||
| import android.os.Parcelable; | ||||
| import android.util.AttributeSet; | ||||
| import android.view.View; | ||||
| import android.view.accessibility.AccessibilityEvent; | ||||
| import android.widget.Checkable; | ||||
| import androidx.appcompat.widget.AppCompatImageButton; | ||||
| import androidx.core.view.AccessibilityDelegateCompat; | ||||
| import androidx.core.view.ViewCompat; | ||||
| import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; | ||||
| import androidx.customview.view.AbsSavedState; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class CheckableImageButton extends AppCompatImageButton implements Checkable { | ||||
|     private static final int[] DRAWABLE_STATE_CHECKED = {R.attr.state_checked}; | ||||
|     private boolean checkable; | ||||
|     private boolean checked; | ||||
|     private boolean pressable; | ||||
|  | ||||
|     public boolean isCheckable() { | ||||
|         return this.checkable; | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Checkable | ||||
|     public boolean isChecked() { | ||||
|         return this.checked; | ||||
|     } | ||||
|  | ||||
|     public boolean isPressable() { | ||||
|         return this.pressable; | ||||
|     } | ||||
|  | ||||
|     public void setPressable(boolean z) { | ||||
|         this.pressable = z; | ||||
|     } | ||||
|  | ||||
|     public CheckableImageButton(Context context) { | ||||
|         this(context, null); | ||||
|     } | ||||
|  | ||||
|     public CheckableImageButton(Context context, AttributeSet attributeSet) { | ||||
|         this(context, attributeSet, androidx.appcompat.R.attr.imageButtonStyle); | ||||
|     } | ||||
|  | ||||
|     public CheckableImageButton(Context context, AttributeSet attributeSet, int i) { | ||||
|         super(context, attributeSet, i); | ||||
|         this.checkable = true; | ||||
|         this.pressable = true; | ||||
|         ViewCompat.setAccessibilityDelegate(this, new AccessibilityDelegateCompat() { // from class: com.google.android.material.internal.CheckableImageButton.1 | ||||
|             @Override // androidx.core.view.AccessibilityDelegateCompat | ||||
|             public void onInitializeAccessibilityEvent(View view, AccessibilityEvent accessibilityEvent) { | ||||
|                 super.onInitializeAccessibilityEvent(view, accessibilityEvent); | ||||
|                 accessibilityEvent.setChecked(CheckableImageButton.this.isChecked()); | ||||
|             } | ||||
|  | ||||
|             @Override // androidx.core.view.AccessibilityDelegateCompat | ||||
|             public void onInitializeAccessibilityNodeInfo(View view, AccessibilityNodeInfoCompat accessibilityNodeInfoCompat) { | ||||
|                 super.onInitializeAccessibilityNodeInfo(view, accessibilityNodeInfoCompat); | ||||
|                 accessibilityNodeInfoCompat.setCheckable(CheckableImageButton.this.isCheckable()); | ||||
|                 accessibilityNodeInfoCompat.setChecked(CheckableImageButton.this.isChecked()); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Checkable | ||||
|     public void setChecked(boolean z) { | ||||
|         if (!this.checkable || this.checked == z) { | ||||
|             return; | ||||
|         } | ||||
|         this.checked = z; | ||||
|         refreshDrawableState(); | ||||
|         sendAccessibilityEvent(2048); | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.Checkable | ||||
|     public void toggle() { | ||||
|         setChecked(!this.checked); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     public void setPressed(boolean z) { | ||||
|         if (this.pressable) { | ||||
|             super.setPressed(z); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.ImageView, android.view.View | ||||
|     public int[] onCreateDrawableState(int i) { | ||||
|         if (this.checked) { | ||||
|             int[] iArr = DRAWABLE_STATE_CHECKED; | ||||
|             return mergeDrawableStates(super.onCreateDrawableState(i + iArr.length), iArr); | ||||
|         } | ||||
|         return super.onCreateDrawableState(i); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     protected Parcelable onSaveInstanceState() { | ||||
|         SavedState savedState = new SavedState(super.onSaveInstanceState()); | ||||
|         savedState.checked = this.checked; | ||||
|         return savedState; | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     protected void onRestoreInstanceState(Parcelable parcelable) { | ||||
|         if (!(parcelable instanceof SavedState)) { | ||||
|             super.onRestoreInstanceState(parcelable); | ||||
|             return; | ||||
|         } | ||||
|         SavedState savedState = (SavedState) parcelable; | ||||
|         super.onRestoreInstanceState(savedState.getSuperState()); | ||||
|         setChecked(savedState.checked); | ||||
|     } | ||||
|  | ||||
|     public void setCheckable(boolean z) { | ||||
|         if (this.checkable != z) { | ||||
|             this.checkable = z; | ||||
|             sendAccessibilityEvent(0); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     static class SavedState extends AbsSavedState { | ||||
|         public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.ClassLoaderCreator<SavedState>() { // from class: com.google.android.material.internal.CheckableImageButton.SavedState.1 | ||||
|             /* JADX WARN: Can't rename method to resolve collision */ | ||||
|             @Override // android.os.Parcelable.ClassLoaderCreator | ||||
|             public SavedState createFromParcel(Parcel parcel, ClassLoader classLoader) { | ||||
|                 return new SavedState(parcel, classLoader); | ||||
|             } | ||||
|  | ||||
|             @Override // android.os.Parcelable.Creator | ||||
|             public SavedState createFromParcel(Parcel parcel) { | ||||
|                 return new SavedState(parcel, null); | ||||
|             } | ||||
|  | ||||
|             @Override // android.os.Parcelable.Creator | ||||
|             public SavedState[] newArray(int i) { | ||||
|                 return new SavedState[i]; | ||||
|             } | ||||
|         }; | ||||
|         boolean checked; | ||||
|  | ||||
|         public SavedState(Parcelable parcelable) { | ||||
|             super(parcelable); | ||||
|         } | ||||
|  | ||||
|         public SavedState(Parcel parcel, ClassLoader classLoader) { | ||||
|             super(parcel, classLoader); | ||||
|             readFromParcel(parcel); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.customview.view.AbsSavedState, android.os.Parcelable | ||||
|         public void writeToParcel(Parcel parcel, int i) { | ||||
|             super.writeToParcel(parcel, i); | ||||
|             parcel.writeInt(this.checked ? 1 : 0); | ||||
|         } | ||||
|  | ||||
|         private void readFromParcel(Parcel parcel) { | ||||
|             this.checked = parcel.readInt() == 1; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,72 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.graphics.Canvas; | ||||
| import android.graphics.Path; | ||||
| import android.graphics.Rect; | ||||
| import android.graphics.RectF; | ||||
| import android.util.AttributeSet; | ||||
| import android.widget.FrameLayout; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class ClippableRoundedCornerLayout extends FrameLayout { | ||||
|     private float cornerRadius; | ||||
|     private Path path; | ||||
|  | ||||
|     public float getCornerRadius() { | ||||
|         return this.cornerRadius; | ||||
|     } | ||||
|  | ||||
|     public ClippableRoundedCornerLayout(Context context) { | ||||
|         super(context); | ||||
|     } | ||||
|  | ||||
|     public ClippableRoundedCornerLayout(Context context, AttributeSet attributeSet) { | ||||
|         super(context, attributeSet); | ||||
|     } | ||||
|  | ||||
|     public ClippableRoundedCornerLayout(Context context, AttributeSet attributeSet, int i) { | ||||
|         super(context, attributeSet, i); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.ViewGroup, android.view.View | ||||
|     protected void dispatchDraw(Canvas canvas) { | ||||
|         if (this.path == null) { | ||||
|             super.dispatchDraw(canvas); | ||||
|             return; | ||||
|         } | ||||
|         int save = canvas.save(); | ||||
|         canvas.clipPath(this.path); | ||||
|         super.dispatchDraw(canvas); | ||||
|         canvas.restoreToCount(save); | ||||
|     } | ||||
|  | ||||
|     public void resetClipBoundsAndCornerRadius() { | ||||
|         this.path = null; | ||||
|         this.cornerRadius = 0.0f; | ||||
|         invalidate(); | ||||
|     } | ||||
|  | ||||
|     public void updateCornerRadius(float f) { | ||||
|         updateClipBoundsAndCornerRadius(getLeft(), getTop(), getRight(), getBottom(), f); | ||||
|     } | ||||
|  | ||||
|     public void updateClipBoundsAndCornerRadius(Rect rect, float f) { | ||||
|         updateClipBoundsAndCornerRadius(rect.left, rect.top, rect.right, rect.bottom, f); | ||||
|     } | ||||
|  | ||||
|     public void updateClipBoundsAndCornerRadius(float f, float f2, float f3, float f4, float f5) { | ||||
|         updateClipBoundsAndCornerRadius(new RectF(f, f2, f3, f4), f5); | ||||
|     } | ||||
|  | ||||
|     public void updateClipBoundsAndCornerRadius(RectF rectF, float f) { | ||||
|         if (this.path == null) { | ||||
|             this.path = new Path(); | ||||
|         } | ||||
|         this.cornerRadius = f; | ||||
|         this.path.reset(); | ||||
|         this.path.addRoundRect(rectF, f, f, Path.Direction.CW); | ||||
|         this.path.close(); | ||||
|         invalidate(); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,966 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.animation.TimeInterpolator; | ||||
| import android.content.res.ColorStateList; | ||||
| import android.content.res.Configuration; | ||||
| import android.graphics.Bitmap; | ||||
| import android.graphics.Canvas; | ||||
| import android.graphics.Color; | ||||
| import android.graphics.Paint; | ||||
| import android.graphics.Rect; | ||||
| import android.graphics.RectF; | ||||
| import android.graphics.Typeface; | ||||
| import android.os.Build; | ||||
| import android.text.Layout; | ||||
| import android.text.StaticLayout; | ||||
| import android.text.TextPaint; | ||||
| import android.text.TextUtils; | ||||
| import android.util.Log; | ||||
| import android.view.View; | ||||
| import androidx.core.math.MathUtils; | ||||
| import androidx.core.text.TextDirectionHeuristicCompat; | ||||
| import androidx.core.text.TextDirectionHeuristicsCompat; | ||||
| import androidx.core.util.Preconditions; | ||||
| import androidx.core.view.GravityCompat; | ||||
| import androidx.core.view.ViewCompat; | ||||
| import com.google.android.material.animation.AnimationUtils; | ||||
| import com.google.android.material.color.MaterialColors; | ||||
| import com.google.android.material.internal.StaticLayoutBuilderCompat; | ||||
| import com.google.android.material.resources.CancelableFontCallback; | ||||
| import com.google.android.material.resources.TextAppearance; | ||||
| import com.google.android.material.resources.TypefaceUtils; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public final class CollapsingTextHelper { | ||||
|     private static final boolean DEBUG_DRAW = false; | ||||
|     private static final String ELLIPSIS_NORMAL = "…"; | ||||
|     private static final float FADE_MODE_THRESHOLD_FRACTION_RELATIVE = 0.5f; | ||||
|     private static final String TAG = "CollapsingTextHelper"; | ||||
|     private boolean boundsChanged; | ||||
|     private final Rect collapsedBounds; | ||||
|     private float collapsedDrawX; | ||||
|     private float collapsedDrawY; | ||||
|     private CancelableFontCallback collapsedFontCallback; | ||||
|     private float collapsedLetterSpacing; | ||||
|     private ColorStateList collapsedShadowColor; | ||||
|     private float collapsedShadowDx; | ||||
|     private float collapsedShadowDy; | ||||
|     private float collapsedShadowRadius; | ||||
|     private float collapsedTextBlend; | ||||
|     private ColorStateList collapsedTextColor; | ||||
|     private float collapsedTextWidth; | ||||
|     private Typeface collapsedTypeface; | ||||
|     private Typeface collapsedTypefaceBold; | ||||
|     private Typeface collapsedTypefaceDefault; | ||||
|     private final RectF currentBounds; | ||||
|     private float currentDrawX; | ||||
|     private float currentDrawY; | ||||
|     private float currentLetterSpacing; | ||||
|     private int currentOffsetY; | ||||
|     private int currentShadowColor; | ||||
|     private float currentShadowDx; | ||||
|     private float currentShadowDy; | ||||
|     private float currentShadowRadius; | ||||
|     private float currentTextSize; | ||||
|     private Typeface currentTypeface; | ||||
|     private final Rect expandedBounds; | ||||
|     private float expandedDrawX; | ||||
|     private float expandedDrawY; | ||||
|     private CancelableFontCallback expandedFontCallback; | ||||
|     private float expandedFraction; | ||||
|     private float expandedLetterSpacing; | ||||
|     private int expandedLineCount; | ||||
|     private ColorStateList expandedShadowColor; | ||||
|     private float expandedShadowDx; | ||||
|     private float expandedShadowDy; | ||||
|     private float expandedShadowRadius; | ||||
|     private float expandedTextBlend; | ||||
|     private ColorStateList expandedTextColor; | ||||
|     private Bitmap expandedTitleTexture; | ||||
|     private Typeface expandedTypeface; | ||||
|     private Typeface expandedTypefaceBold; | ||||
|     private Typeface expandedTypefaceDefault; | ||||
|     private boolean fadeModeEnabled; | ||||
|     private float fadeModeStartFraction; | ||||
|     private float fadeModeThresholdFraction; | ||||
|     private boolean isRtl; | ||||
|     private TimeInterpolator positionInterpolator; | ||||
|     private float scale; | ||||
|     private int[] state; | ||||
|     private StaticLayoutBuilderConfigurer staticLayoutBuilderConfigurer; | ||||
|     private CharSequence text; | ||||
|     private StaticLayout textLayout; | ||||
|     private final TextPaint textPaint; | ||||
|     private TimeInterpolator textSizeInterpolator; | ||||
|     private CharSequence textToDraw; | ||||
|     private CharSequence textToDrawCollapsed; | ||||
|     private Paint texturePaint; | ||||
|     private final TextPaint tmpPaint; | ||||
|     private boolean useTexture; | ||||
|     private final View view; | ||||
|     private static final boolean USE_SCALING_TEXTURE = false; | ||||
|     private static final Paint DEBUG_DRAW_PAINT = null; | ||||
|     private int expandedTextGravity = 16; | ||||
|     private int collapsedTextGravity = 16; | ||||
|     private float expandedTextSize = 15.0f; | ||||
|     private float collapsedTextSize = 15.0f; | ||||
|     private TextUtils.TruncateAt titleTextEllipsize = TextUtils.TruncateAt.END; | ||||
|     private boolean isRtlTextDirectionHeuristicsEnabled = true; | ||||
|     private int maxLines = 1; | ||||
|     private float lineSpacingAdd = 0.0f; | ||||
|     private float lineSpacingMultiplier = 1.0f; | ||||
|     private int hyphenationFrequency = StaticLayoutBuilderCompat.DEFAULT_HYPHENATION_FREQUENCY; | ||||
|  | ||||
|     private float calculateFadeModeThresholdFraction() { | ||||
|         float f = this.fadeModeStartFraction; | ||||
|         return f + ((1.0f - f) * 0.5f); | ||||
|     } | ||||
|  | ||||
|     private boolean shouldDrawMultiline() { | ||||
|         return this.maxLines > 1 && (!this.isRtl || this.fadeModeEnabled) && !this.useTexture; | ||||
|     } | ||||
|  | ||||
|     public ColorStateList getCollapsedTextColor() { | ||||
|         return this.collapsedTextColor; | ||||
|     } | ||||
|  | ||||
|     public int getCollapsedTextGravity() { | ||||
|         return this.collapsedTextGravity; | ||||
|     } | ||||
|  | ||||
|     public float getCollapsedTextSize() { | ||||
|         return this.collapsedTextSize; | ||||
|     } | ||||
|  | ||||
|     public int getExpandedLineCount() { | ||||
|         return this.expandedLineCount; | ||||
|     } | ||||
|  | ||||
|     public ColorStateList getExpandedTextColor() { | ||||
|         return this.expandedTextColor; | ||||
|     } | ||||
|  | ||||
|     public int getExpandedTextGravity() { | ||||
|         return this.expandedTextGravity; | ||||
|     } | ||||
|  | ||||
|     public float getExpandedTextSize() { | ||||
|         return this.expandedTextSize; | ||||
|     } | ||||
|  | ||||
|     public float getExpansionFraction() { | ||||
|         return this.expandedFraction; | ||||
|     } | ||||
|  | ||||
|     public float getFadeModeThresholdFraction() { | ||||
|         return this.fadeModeThresholdFraction; | ||||
|     } | ||||
|  | ||||
|     public int getHyphenationFrequency() { | ||||
|         return this.hyphenationFrequency; | ||||
|     } | ||||
|  | ||||
|     public int getMaxLines() { | ||||
|         return this.maxLines; | ||||
|     } | ||||
|  | ||||
|     public TimeInterpolator getPositionInterpolator() { | ||||
|         return this.positionInterpolator; | ||||
|     } | ||||
|  | ||||
|     public CharSequence getText() { | ||||
|         return this.text; | ||||
|     } | ||||
|  | ||||
|     public TextUtils.TruncateAt getTitleTextEllipsize() { | ||||
|         return this.titleTextEllipsize; | ||||
|     } | ||||
|  | ||||
|     public boolean isRtlTextDirectionHeuristicsEnabled() { | ||||
|         return this.isRtlTextDirectionHeuristicsEnabled; | ||||
|     } | ||||
|  | ||||
|     public void setCurrentOffsetY(int i) { | ||||
|         this.currentOffsetY = i; | ||||
|     } | ||||
|  | ||||
|     public void setFadeModeEnabled(boolean z) { | ||||
|         this.fadeModeEnabled = z; | ||||
|     } | ||||
|  | ||||
|     public void setHyphenationFrequency(int i) { | ||||
|         this.hyphenationFrequency = i; | ||||
|     } | ||||
|  | ||||
|     public void setLineSpacingAdd(float f) { | ||||
|         this.lineSpacingAdd = f; | ||||
|     } | ||||
|  | ||||
|     public void setLineSpacingMultiplier(float f) { | ||||
|         this.lineSpacingMultiplier = f; | ||||
|     } | ||||
|  | ||||
|     public void setRtlTextDirectionHeuristicsEnabled(boolean z) { | ||||
|         this.isRtlTextDirectionHeuristicsEnabled = z; | ||||
|     } | ||||
|  | ||||
|     public CollapsingTextHelper(View view) { | ||||
|         this.view = view; | ||||
|         TextPaint textPaint = new TextPaint(129); | ||||
|         this.textPaint = textPaint; | ||||
|         this.tmpPaint = new TextPaint(textPaint); | ||||
|         this.collapsedBounds = new Rect(); | ||||
|         this.expandedBounds = new Rect(); | ||||
|         this.currentBounds = new RectF(); | ||||
|         this.fadeModeThresholdFraction = calculateFadeModeThresholdFraction(); | ||||
|         maybeUpdateFontWeightAdjustment(view.getContext().getResources().getConfiguration()); | ||||
|     } | ||||
|  | ||||
|     public void setTextSizeInterpolator(TimeInterpolator timeInterpolator) { | ||||
|         this.textSizeInterpolator = timeInterpolator; | ||||
|         recalculate(); | ||||
|     } | ||||
|  | ||||
|     public void setPositionInterpolator(TimeInterpolator timeInterpolator) { | ||||
|         this.positionInterpolator = timeInterpolator; | ||||
|         recalculate(); | ||||
|     } | ||||
|  | ||||
|     public void setExpandedTextSize(float f) { | ||||
|         if (this.expandedTextSize != f) { | ||||
|             this.expandedTextSize = f; | ||||
|             recalculate(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setCollapsedTextSize(float f) { | ||||
|         if (this.collapsedTextSize != f) { | ||||
|             this.collapsedTextSize = f; | ||||
|             recalculate(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setCollapsedTextColor(ColorStateList colorStateList) { | ||||
|         if (this.collapsedTextColor != colorStateList) { | ||||
|             this.collapsedTextColor = colorStateList; | ||||
|             recalculate(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setExpandedTextColor(ColorStateList colorStateList) { | ||||
|         if (this.expandedTextColor != colorStateList) { | ||||
|             this.expandedTextColor = colorStateList; | ||||
|             recalculate(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setCollapsedAndExpandedTextColor(ColorStateList colorStateList) { | ||||
|         if (this.collapsedTextColor == colorStateList && this.expandedTextColor == colorStateList) { | ||||
|             return; | ||||
|         } | ||||
|         this.collapsedTextColor = colorStateList; | ||||
|         this.expandedTextColor = colorStateList; | ||||
|         recalculate(); | ||||
|     } | ||||
|  | ||||
|     public void setExpandedLetterSpacing(float f) { | ||||
|         if (this.expandedLetterSpacing != f) { | ||||
|             this.expandedLetterSpacing = f; | ||||
|             recalculate(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setExpandedBounds(int i, int i2, int i3, int i4) { | ||||
|         if (rectEquals(this.expandedBounds, i, i2, i3, i4)) { | ||||
|             return; | ||||
|         } | ||||
|         this.expandedBounds.set(i, i2, i3, i4); | ||||
|         this.boundsChanged = true; | ||||
|     } | ||||
|  | ||||
|     public void setExpandedBounds(Rect rect) { | ||||
|         setExpandedBounds(rect.left, rect.top, rect.right, rect.bottom); | ||||
|     } | ||||
|  | ||||
|     public void setCollapsedBounds(int i, int i2, int i3, int i4) { | ||||
|         if (rectEquals(this.collapsedBounds, i, i2, i3, i4)) { | ||||
|             return; | ||||
|         } | ||||
|         this.collapsedBounds.set(i, i2, i3, i4); | ||||
|         this.boundsChanged = true; | ||||
|     } | ||||
|  | ||||
|     public void setCollapsedBounds(Rect rect) { | ||||
|         setCollapsedBounds(rect.left, rect.top, rect.right, rect.bottom); | ||||
|     } | ||||
|  | ||||
|     public void getCollapsedTextActualBounds(RectF rectF, int i, int i2) { | ||||
|         this.isRtl = calculateIsRtl(this.text); | ||||
|         rectF.left = Math.max(getCollapsedTextLeftBound(i, i2), this.collapsedBounds.left); | ||||
|         rectF.top = this.collapsedBounds.top; | ||||
|         rectF.right = Math.min(getCollapsedTextRightBound(rectF, i, i2), this.collapsedBounds.right); | ||||
|         rectF.bottom = this.collapsedBounds.top + getCollapsedTextHeight(); | ||||
|     } | ||||
|  | ||||
|     private float getCollapsedTextLeftBound(int i, int i2) { | ||||
|         return (i2 == 17 || (i2 & 7) == 1) ? (i / 2.0f) - (this.collapsedTextWidth / 2.0f) : ((i2 & GravityCompat.END) == 8388613 || (i2 & 5) == 5) ? this.isRtl ? this.collapsedBounds.left : this.collapsedBounds.right - this.collapsedTextWidth : this.isRtl ? this.collapsedBounds.right - this.collapsedTextWidth : this.collapsedBounds.left; | ||||
|     } | ||||
|  | ||||
|     private float getCollapsedTextRightBound(RectF rectF, int i, int i2) { | ||||
|         return (i2 == 17 || (i2 & 7) == 1) ? (i / 2.0f) + (this.collapsedTextWidth / 2.0f) : ((i2 & GravityCompat.END) == 8388613 || (i2 & 5) == 5) ? this.isRtl ? rectF.left + this.collapsedTextWidth : this.collapsedBounds.right : this.isRtl ? this.collapsedBounds.right : rectF.left + this.collapsedTextWidth; | ||||
|     } | ||||
|  | ||||
|     public float getExpandedTextHeight() { | ||||
|         getTextPaintExpanded(this.tmpPaint); | ||||
|         return -this.tmpPaint.ascent(); | ||||
|     } | ||||
|  | ||||
|     public float getExpandedTextFullHeight() { | ||||
|         getTextPaintExpanded(this.tmpPaint); | ||||
|         return (-this.tmpPaint.ascent()) + this.tmpPaint.descent(); | ||||
|     } | ||||
|  | ||||
|     public float getCollapsedTextHeight() { | ||||
|         getTextPaintCollapsed(this.tmpPaint); | ||||
|         return -this.tmpPaint.ascent(); | ||||
|     } | ||||
|  | ||||
|     public void setFadeModeStartFraction(float f) { | ||||
|         this.fadeModeStartFraction = f; | ||||
|         this.fadeModeThresholdFraction = calculateFadeModeThresholdFraction(); | ||||
|     } | ||||
|  | ||||
|     private void getTextPaintExpanded(TextPaint textPaint) { | ||||
|         textPaint.setTextSize(this.expandedTextSize); | ||||
|         textPaint.setTypeface(this.expandedTypeface); | ||||
|         textPaint.setLetterSpacing(this.expandedLetterSpacing); | ||||
|     } | ||||
|  | ||||
|     private void getTextPaintCollapsed(TextPaint textPaint) { | ||||
|         textPaint.setTextSize(this.collapsedTextSize); | ||||
|         textPaint.setTypeface(this.collapsedTypeface); | ||||
|         textPaint.setLetterSpacing(this.collapsedLetterSpacing); | ||||
|     } | ||||
|  | ||||
|     public void setExpandedTextGravity(int i) { | ||||
|         if (this.expandedTextGravity != i) { | ||||
|             this.expandedTextGravity = i; | ||||
|             recalculate(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setCollapsedTextGravity(int i) { | ||||
|         if (this.collapsedTextGravity != i) { | ||||
|             this.collapsedTextGravity = i; | ||||
|             recalculate(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setCollapsedTextAppearance(int i) { | ||||
|         TextAppearance textAppearance = new TextAppearance(this.view.getContext(), i); | ||||
|         if (textAppearance.getTextColor() != null) { | ||||
|             this.collapsedTextColor = textAppearance.getTextColor(); | ||||
|         } | ||||
|         if (textAppearance.getTextSize() != 0.0f) { | ||||
|             this.collapsedTextSize = textAppearance.getTextSize(); | ||||
|         } | ||||
|         if (textAppearance.shadowColor != null) { | ||||
|             this.collapsedShadowColor = textAppearance.shadowColor; | ||||
|         } | ||||
|         this.collapsedShadowDx = textAppearance.shadowDx; | ||||
|         this.collapsedShadowDy = textAppearance.shadowDy; | ||||
|         this.collapsedShadowRadius = textAppearance.shadowRadius; | ||||
|         this.collapsedLetterSpacing = textAppearance.letterSpacing; | ||||
|         CancelableFontCallback cancelableFontCallback = this.collapsedFontCallback; | ||||
|         if (cancelableFontCallback != null) { | ||||
|             cancelableFontCallback.cancel(); | ||||
|         } | ||||
|         this.collapsedFontCallback = new CancelableFontCallback(new CancelableFontCallback.ApplyFont() { // from class: com.google.android.material.internal.CollapsingTextHelper.1 | ||||
|             @Override // com.google.android.material.resources.CancelableFontCallback.ApplyFont | ||||
|             public void apply(Typeface typeface) { | ||||
|                 CollapsingTextHelper.this.setCollapsedTypeface(typeface); | ||||
|             } | ||||
|         }, textAppearance.getFallbackFont()); | ||||
|         textAppearance.getFontAsync(this.view.getContext(), this.collapsedFontCallback); | ||||
|         recalculate(); | ||||
|     } | ||||
|  | ||||
|     public void setExpandedTextAppearance(int i) { | ||||
|         TextAppearance textAppearance = new TextAppearance(this.view.getContext(), i); | ||||
|         if (textAppearance.getTextColor() != null) { | ||||
|             this.expandedTextColor = textAppearance.getTextColor(); | ||||
|         } | ||||
|         if (textAppearance.getTextSize() != 0.0f) { | ||||
|             this.expandedTextSize = textAppearance.getTextSize(); | ||||
|         } | ||||
|         if (textAppearance.shadowColor != null) { | ||||
|             this.expandedShadowColor = textAppearance.shadowColor; | ||||
|         } | ||||
|         this.expandedShadowDx = textAppearance.shadowDx; | ||||
|         this.expandedShadowDy = textAppearance.shadowDy; | ||||
|         this.expandedShadowRadius = textAppearance.shadowRadius; | ||||
|         this.expandedLetterSpacing = textAppearance.letterSpacing; | ||||
|         CancelableFontCallback cancelableFontCallback = this.expandedFontCallback; | ||||
|         if (cancelableFontCallback != null) { | ||||
|             cancelableFontCallback.cancel(); | ||||
|         } | ||||
|         this.expandedFontCallback = new CancelableFontCallback(new CancelableFontCallback.ApplyFont() { // from class: com.google.android.material.internal.CollapsingTextHelper.2 | ||||
|             @Override // com.google.android.material.resources.CancelableFontCallback.ApplyFont | ||||
|             public void apply(Typeface typeface) { | ||||
|                 CollapsingTextHelper.this.setExpandedTypeface(typeface); | ||||
|             } | ||||
|         }, textAppearance.getFallbackFont()); | ||||
|         textAppearance.getFontAsync(this.view.getContext(), this.expandedFontCallback); | ||||
|         recalculate(); | ||||
|     } | ||||
|  | ||||
|     public void setTitleTextEllipsize(TextUtils.TruncateAt truncateAt) { | ||||
|         this.titleTextEllipsize = truncateAt; | ||||
|         recalculate(); | ||||
|     } | ||||
|  | ||||
|     public void setCollapsedTypeface(Typeface typeface) { | ||||
|         if (setCollapsedTypefaceInternal(typeface)) { | ||||
|             recalculate(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setExpandedTypeface(Typeface typeface) { | ||||
|         if (setExpandedTypefaceInternal(typeface)) { | ||||
|             recalculate(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setTypefaces(Typeface typeface) { | ||||
|         boolean collapsedTypefaceInternal = setCollapsedTypefaceInternal(typeface); | ||||
|         boolean expandedTypefaceInternal = setExpandedTypefaceInternal(typeface); | ||||
|         if (collapsedTypefaceInternal || expandedTypefaceInternal) { | ||||
|             recalculate(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private boolean setCollapsedTypefaceInternal(Typeface typeface) { | ||||
|         CancelableFontCallback cancelableFontCallback = this.collapsedFontCallback; | ||||
|         if (cancelableFontCallback != null) { | ||||
|             cancelableFontCallback.cancel(); | ||||
|         } | ||||
|         if (this.collapsedTypefaceDefault == typeface) { | ||||
|             return false; | ||||
|         } | ||||
|         this.collapsedTypefaceDefault = typeface; | ||||
|         Typeface maybeCopyWithFontWeightAdjustment = TypefaceUtils.maybeCopyWithFontWeightAdjustment(this.view.getContext().getResources().getConfiguration(), typeface); | ||||
|         this.collapsedTypefaceBold = maybeCopyWithFontWeightAdjustment; | ||||
|         if (maybeCopyWithFontWeightAdjustment == null) { | ||||
|             maybeCopyWithFontWeightAdjustment = this.collapsedTypefaceDefault; | ||||
|         } | ||||
|         this.collapsedTypeface = maybeCopyWithFontWeightAdjustment; | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     private boolean setExpandedTypefaceInternal(Typeface typeface) { | ||||
|         CancelableFontCallback cancelableFontCallback = this.expandedFontCallback; | ||||
|         if (cancelableFontCallback != null) { | ||||
|             cancelableFontCallback.cancel(); | ||||
|         } | ||||
|         if (this.expandedTypefaceDefault == typeface) { | ||||
|             return false; | ||||
|         } | ||||
|         this.expandedTypefaceDefault = typeface; | ||||
|         Typeface maybeCopyWithFontWeightAdjustment = TypefaceUtils.maybeCopyWithFontWeightAdjustment(this.view.getContext().getResources().getConfiguration(), typeface); | ||||
|         this.expandedTypefaceBold = maybeCopyWithFontWeightAdjustment; | ||||
|         if (maybeCopyWithFontWeightAdjustment == null) { | ||||
|             maybeCopyWithFontWeightAdjustment = this.expandedTypefaceDefault; | ||||
|         } | ||||
|         this.expandedTypeface = maybeCopyWithFontWeightAdjustment; | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     public Typeface getCollapsedTypeface() { | ||||
|         Typeface typeface = this.collapsedTypeface; | ||||
|         return typeface != null ? typeface : Typeface.DEFAULT; | ||||
|     } | ||||
|  | ||||
|     public Typeface getExpandedTypeface() { | ||||
|         Typeface typeface = this.expandedTypeface; | ||||
|         return typeface != null ? typeface : Typeface.DEFAULT; | ||||
|     } | ||||
|  | ||||
|     public void maybeUpdateFontWeightAdjustment(Configuration configuration) { | ||||
|         if (Build.VERSION.SDK_INT >= 31) { | ||||
|             Typeface typeface = this.collapsedTypefaceDefault; | ||||
|             if (typeface != null) { | ||||
|                 this.collapsedTypefaceBold = TypefaceUtils.maybeCopyWithFontWeightAdjustment(configuration, typeface); | ||||
|             } | ||||
|             Typeface typeface2 = this.expandedTypefaceDefault; | ||||
|             if (typeface2 != null) { | ||||
|                 this.expandedTypefaceBold = TypefaceUtils.maybeCopyWithFontWeightAdjustment(configuration, typeface2); | ||||
|             } | ||||
|             Typeface typeface3 = this.collapsedTypefaceBold; | ||||
|             if (typeface3 == null) { | ||||
|                 typeface3 = this.collapsedTypefaceDefault; | ||||
|             } | ||||
|             this.collapsedTypeface = typeface3; | ||||
|             Typeface typeface4 = this.expandedTypefaceBold; | ||||
|             if (typeface4 == null) { | ||||
|                 typeface4 = this.expandedTypefaceDefault; | ||||
|             } | ||||
|             this.expandedTypeface = typeface4; | ||||
|             recalculate(true); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setExpansionFraction(float f) { | ||||
|         float clamp = MathUtils.clamp(f, 0.0f, 1.0f); | ||||
|         if (clamp != this.expandedFraction) { | ||||
|             this.expandedFraction = clamp; | ||||
|             calculateCurrentOffsets(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public final boolean setState(int[] iArr) { | ||||
|         this.state = iArr; | ||||
|         if (!isStateful()) { | ||||
|             return false; | ||||
|         } | ||||
|         recalculate(); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     public final boolean isStateful() { | ||||
|         ColorStateList colorStateList; | ||||
|         ColorStateList colorStateList2 = this.collapsedTextColor; | ||||
|         return (colorStateList2 != null && colorStateList2.isStateful()) || ((colorStateList = this.expandedTextColor) != null && colorStateList.isStateful()); | ||||
|     } | ||||
|  | ||||
|     private void calculateCurrentOffsets() { | ||||
|         calculateOffsets(this.expandedFraction); | ||||
|     } | ||||
|  | ||||
|     private void calculateOffsets(float f) { | ||||
|         float f2; | ||||
|         interpolateBounds(f); | ||||
|         if (!this.fadeModeEnabled) { | ||||
|             this.currentDrawX = lerp(this.expandedDrawX, this.collapsedDrawX, f, this.positionInterpolator); | ||||
|             this.currentDrawY = lerp(this.expandedDrawY, this.collapsedDrawY, f, this.positionInterpolator); | ||||
|             setInterpolatedTextSize(f); | ||||
|             f2 = f; | ||||
|         } else if (f < this.fadeModeThresholdFraction) { | ||||
|             this.currentDrawX = this.expandedDrawX; | ||||
|             this.currentDrawY = this.expandedDrawY; | ||||
|             setInterpolatedTextSize(0.0f); | ||||
|             f2 = 0.0f; | ||||
|         } else { | ||||
|             this.currentDrawX = this.collapsedDrawX; | ||||
|             this.currentDrawY = this.collapsedDrawY - Math.max(0, this.currentOffsetY); | ||||
|             setInterpolatedTextSize(1.0f); | ||||
|             f2 = 1.0f; | ||||
|         } | ||||
|         setCollapsedTextBlend(1.0f - lerp(0.0f, 1.0f, 1.0f - f, AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR)); | ||||
|         setExpandedTextBlend(lerp(1.0f, 0.0f, f, AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR)); | ||||
|         if (this.collapsedTextColor != this.expandedTextColor) { | ||||
|             this.textPaint.setColor(blendARGB(getCurrentExpandedTextColor(), getCurrentCollapsedTextColor(), f2)); | ||||
|         } else { | ||||
|             this.textPaint.setColor(getCurrentCollapsedTextColor()); | ||||
|         } | ||||
|         float f3 = this.collapsedLetterSpacing; | ||||
|         float f4 = this.expandedLetterSpacing; | ||||
|         if (f3 != f4) { | ||||
|             this.textPaint.setLetterSpacing(lerp(f4, f3, f, AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR)); | ||||
|         } else { | ||||
|             this.textPaint.setLetterSpacing(f3); | ||||
|         } | ||||
|         this.currentShadowRadius = lerp(this.expandedShadowRadius, this.collapsedShadowRadius, f, null); | ||||
|         this.currentShadowDx = lerp(this.expandedShadowDx, this.collapsedShadowDx, f, null); | ||||
|         this.currentShadowDy = lerp(this.expandedShadowDy, this.collapsedShadowDy, f, null); | ||||
|         int blendARGB = blendARGB(getCurrentColor(this.expandedShadowColor), getCurrentColor(this.collapsedShadowColor), f); | ||||
|         this.currentShadowColor = blendARGB; | ||||
|         this.textPaint.setShadowLayer(this.currentShadowRadius, this.currentShadowDx, this.currentShadowDy, blendARGB); | ||||
|         if (this.fadeModeEnabled) { | ||||
|             this.textPaint.setAlpha((int) (calculateFadeModeTextAlpha(f) * this.textPaint.getAlpha())); | ||||
|         } | ||||
|         ViewCompat.postInvalidateOnAnimation(this.view); | ||||
|     } | ||||
|  | ||||
|     private float calculateFadeModeTextAlpha(float f) { | ||||
|         float f2 = this.fadeModeThresholdFraction; | ||||
|         if (f <= f2) { | ||||
|             return AnimationUtils.lerp(1.0f, 0.0f, this.fadeModeStartFraction, f2, f); | ||||
|         } | ||||
|         return AnimationUtils.lerp(0.0f, 1.0f, f2, 1.0f, f); | ||||
|     } | ||||
|  | ||||
|     private int getCurrentExpandedTextColor() { | ||||
|         return getCurrentColor(this.expandedTextColor); | ||||
|     } | ||||
|  | ||||
|     public int getCurrentCollapsedTextColor() { | ||||
|         return getCurrentColor(this.collapsedTextColor); | ||||
|     } | ||||
|  | ||||
|     private int getCurrentColor(ColorStateList colorStateList) { | ||||
|         if (colorStateList == null) { | ||||
|             return 0; | ||||
|         } | ||||
|         int[] iArr = this.state; | ||||
|         if (iArr != null) { | ||||
|             return colorStateList.getColorForState(iArr, 0); | ||||
|         } | ||||
|         return colorStateList.getDefaultColor(); | ||||
|     } | ||||
|  | ||||
|     private void calculateBaseOffsets(boolean z) { | ||||
|         StaticLayout staticLayout; | ||||
|         calculateUsingTextSize(1.0f, z); | ||||
|         CharSequence charSequence = this.textToDraw; | ||||
|         if (charSequence != null && (staticLayout = this.textLayout) != null) { | ||||
|             this.textToDrawCollapsed = TextUtils.ellipsize(charSequence, this.textPaint, staticLayout.getWidth(), this.titleTextEllipsize); | ||||
|         } | ||||
|         CharSequence charSequence2 = this.textToDrawCollapsed; | ||||
|         float f = 0.0f; | ||||
|         if (charSequence2 != null) { | ||||
|             this.collapsedTextWidth = measureTextWidth(this.textPaint, charSequence2); | ||||
|         } else { | ||||
|             this.collapsedTextWidth = 0.0f; | ||||
|         } | ||||
|         int absoluteGravity = GravityCompat.getAbsoluteGravity(this.collapsedTextGravity, this.isRtl ? 1 : 0); | ||||
|         int i = absoluteGravity & 112; | ||||
|         if (i == 48) { | ||||
|             this.collapsedDrawY = this.collapsedBounds.top; | ||||
|         } else if (i == 80) { | ||||
|             this.collapsedDrawY = this.collapsedBounds.bottom + this.textPaint.ascent(); | ||||
|         } else { | ||||
|             this.collapsedDrawY = this.collapsedBounds.centerY() - ((this.textPaint.descent() - this.textPaint.ascent()) / 2.0f); | ||||
|         } | ||||
|         int i2 = absoluteGravity & GravityCompat.RELATIVE_HORIZONTAL_GRAVITY_MASK; | ||||
|         if (i2 == 1) { | ||||
|             this.collapsedDrawX = this.collapsedBounds.centerX() - (this.collapsedTextWidth / 2.0f); | ||||
|         } else if (i2 == 5) { | ||||
|             this.collapsedDrawX = this.collapsedBounds.right - this.collapsedTextWidth; | ||||
|         } else { | ||||
|             this.collapsedDrawX = this.collapsedBounds.left; | ||||
|         } | ||||
|         calculateUsingTextSize(0.0f, z); | ||||
|         float height = this.textLayout != null ? r10.getHeight() : 0.0f; | ||||
|         StaticLayout staticLayout2 = this.textLayout; | ||||
|         if (staticLayout2 == null || this.maxLines <= 1) { | ||||
|             CharSequence charSequence3 = this.textToDraw; | ||||
|             if (charSequence3 != null) { | ||||
|                 f = measureTextWidth(this.textPaint, charSequence3); | ||||
|             } | ||||
|         } else { | ||||
|             f = staticLayout2.getWidth(); | ||||
|         } | ||||
|         StaticLayout staticLayout3 = this.textLayout; | ||||
|         this.expandedLineCount = staticLayout3 != null ? staticLayout3.getLineCount() : 0; | ||||
|         int absoluteGravity2 = GravityCompat.getAbsoluteGravity(this.expandedTextGravity, this.isRtl ? 1 : 0); | ||||
|         int i3 = absoluteGravity2 & 112; | ||||
|         if (i3 == 48) { | ||||
|             this.expandedDrawY = this.expandedBounds.top; | ||||
|         } else if (i3 != 80) { | ||||
|             this.expandedDrawY = this.expandedBounds.centerY() - (height / 2.0f); | ||||
|         } else { | ||||
|             this.expandedDrawY = (this.expandedBounds.bottom - height) + this.textPaint.descent(); | ||||
|         } | ||||
|         int i4 = absoluteGravity2 & GravityCompat.RELATIVE_HORIZONTAL_GRAVITY_MASK; | ||||
|         if (i4 == 1) { | ||||
|             this.expandedDrawX = this.expandedBounds.centerX() - (f / 2.0f); | ||||
|         } else if (i4 == 5) { | ||||
|             this.expandedDrawX = this.expandedBounds.right - f; | ||||
|         } else { | ||||
|             this.expandedDrawX = this.expandedBounds.left; | ||||
|         } | ||||
|         clearTexture(); | ||||
|         setInterpolatedTextSize(this.expandedFraction); | ||||
|     } | ||||
|  | ||||
|     private float measureTextWidth(TextPaint textPaint, CharSequence charSequence) { | ||||
|         return textPaint.measureText(charSequence, 0, charSequence.length()); | ||||
|     } | ||||
|  | ||||
|     private void interpolateBounds(float f) { | ||||
|         if (this.fadeModeEnabled) { | ||||
|             this.currentBounds.set(f < this.fadeModeThresholdFraction ? this.expandedBounds : this.collapsedBounds); | ||||
|             return; | ||||
|         } | ||||
|         this.currentBounds.left = lerp(this.expandedBounds.left, this.collapsedBounds.left, f, this.positionInterpolator); | ||||
|         this.currentBounds.top = lerp(this.expandedDrawY, this.collapsedDrawY, f, this.positionInterpolator); | ||||
|         this.currentBounds.right = lerp(this.expandedBounds.right, this.collapsedBounds.right, f, this.positionInterpolator); | ||||
|         this.currentBounds.bottom = lerp(this.expandedBounds.bottom, this.collapsedBounds.bottom, f, this.positionInterpolator); | ||||
|     } | ||||
|  | ||||
|     private void setCollapsedTextBlend(float f) { | ||||
|         this.collapsedTextBlend = f; | ||||
|         ViewCompat.postInvalidateOnAnimation(this.view); | ||||
|     } | ||||
|  | ||||
|     private void setExpandedTextBlend(float f) { | ||||
|         this.expandedTextBlend = f; | ||||
|         ViewCompat.postInvalidateOnAnimation(this.view); | ||||
|     } | ||||
|  | ||||
|     public void draw(Canvas canvas) { | ||||
|         int save = canvas.save(); | ||||
|         if (this.textToDraw == null || this.currentBounds.width() <= 0.0f || this.currentBounds.height() <= 0.0f) { | ||||
|             return; | ||||
|         } | ||||
|         this.textPaint.setTextSize(this.currentTextSize); | ||||
|         float f = this.currentDrawX; | ||||
|         float f2 = this.currentDrawY; | ||||
|         boolean z = this.useTexture && this.expandedTitleTexture != null; | ||||
|         float f3 = this.scale; | ||||
|         if (f3 != 1.0f && !this.fadeModeEnabled) { | ||||
|             canvas.scale(f3, f3, f, f2); | ||||
|         } | ||||
|         if (z) { | ||||
|             canvas.drawBitmap(this.expandedTitleTexture, f, f2, this.texturePaint); | ||||
|             canvas.restoreToCount(save); | ||||
|             return; | ||||
|         } | ||||
|         if (shouldDrawMultiline() && (!this.fadeModeEnabled || this.expandedFraction > this.fadeModeThresholdFraction)) { | ||||
|             drawMultilineTransition(canvas, this.currentDrawX - this.textLayout.getLineStart(0), f2); | ||||
|         } else { | ||||
|             canvas.translate(f, f2); | ||||
|             this.textLayout.draw(canvas); | ||||
|         } | ||||
|         canvas.restoreToCount(save); | ||||
|     } | ||||
|  | ||||
|     private void drawMultilineTransition(Canvas canvas, float f, float f2) { | ||||
|         int alpha = this.textPaint.getAlpha(); | ||||
|         canvas.translate(f, f2); | ||||
|         if (!this.fadeModeEnabled) { | ||||
|             this.textPaint.setAlpha((int) (this.expandedTextBlend * alpha)); | ||||
|             if (Build.VERSION.SDK_INT >= 31) { | ||||
|                 TextPaint textPaint = this.textPaint; | ||||
|                 textPaint.setShadowLayer(this.currentShadowRadius, this.currentShadowDx, this.currentShadowDy, MaterialColors.compositeARGBWithAlpha(this.currentShadowColor, textPaint.getAlpha())); | ||||
|             } | ||||
|             this.textLayout.draw(canvas); | ||||
|         } | ||||
|         if (!this.fadeModeEnabled) { | ||||
|             this.textPaint.setAlpha((int) (this.collapsedTextBlend * alpha)); | ||||
|         } | ||||
|         if (Build.VERSION.SDK_INT >= 31) { | ||||
|             TextPaint textPaint2 = this.textPaint; | ||||
|             textPaint2.setShadowLayer(this.currentShadowRadius, this.currentShadowDx, this.currentShadowDy, MaterialColors.compositeARGBWithAlpha(this.currentShadowColor, textPaint2.getAlpha())); | ||||
|         } | ||||
|         int lineBaseline = this.textLayout.getLineBaseline(0); | ||||
|         CharSequence charSequence = this.textToDrawCollapsed; | ||||
|         float f3 = lineBaseline; | ||||
|         canvas.drawText(charSequence, 0, charSequence.length(), 0.0f, f3, this.textPaint); | ||||
|         if (Build.VERSION.SDK_INT >= 31) { | ||||
|             this.textPaint.setShadowLayer(this.currentShadowRadius, this.currentShadowDx, this.currentShadowDy, this.currentShadowColor); | ||||
|         } | ||||
|         if (this.fadeModeEnabled) { | ||||
|             return; | ||||
|         } | ||||
|         String trim = this.textToDrawCollapsed.toString().trim(); | ||||
|         if (trim.endsWith(ELLIPSIS_NORMAL)) { | ||||
|             trim = trim.substring(0, trim.length() - 1); | ||||
|         } | ||||
|         String str = trim; | ||||
|         this.textPaint.setAlpha(alpha); | ||||
|         canvas.drawText(str, 0, Math.min(this.textLayout.getLineEnd(0), str.length()), 0.0f, f3, (Paint) this.textPaint); | ||||
|     } | ||||
|  | ||||
|     private boolean calculateIsRtl(CharSequence charSequence) { | ||||
|         boolean isDefaultIsRtl = isDefaultIsRtl(); | ||||
|         return this.isRtlTextDirectionHeuristicsEnabled ? isTextDirectionHeuristicsIsRtl(charSequence, isDefaultIsRtl) : isDefaultIsRtl; | ||||
|     } | ||||
|  | ||||
|     private boolean isDefaultIsRtl() { | ||||
|         return ViewCompat.getLayoutDirection(this.view) == 1; | ||||
|     } | ||||
|  | ||||
|     private boolean isTextDirectionHeuristicsIsRtl(CharSequence charSequence, boolean z) { | ||||
|         TextDirectionHeuristicCompat textDirectionHeuristicCompat; | ||||
|         if (z) { | ||||
|             textDirectionHeuristicCompat = TextDirectionHeuristicsCompat.FIRSTSTRONG_RTL; | ||||
|         } else { | ||||
|             textDirectionHeuristicCompat = TextDirectionHeuristicsCompat.FIRSTSTRONG_LTR; | ||||
|         } | ||||
|         return textDirectionHeuristicCompat.isRtl(charSequence, 0, charSequence.length()); | ||||
|     } | ||||
|  | ||||
|     private void setInterpolatedTextSize(float f) { | ||||
|         calculateUsingTextSize(f); | ||||
|         boolean z = USE_SCALING_TEXTURE && this.scale != 1.0f; | ||||
|         this.useTexture = z; | ||||
|         if (z) { | ||||
|             ensureExpandedTexture(); | ||||
|         } | ||||
|         ViewCompat.postInvalidateOnAnimation(this.view); | ||||
|     } | ||||
|  | ||||
|     private void calculateUsingTextSize(float f) { | ||||
|         calculateUsingTextSize(f, false); | ||||
|     } | ||||
|  | ||||
|     private void calculateUsingTextSize(float f, boolean z) { | ||||
|         float f2; | ||||
|         float f3; | ||||
|         Typeface typeface; | ||||
|         if (this.text == null) { | ||||
|             return; | ||||
|         } | ||||
|         float width = this.collapsedBounds.width(); | ||||
|         float width2 = this.expandedBounds.width(); | ||||
|         if (isClose(f, 1.0f)) { | ||||
|             f2 = this.collapsedTextSize; | ||||
|             f3 = this.collapsedLetterSpacing; | ||||
|             this.scale = 1.0f; | ||||
|             typeface = this.collapsedTypeface; | ||||
|         } else { | ||||
|             float f4 = this.expandedTextSize; | ||||
|             float f5 = this.expandedLetterSpacing; | ||||
|             Typeface typeface2 = this.expandedTypeface; | ||||
|             if (isClose(f, 0.0f)) { | ||||
|                 this.scale = 1.0f; | ||||
|             } else { | ||||
|                 this.scale = lerp(this.expandedTextSize, this.collapsedTextSize, f, this.textSizeInterpolator) / this.expandedTextSize; | ||||
|             } | ||||
|             float f6 = this.collapsedTextSize / this.expandedTextSize; | ||||
|             width = (z || this.fadeModeEnabled || width2 * f6 <= width) ? width2 : Math.min(width / f6, width2); | ||||
|             f2 = f4; | ||||
|             f3 = f5; | ||||
|             typeface = typeface2; | ||||
|         } | ||||
|         if (width > 0.0f) { | ||||
|             boolean z2 = this.currentTextSize != f2; | ||||
|             boolean z3 = this.currentLetterSpacing != f3; | ||||
|             boolean z4 = this.currentTypeface != typeface; | ||||
|             StaticLayout staticLayout = this.textLayout; | ||||
|             boolean z5 = z2 || z3 || (staticLayout != null && (width > ((float) staticLayout.getWidth()) ? 1 : (width == ((float) staticLayout.getWidth()) ? 0 : -1)) != 0) || z4 || this.boundsChanged; | ||||
|             this.currentTextSize = f2; | ||||
|             this.currentLetterSpacing = f3; | ||||
|             this.currentTypeface = typeface; | ||||
|             this.boundsChanged = false; | ||||
|             this.textPaint.setLinearText(this.scale != 1.0f); | ||||
|             r5 = z5; | ||||
|         } | ||||
|         if (this.textToDraw == null || r5) { | ||||
|             this.textPaint.setTextSize(this.currentTextSize); | ||||
|             this.textPaint.setTypeface(this.currentTypeface); | ||||
|             this.textPaint.setLetterSpacing(this.currentLetterSpacing); | ||||
|             this.isRtl = calculateIsRtl(this.text); | ||||
|             StaticLayout createStaticLayout = createStaticLayout(shouldDrawMultiline() ? this.maxLines : 1, width, this.isRtl); | ||||
|             this.textLayout = createStaticLayout; | ||||
|             this.textToDraw = createStaticLayout.getText(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private StaticLayout createStaticLayout(int i, float f, boolean z) { | ||||
|         StaticLayout staticLayout; | ||||
|         try { | ||||
|             staticLayout = StaticLayoutBuilderCompat.obtain(this.text, this.textPaint, (int) f).setEllipsize(this.titleTextEllipsize).setIsRtl(z).setAlignment(i == 1 ? Layout.Alignment.ALIGN_NORMAL : getMultilineTextLayoutAlignment()).setIncludePad(false).setMaxLines(i).setLineSpacing(this.lineSpacingAdd, this.lineSpacingMultiplier).setHyphenationFrequency(this.hyphenationFrequency).setStaticLayoutBuilderConfigurer(this.staticLayoutBuilderConfigurer).build(); | ||||
|         } catch (StaticLayoutBuilderCompat.StaticLayoutBuilderCompatException e) { | ||||
|             Log.e(TAG, e.getCause().getMessage(), e); | ||||
|             staticLayout = null; | ||||
|         } | ||||
|         return (StaticLayout) Preconditions.checkNotNull(staticLayout); | ||||
|     } | ||||
|  | ||||
|     private Layout.Alignment getMultilineTextLayoutAlignment() { | ||||
|         int absoluteGravity = GravityCompat.getAbsoluteGravity(this.expandedTextGravity, this.isRtl ? 1 : 0) & 7; | ||||
|         if (absoluteGravity != 1) { | ||||
|             return absoluteGravity != 5 ? this.isRtl ? Layout.Alignment.ALIGN_OPPOSITE : Layout.Alignment.ALIGN_NORMAL : this.isRtl ? Layout.Alignment.ALIGN_NORMAL : Layout.Alignment.ALIGN_OPPOSITE; | ||||
|         } | ||||
|         return Layout.Alignment.ALIGN_CENTER; | ||||
|     } | ||||
|  | ||||
|     private void ensureExpandedTexture() { | ||||
|         if (this.expandedTitleTexture != null || this.expandedBounds.isEmpty() || TextUtils.isEmpty(this.textToDraw)) { | ||||
|             return; | ||||
|         } | ||||
|         calculateOffsets(0.0f); | ||||
|         int width = this.textLayout.getWidth(); | ||||
|         int height = this.textLayout.getHeight(); | ||||
|         if (width <= 0 || height <= 0) { | ||||
|             return; | ||||
|         } | ||||
|         this.expandedTitleTexture = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); | ||||
|         this.textLayout.draw(new Canvas(this.expandedTitleTexture)); | ||||
|         if (this.texturePaint == null) { | ||||
|             this.texturePaint = new Paint(3); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void recalculate() { | ||||
|         recalculate(false); | ||||
|     } | ||||
|  | ||||
|     public void recalculate(boolean z) { | ||||
|         if ((this.view.getHeight() <= 0 || this.view.getWidth() <= 0) && !z) { | ||||
|             return; | ||||
|         } | ||||
|         calculateBaseOffsets(z); | ||||
|         calculateCurrentOffsets(); | ||||
|     } | ||||
|  | ||||
|     public void setText(CharSequence charSequence) { | ||||
|         if (charSequence == null || !TextUtils.equals(this.text, charSequence)) { | ||||
|             this.text = charSequence; | ||||
|             this.textToDraw = null; | ||||
|             clearTexture(); | ||||
|             recalculate(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void clearTexture() { | ||||
|         Bitmap bitmap = this.expandedTitleTexture; | ||||
|         if (bitmap != null) { | ||||
|             bitmap.recycle(); | ||||
|             this.expandedTitleTexture = null; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setMaxLines(int i) { | ||||
|         if (i != this.maxLines) { | ||||
|             this.maxLines = i; | ||||
|             clearTexture(); | ||||
|             recalculate(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public int getLineCount() { | ||||
|         StaticLayout staticLayout = this.textLayout; | ||||
|         if (staticLayout != null) { | ||||
|             return staticLayout.getLineCount(); | ||||
|         } | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|     public float getLineSpacingAdd() { | ||||
|         return this.textLayout.getSpacingAdd(); | ||||
|     } | ||||
|  | ||||
|     public float getLineSpacingMultiplier() { | ||||
|         return this.textLayout.getSpacingMultiplier(); | ||||
|     } | ||||
|  | ||||
|     public void setStaticLayoutBuilderConfigurer(StaticLayoutBuilderConfigurer staticLayoutBuilderConfigurer) { | ||||
|         if (this.staticLayoutBuilderConfigurer != staticLayoutBuilderConfigurer) { | ||||
|             this.staticLayoutBuilderConfigurer = staticLayoutBuilderConfigurer; | ||||
|             recalculate(true); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static boolean isClose(float f, float f2) { | ||||
|         return Math.abs(f - f2) < 1.0E-5f; | ||||
|     } | ||||
|  | ||||
|     private static int blendARGB(int i, int i2, float f) { | ||||
|         float f2 = 1.0f - f; | ||||
|         return Color.argb(Math.round((Color.alpha(i) * f2) + (Color.alpha(i2) * f)), Math.round((Color.red(i) * f2) + (Color.red(i2) * f)), Math.round((Color.green(i) * f2) + (Color.green(i2) * f)), Math.round((Color.blue(i) * f2) + (Color.blue(i2) * f))); | ||||
|     } | ||||
|  | ||||
|     private static float lerp(float f, float f2, float f3, TimeInterpolator timeInterpolator) { | ||||
|         if (timeInterpolator != null) { | ||||
|             f3 = timeInterpolator.getInterpolation(f3); | ||||
|         } | ||||
|         return AnimationUtils.lerp(f, f2, f3); | ||||
|     } | ||||
|  | ||||
|     private static boolean rectEquals(Rect rect, int i, int i2, int i3, int i4) { | ||||
|         return rect.left == i && rect.top == i2 && rect.right == i3 && rect.bottom == i4; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,18 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.app.Activity; | ||||
| import android.content.Context; | ||||
| import android.content.ContextWrapper; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class ContextUtils { | ||||
|     public static Activity getActivity(Context context) { | ||||
|         while (context instanceof ContextWrapper) { | ||||
|             if (context instanceof Activity) { | ||||
|                 return (Activity) context; | ||||
|             } | ||||
|             context = ((ContextWrapper) context).getBaseContext(); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,53 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.graphics.Matrix; | ||||
| import android.graphics.Rect; | ||||
| import android.graphics.RectF; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.view.ViewParent; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class DescendantOffsetUtils { | ||||
|     private static final ThreadLocal<Matrix> matrix = new ThreadLocal<>(); | ||||
|     private static final ThreadLocal<RectF> rectF = new ThreadLocal<>(); | ||||
|  | ||||
|     public static void offsetDescendantRect(ViewGroup viewGroup, View view, Rect rect) { | ||||
|         ThreadLocal<Matrix> threadLocal = matrix; | ||||
|         Matrix matrix2 = threadLocal.get(); | ||||
|         if (matrix2 == null) { | ||||
|             matrix2 = new Matrix(); | ||||
|             threadLocal.set(matrix2); | ||||
|         } else { | ||||
|             matrix2.reset(); | ||||
|         } | ||||
|         offsetDescendantMatrix(viewGroup, view, matrix2); | ||||
|         ThreadLocal<RectF> threadLocal2 = rectF; | ||||
|         RectF rectF2 = threadLocal2.get(); | ||||
|         if (rectF2 == null) { | ||||
|             rectF2 = new RectF(); | ||||
|             threadLocal2.set(rectF2); | ||||
|         } | ||||
|         rectF2.set(rect); | ||||
|         matrix2.mapRect(rectF2); | ||||
|         rect.set((int) (rectF2.left + 0.5f), (int) (rectF2.top + 0.5f), (int) (rectF2.right + 0.5f), (int) (rectF2.bottom + 0.5f)); | ||||
|     } | ||||
|  | ||||
|     public static void getDescendantRect(ViewGroup viewGroup, View view, Rect rect) { | ||||
|         rect.set(0, 0, view.getWidth(), view.getHeight()); | ||||
|         offsetDescendantRect(viewGroup, view, rect); | ||||
|     } | ||||
|  | ||||
|     private static void offsetDescendantMatrix(ViewParent viewParent, View view, Matrix matrix2) { | ||||
|         Object parent = view.getParent(); | ||||
|         if ((parent instanceof View) && parent != viewParent) { | ||||
|             offsetDescendantMatrix(viewParent, (View) parent, matrix2); | ||||
|             matrix2.preTranslate(-r0.getScrollX(), -r0.getScrollY()); | ||||
|         } | ||||
|         matrix2.preTranslate(view.getLeft(), view.getTop()); | ||||
|         if (view.getMatrix().isIdentity()) { | ||||
|             return; | ||||
|         } | ||||
|         matrix2.preConcat(view.getMatrix()); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,75 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.R; | ||||
| import android.content.Context; | ||||
| import android.os.Build; | ||||
| import android.view.Window; | ||||
| import androidx.core.graphics.ColorUtils; | ||||
| import androidx.core.view.ViewCompat; | ||||
| import androidx.core.view.WindowCompat; | ||||
| import com.google.android.material.color.MaterialColors; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class EdgeToEdgeUtils { | ||||
|     private static final int EDGE_TO_EDGE_BAR_ALPHA = 128; | ||||
|  | ||||
|     private EdgeToEdgeUtils() { | ||||
|     } | ||||
|  | ||||
|     public static void applyEdgeToEdge(Window window, boolean z) { | ||||
|         applyEdgeToEdge(window, z, null, null); | ||||
|     } | ||||
|  | ||||
|     public static void applyEdgeToEdge(Window window, boolean z, Integer num, Integer num2) { | ||||
|         boolean z2 = num == null || num.intValue() == 0; | ||||
|         boolean z3 = num2 == null || num2.intValue() == 0; | ||||
|         if (z2 || z3) { | ||||
|             int color = MaterialColors.getColor(window.getContext(), R.attr.colorBackground, ViewCompat.MEASURED_STATE_MASK); | ||||
|             if (z2) { | ||||
|                 num = Integer.valueOf(color); | ||||
|             } | ||||
|             if (z3) { | ||||
|                 num2 = Integer.valueOf(color); | ||||
|             } | ||||
|         } | ||||
|         WindowCompat.setDecorFitsSystemWindows(window, !z); | ||||
|         int statusBarColor = getStatusBarColor(window.getContext(), z); | ||||
|         int navigationBarColor = getNavigationBarColor(window.getContext(), z); | ||||
|         window.setStatusBarColor(statusBarColor); | ||||
|         window.setNavigationBarColor(navigationBarColor); | ||||
|         setLightStatusBar(window, isUsingLightSystemBar(statusBarColor, MaterialColors.isColorLight(num.intValue()))); | ||||
|         setLightNavigationBar(window, isUsingLightSystemBar(navigationBarColor, MaterialColors.isColorLight(num2.intValue()))); | ||||
|     } | ||||
|  | ||||
|     public static void setLightStatusBar(Window window, boolean z) { | ||||
|         WindowCompat.getInsetsController(window, window.getDecorView()).setAppearanceLightStatusBars(z); | ||||
|     } | ||||
|  | ||||
|     public static void setLightNavigationBar(Window window, boolean z) { | ||||
|         WindowCompat.getInsetsController(window, window.getDecorView()).setAppearanceLightNavigationBars(z); | ||||
|     } | ||||
|  | ||||
|     private static int getStatusBarColor(Context context, boolean z) { | ||||
|         if (z && Build.VERSION.SDK_INT < 23) { | ||||
|             return ColorUtils.setAlphaComponent(MaterialColors.getColor(context, R.attr.statusBarColor, ViewCompat.MEASURED_STATE_MASK), 128); | ||||
|         } | ||||
|         if (z) { | ||||
|             return 0; | ||||
|         } | ||||
|         return MaterialColors.getColor(context, R.attr.statusBarColor, ViewCompat.MEASURED_STATE_MASK); | ||||
|     } | ||||
|  | ||||
|     private static int getNavigationBarColor(Context context, boolean z) { | ||||
|         if (z && Build.VERSION.SDK_INT < 27) { | ||||
|             return ColorUtils.setAlphaComponent(MaterialColors.getColor(context, R.attr.navigationBarColor, ViewCompat.MEASURED_STATE_MASK), 128); | ||||
|         } | ||||
|         if (z) { | ||||
|             return 0; | ||||
|         } | ||||
|         return MaterialColors.getColor(context, R.attr.navigationBarColor, ViewCompat.MEASURED_STATE_MASK); | ||||
|     } | ||||
|  | ||||
|     private static boolean isUsingLightSystemBar(int i, boolean z) { | ||||
|         return MaterialColors.isColorLight(i) || (i == 0 && z); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,145 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.animation.Animator; | ||||
| import android.animation.AnimatorListenerAdapter; | ||||
| import android.animation.AnimatorSet; | ||||
| import android.animation.ValueAnimator; | ||||
| import android.graphics.Rect; | ||||
| import android.view.View; | ||||
| import com.google.android.material.animation.AnimationUtils; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collection; | ||||
| import java.util.Collections; | ||||
| import java.util.Iterator; | ||||
| import java.util.List; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class ExpandCollapseAnimationHelper { | ||||
|     private ValueAnimator.AnimatorUpdateListener additionalUpdateListener; | ||||
|     private final View collapsedView; | ||||
|     private int collapsedViewOffsetY; | ||||
|     private long duration; | ||||
|     private final View expandedView; | ||||
|     private int expandedViewOffsetY; | ||||
|     private final List<AnimatorListenerAdapter> listeners = new ArrayList(); | ||||
|     private final List<View> endAnchoredViews = new ArrayList(); | ||||
|  | ||||
|     public ExpandCollapseAnimationHelper setAdditionalUpdateListener(ValueAnimator.AnimatorUpdateListener animatorUpdateListener) { | ||||
|         this.additionalUpdateListener = animatorUpdateListener; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public ExpandCollapseAnimationHelper setCollapsedViewOffsetY(int i) { | ||||
|         this.collapsedViewOffsetY = i; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public ExpandCollapseAnimationHelper setDuration(long j) { | ||||
|         this.duration = j; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public ExpandCollapseAnimationHelper setExpandedViewOffsetY(int i) { | ||||
|         this.expandedViewOffsetY = i; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public ExpandCollapseAnimationHelper(View view, View view2) { | ||||
|         this.collapsedView = view; | ||||
|         this.expandedView = view2; | ||||
|     } | ||||
|  | ||||
|     public Animator getExpandAnimator() { | ||||
|         AnimatorSet animatorSet = getAnimatorSet(true); | ||||
|         animatorSet.addListener(new AnimatorListenerAdapter() { // from class: com.google.android.material.internal.ExpandCollapseAnimationHelper.1 | ||||
|             @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener | ||||
|             public void onAnimationStart(Animator animator) { | ||||
|                 ExpandCollapseAnimationHelper.this.expandedView.setVisibility(0); | ||||
|             } | ||||
|         }); | ||||
|         addListeners(animatorSet, this.listeners); | ||||
|         return animatorSet; | ||||
|     } | ||||
|  | ||||
|     public Animator getCollapseAnimator() { | ||||
|         AnimatorSet animatorSet = getAnimatorSet(false); | ||||
|         animatorSet.addListener(new AnimatorListenerAdapter() { // from class: com.google.android.material.internal.ExpandCollapseAnimationHelper.2 | ||||
|             @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener | ||||
|             public void onAnimationEnd(Animator animator) { | ||||
|                 ExpandCollapseAnimationHelper.this.expandedView.setVisibility(8); | ||||
|             } | ||||
|         }); | ||||
|         addListeners(animatorSet, this.listeners); | ||||
|         return animatorSet; | ||||
|     } | ||||
|  | ||||
|     public ExpandCollapseAnimationHelper addListener(AnimatorListenerAdapter animatorListenerAdapter) { | ||||
|         this.listeners.add(animatorListenerAdapter); | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public ExpandCollapseAnimationHelper addEndAnchoredViews(View... viewArr) { | ||||
|         Collections.addAll(this.endAnchoredViews, viewArr); | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public ExpandCollapseAnimationHelper addEndAnchoredViews(Collection<View> collection) { | ||||
|         this.endAnchoredViews.addAll(collection); | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     private AnimatorSet getAnimatorSet(boolean z) { | ||||
|         AnimatorSet animatorSet = new AnimatorSet(); | ||||
|         animatorSet.playTogether(getExpandCollapseAnimator(z), getExpandedViewChildrenAlphaAnimator(z), getEndAnchoredViewsTranslateAnimator(z)); | ||||
|         return animatorSet; | ||||
|     } | ||||
|  | ||||
|     private Animator getExpandCollapseAnimator(boolean z) { | ||||
|         Rect calculateRectFromBounds = ViewUtils.calculateRectFromBounds(this.collapsedView, this.collapsedViewOffsetY); | ||||
|         Rect calculateRectFromBounds2 = ViewUtils.calculateRectFromBounds(this.expandedView, this.expandedViewOffsetY); | ||||
|         final Rect rect = new Rect(calculateRectFromBounds); | ||||
|         ValueAnimator ofObject = ValueAnimator.ofObject(new RectEvaluator(rect), calculateRectFromBounds, calculateRectFromBounds2); | ||||
|         ofObject.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { // from class: com.google.android.material.internal.ExpandCollapseAnimationHelper$$ExternalSyntheticLambda0 | ||||
|             @Override // android.animation.ValueAnimator.AnimatorUpdateListener | ||||
|             public final void onAnimationUpdate(ValueAnimator valueAnimator) { | ||||
|                 ExpandCollapseAnimationHelper.this.m243xeb41e2ac(rect, valueAnimator); | ||||
|             } | ||||
|         }); | ||||
|         ValueAnimator.AnimatorUpdateListener animatorUpdateListener = this.additionalUpdateListener; | ||||
|         if (animatorUpdateListener != null) { | ||||
|             ofObject.addUpdateListener(animatorUpdateListener); | ||||
|         } | ||||
|         ofObject.setDuration(this.duration); | ||||
|         ofObject.setInterpolator(ReversableAnimatedValueInterpolator.of(z, AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR)); | ||||
|         return ofObject; | ||||
|     } | ||||
|  | ||||
|     /* renamed from: lambda$getExpandCollapseAnimator$0$com-google-android-material-internal-ExpandCollapseAnimationHelper, reason: not valid java name */ | ||||
|     /* synthetic */ void m243xeb41e2ac(Rect rect, ValueAnimator valueAnimator) { | ||||
|         ViewUtils.setBoundsFromRect(this.expandedView, rect); | ||||
|     } | ||||
|  | ||||
|     private Animator getExpandedViewChildrenAlphaAnimator(boolean z) { | ||||
|         List<View> children = ViewUtils.getChildren(this.expandedView); | ||||
|         ValueAnimator ofFloat = ValueAnimator.ofFloat(0.0f, 1.0f); | ||||
|         ofFloat.addUpdateListener(MultiViewUpdateListener.alphaListener(children)); | ||||
|         ofFloat.setDuration(this.duration); | ||||
|         ofFloat.setInterpolator(ReversableAnimatedValueInterpolator.of(z, AnimationUtils.LINEAR_INTERPOLATOR)); | ||||
|         return ofFloat; | ||||
|     } | ||||
|  | ||||
|     private Animator getEndAnchoredViewsTranslateAnimator(boolean z) { | ||||
|         ValueAnimator ofFloat = ValueAnimator.ofFloat((this.expandedView.getLeft() - this.collapsedView.getLeft()) + (this.collapsedView.getRight() - this.expandedView.getRight()), 0.0f); | ||||
|         ofFloat.addUpdateListener(MultiViewUpdateListener.translationXListener(this.endAnchoredViews)); | ||||
|         ofFloat.setDuration(this.duration); | ||||
|         ofFloat.setInterpolator(ReversableAnimatedValueInterpolator.of(z, AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR)); | ||||
|         return ofFloat; | ||||
|     } | ||||
|  | ||||
|     private void addListeners(Animator animator, List<AnimatorListenerAdapter> list) { | ||||
|         Iterator<AnimatorListenerAdapter> it = list.iterator(); | ||||
|         while (it.hasNext()) { | ||||
|             animator.addListener(it.next()); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,14 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import java.lang.annotation.ElementType; | ||||
| import java.lang.annotation.Retention; | ||||
| import java.lang.annotation.RetentionPolicy; | ||||
| import java.lang.annotation.Target; | ||||
|  | ||||
| @Target({ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD, ElementType.TYPE}) | ||||
| @Retention(RetentionPolicy.CLASS) | ||||
| @Deprecated | ||||
| /* loaded from: classes.dex */ | ||||
| public @interface Experimental { | ||||
|     String value() default ""; | ||||
| } | ||||
| @@ -0,0 +1,98 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.graphics.Canvas; | ||||
| import android.graphics.ColorFilter; | ||||
| import android.graphics.drawable.Drawable; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class FadeThroughDrawable extends Drawable { | ||||
|     private final float[] alphas; | ||||
|     private final Drawable fadeInDrawable; | ||||
|     private final Drawable fadeOutDrawable; | ||||
|     private float progress; | ||||
|  | ||||
|     @Override // android.graphics.drawable.Drawable | ||||
|     public int getOpacity() { | ||||
|         return -3; | ||||
|     } | ||||
|  | ||||
|     public FadeThroughDrawable(Drawable drawable, Drawable drawable2) { | ||||
|         this.fadeOutDrawable = drawable.getConstantState().newDrawable().mutate(); | ||||
|         Drawable mutate = drawable2.getConstantState().newDrawable().mutate(); | ||||
|         this.fadeInDrawable = mutate; | ||||
|         mutate.setAlpha(0); | ||||
|         this.alphas = new float[2]; | ||||
|     } | ||||
|  | ||||
|     @Override // android.graphics.drawable.Drawable | ||||
|     public void draw(Canvas canvas) { | ||||
|         this.fadeOutDrawable.draw(canvas); | ||||
|         this.fadeInDrawable.draw(canvas); | ||||
|     } | ||||
|  | ||||
|     @Override // android.graphics.drawable.Drawable | ||||
|     public void setBounds(int i, int i2, int i3, int i4) { | ||||
|         super.setBounds(i, i2, i3, i4); | ||||
|         this.fadeOutDrawable.setBounds(i, i2, i3, i4); | ||||
|         this.fadeInDrawable.setBounds(i, i2, i3, i4); | ||||
|     } | ||||
|  | ||||
|     @Override // android.graphics.drawable.Drawable | ||||
|     public int getIntrinsicWidth() { | ||||
|         return Math.max(this.fadeOutDrawable.getIntrinsicWidth(), this.fadeInDrawable.getIntrinsicWidth()); | ||||
|     } | ||||
|  | ||||
|     @Override // android.graphics.drawable.Drawable | ||||
|     public int getIntrinsicHeight() { | ||||
|         return Math.max(this.fadeOutDrawable.getIntrinsicHeight(), this.fadeInDrawable.getIntrinsicHeight()); | ||||
|     } | ||||
|  | ||||
|     @Override // android.graphics.drawable.Drawable | ||||
|     public int getMinimumWidth() { | ||||
|         return Math.max(this.fadeOutDrawable.getMinimumWidth(), this.fadeInDrawable.getMinimumWidth()); | ||||
|     } | ||||
|  | ||||
|     @Override // android.graphics.drawable.Drawable | ||||
|     public int getMinimumHeight() { | ||||
|         return Math.max(this.fadeOutDrawable.getMinimumHeight(), this.fadeInDrawable.getMinimumHeight()); | ||||
|     } | ||||
|  | ||||
|     @Override // android.graphics.drawable.Drawable | ||||
|     public void setAlpha(int i) { | ||||
|         if (this.progress <= 0.5f) { | ||||
|             this.fadeOutDrawable.setAlpha(i); | ||||
|             this.fadeInDrawable.setAlpha(0); | ||||
|         } else { | ||||
|             this.fadeOutDrawable.setAlpha(0); | ||||
|             this.fadeInDrawable.setAlpha(i); | ||||
|         } | ||||
|         invalidateSelf(); | ||||
|     } | ||||
|  | ||||
|     @Override // android.graphics.drawable.Drawable | ||||
|     public void setColorFilter(ColorFilter colorFilter) { | ||||
|         this.fadeOutDrawable.setColorFilter(colorFilter); | ||||
|         this.fadeInDrawable.setColorFilter(colorFilter); | ||||
|         invalidateSelf(); | ||||
|     } | ||||
|  | ||||
|     @Override // android.graphics.drawable.Drawable | ||||
|     public boolean isStateful() { | ||||
|         return this.fadeOutDrawable.isStateful() || this.fadeInDrawable.isStateful(); | ||||
|     } | ||||
|  | ||||
|     @Override // android.graphics.drawable.Drawable | ||||
|     public boolean setState(int[] iArr) { | ||||
|         return this.fadeOutDrawable.setState(iArr) || this.fadeInDrawable.setState(iArr); | ||||
|     } | ||||
|  | ||||
|     public void setProgress(float f) { | ||||
|         if (this.progress != f) { | ||||
|             this.progress = f; | ||||
|             FadeThroughUtils.calculateFadeOutAndInAlphas(f, this.alphas); | ||||
|             this.fadeOutDrawable.setAlpha((int) (this.alphas[0] * 255.0f)); | ||||
|             this.fadeInDrawable.setAlpha((int) (this.alphas[1] * 255.0f)); | ||||
|             invalidateSelf(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,29 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.animation.ValueAnimator; | ||||
| import android.view.View; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class FadeThroughUpdateListener implements ValueAnimator.AnimatorUpdateListener { | ||||
|     private final float[] alphas = new float[2]; | ||||
|     private final View fadeInView; | ||||
|     private final View fadeOutView; | ||||
|  | ||||
|     public FadeThroughUpdateListener(View view, View view2) { | ||||
|         this.fadeOutView = view; | ||||
|         this.fadeInView = view2; | ||||
|     } | ||||
|  | ||||
|     @Override // android.animation.ValueAnimator.AnimatorUpdateListener | ||||
|     public void onAnimationUpdate(ValueAnimator valueAnimator) { | ||||
|         FadeThroughUtils.calculateFadeOutAndInAlphas(((Float) valueAnimator.getAnimatedValue()).floatValue(), this.alphas); | ||||
|         View view = this.fadeOutView; | ||||
|         if (view != null) { | ||||
|             view.setAlpha(this.alphas[0]); | ||||
|         } | ||||
|         View view2 = this.fadeInView; | ||||
|         if (view2 != null) { | ||||
|             view2.setAlpha(this.alphas[1]); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,19 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| final class FadeThroughUtils { | ||||
|     static final float THRESHOLD_ALPHA = 0.5f; | ||||
|  | ||||
|     static void calculateFadeOutAndInAlphas(float f, float[] fArr) { | ||||
|         if (f <= 0.5f) { | ||||
|             fArr[0] = 1.0f - (f * 2.0f); | ||||
|             fArr[1] = 0.0f; | ||||
|         } else { | ||||
|             fArr[0] = 0.0f; | ||||
|             fArr[1] = (f * 2.0f) - 1.0f; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private FadeThroughUtils() { | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,189 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.content.res.TypedArray; | ||||
| import android.util.AttributeSet; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import androidx.core.view.MarginLayoutParamsCompat; | ||||
| import androidx.core.view.ViewCompat; | ||||
| import com.google.android.material.R; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class FlowLayout extends ViewGroup { | ||||
|     private int itemSpacing; | ||||
|     private int lineSpacing; | ||||
|     private int rowCount; | ||||
|     private boolean singleLine; | ||||
|  | ||||
|     protected int getItemSpacing() { | ||||
|         return this.itemSpacing; | ||||
|     } | ||||
|  | ||||
|     protected int getLineSpacing() { | ||||
|         return this.lineSpacing; | ||||
|     } | ||||
|  | ||||
|     protected int getRowCount() { | ||||
|         return this.rowCount; | ||||
|     } | ||||
|  | ||||
|     public boolean isSingleLine() { | ||||
|         return this.singleLine; | ||||
|     } | ||||
|  | ||||
|     protected void setItemSpacing(int i) { | ||||
|         this.itemSpacing = i; | ||||
|     } | ||||
|  | ||||
|     protected void setLineSpacing(int i) { | ||||
|         this.lineSpacing = i; | ||||
|     } | ||||
|  | ||||
|     public void setSingleLine(boolean z) { | ||||
|         this.singleLine = z; | ||||
|     } | ||||
|  | ||||
|     public FlowLayout(Context context) { | ||||
|         this(context, null); | ||||
|     } | ||||
|  | ||||
|     public FlowLayout(Context context, AttributeSet attributeSet) { | ||||
|         this(context, attributeSet, 0); | ||||
|     } | ||||
|  | ||||
|     public FlowLayout(Context context, AttributeSet attributeSet, int i) { | ||||
|         super(context, attributeSet, i); | ||||
|         this.singleLine = false; | ||||
|         loadFromAttributes(context, attributeSet); | ||||
|     } | ||||
|  | ||||
|     public FlowLayout(Context context, AttributeSet attributeSet, int i, int i2) { | ||||
|         super(context, attributeSet, i, i2); | ||||
|         this.singleLine = false; | ||||
|         loadFromAttributes(context, attributeSet); | ||||
|     } | ||||
|  | ||||
|     private void loadFromAttributes(Context context, AttributeSet attributeSet) { | ||||
|         TypedArray obtainStyledAttributes = context.getTheme().obtainStyledAttributes(attributeSet, R.styleable.FlowLayout, 0, 0); | ||||
|         this.lineSpacing = obtainStyledAttributes.getDimensionPixelSize(R.styleable.FlowLayout_lineSpacing, 0); | ||||
|         this.itemSpacing = obtainStyledAttributes.getDimensionPixelSize(R.styleable.FlowLayout_itemSpacing, 0); | ||||
|         obtainStyledAttributes.recycle(); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     protected void onMeasure(int i, int i2) { | ||||
|         int i3; | ||||
|         int i4; | ||||
|         int i5; | ||||
|         int size = View.MeasureSpec.getSize(i); | ||||
|         int mode = View.MeasureSpec.getMode(i); | ||||
|         int size2 = View.MeasureSpec.getSize(i2); | ||||
|         int mode2 = View.MeasureSpec.getMode(i2); | ||||
|         int i6 = (mode == Integer.MIN_VALUE || mode == 1073741824) ? size : Integer.MAX_VALUE; | ||||
|         int paddingLeft = getPaddingLeft(); | ||||
|         int paddingTop = getPaddingTop(); | ||||
|         int paddingRight = i6 - getPaddingRight(); | ||||
|         int i7 = paddingTop; | ||||
|         int i8 = 0; | ||||
|         for (int i9 = 0; i9 < getChildCount(); i9++) { | ||||
|             View childAt = getChildAt(i9); | ||||
|             if (childAt.getVisibility() != 8) { | ||||
|                 measureChild(childAt, i, i2); | ||||
|                 ViewGroup.LayoutParams layoutParams = childAt.getLayoutParams(); | ||||
|                 if (layoutParams instanceof ViewGroup.MarginLayoutParams) { | ||||
|                     ViewGroup.MarginLayoutParams marginLayoutParams = (ViewGroup.MarginLayoutParams) layoutParams; | ||||
|                     i3 = marginLayoutParams.leftMargin; | ||||
|                     i4 = marginLayoutParams.rightMargin; | ||||
|                 } else { | ||||
|                     i3 = 0; | ||||
|                     i4 = 0; | ||||
|                 } | ||||
|                 int i10 = paddingLeft; | ||||
|                 if (paddingLeft + i3 + childAt.getMeasuredWidth() <= paddingRight || isSingleLine()) { | ||||
|                     i5 = i10; | ||||
|                 } else { | ||||
|                     i5 = getPaddingLeft(); | ||||
|                     i7 = this.lineSpacing + paddingTop; | ||||
|                 } | ||||
|                 int measuredWidth = i5 + i3 + childAt.getMeasuredWidth(); | ||||
|                 int measuredHeight = i7 + childAt.getMeasuredHeight(); | ||||
|                 if (measuredWidth > i8) { | ||||
|                     i8 = measuredWidth; | ||||
|                 } | ||||
|                 paddingLeft = i5 + i3 + i4 + childAt.getMeasuredWidth() + this.itemSpacing; | ||||
|                 if (i9 == getChildCount() - 1) { | ||||
|                     i8 += i4; | ||||
|                 } | ||||
|                 paddingTop = measuredHeight; | ||||
|             } | ||||
|         } | ||||
|         setMeasuredDimension(getMeasuredDimension(size, mode, i8 + getPaddingRight()), getMeasuredDimension(size2, mode2, paddingTop + getPaddingBottom())); | ||||
|     } | ||||
|  | ||||
|     private static int getMeasuredDimension(int i, int i2, int i3) { | ||||
|         if (i2 != Integer.MIN_VALUE) { | ||||
|             return i2 != 1073741824 ? i3 : i; | ||||
|         } | ||||
|         return Math.min(i3, i); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.ViewGroup, android.view.View | ||||
|     protected void onLayout(boolean z, int i, int i2, int i3, int i4) { | ||||
|         int i5; | ||||
|         int i6; | ||||
|         if (getChildCount() == 0) { | ||||
|             this.rowCount = 0; | ||||
|             return; | ||||
|         } | ||||
|         this.rowCount = 1; | ||||
|         boolean z2 = ViewCompat.getLayoutDirection(this) == 1; | ||||
|         int paddingRight = z2 ? getPaddingRight() : getPaddingLeft(); | ||||
|         int paddingLeft = z2 ? getPaddingLeft() : getPaddingRight(); | ||||
|         int paddingTop = getPaddingTop(); | ||||
|         int i7 = (i3 - i) - paddingLeft; | ||||
|         int i8 = paddingRight; | ||||
|         int i9 = paddingTop; | ||||
|         for (int i10 = 0; i10 < getChildCount(); i10++) { | ||||
|             View childAt = getChildAt(i10); | ||||
|             if (childAt.getVisibility() == 8) { | ||||
|                 childAt.setTag(R.id.row_index_key, -1); | ||||
|             } else { | ||||
|                 ViewGroup.LayoutParams layoutParams = childAt.getLayoutParams(); | ||||
|                 if (layoutParams instanceof ViewGroup.MarginLayoutParams) { | ||||
|                     ViewGroup.MarginLayoutParams marginLayoutParams = (ViewGroup.MarginLayoutParams) layoutParams; | ||||
|                     i6 = MarginLayoutParamsCompat.getMarginStart(marginLayoutParams); | ||||
|                     i5 = MarginLayoutParamsCompat.getMarginEnd(marginLayoutParams); | ||||
|                 } else { | ||||
|                     i5 = 0; | ||||
|                     i6 = 0; | ||||
|                 } | ||||
|                 int measuredWidth = i8 + i6 + childAt.getMeasuredWidth(); | ||||
|                 if (!this.singleLine && measuredWidth > i7) { | ||||
|                     i9 = this.lineSpacing + paddingTop; | ||||
|                     this.rowCount++; | ||||
|                     i8 = paddingRight; | ||||
|                 } | ||||
|                 childAt.setTag(R.id.row_index_key, Integer.valueOf(this.rowCount - 1)); | ||||
|                 int i11 = i8 + i6; | ||||
|                 int measuredWidth2 = childAt.getMeasuredWidth() + i11; | ||||
|                 int measuredHeight = childAt.getMeasuredHeight() + i9; | ||||
|                 if (z2) { | ||||
|                     childAt.layout(i7 - measuredWidth2, i9, (i7 - i8) - i6, measuredHeight); | ||||
|                 } else { | ||||
|                     childAt.layout(i11, i9, measuredWidth2, measuredHeight); | ||||
|                 } | ||||
|                 i8 += i6 + i5 + childAt.getMeasuredWidth() + this.itemSpacing; | ||||
|                 paddingTop = measuredHeight; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public int getRowIndex(View view) { | ||||
|         Object tag = view.getTag(R.id.row_index_key); | ||||
|         if (tag instanceof Integer) { | ||||
|             return ((Integer) tag).intValue(); | ||||
|         } | ||||
|         return -1; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,169 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.content.res.TypedArray; | ||||
| import android.graphics.Canvas; | ||||
| import android.graphics.Rect; | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.util.AttributeSet; | ||||
| import android.view.Gravity; | ||||
| import androidx.appcompat.widget.LinearLayoutCompat; | ||||
| import androidx.core.view.GravityCompat; | ||||
| import com.google.android.material.R; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class ForegroundLinearLayout extends LinearLayoutCompat { | ||||
|     private Drawable foreground; | ||||
|     boolean foregroundBoundsChanged; | ||||
|     private int foregroundGravity; | ||||
|     protected boolean mForegroundInPadding; | ||||
|     private final Rect overlayBounds; | ||||
|     private final Rect selfBounds; | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     public Drawable getForeground() { | ||||
|         return this.foreground; | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     public int getForegroundGravity() { | ||||
|         return this.foregroundGravity; | ||||
|     } | ||||
|  | ||||
|     public ForegroundLinearLayout(Context context) { | ||||
|         this(context, null); | ||||
|     } | ||||
|  | ||||
|     public ForegroundLinearLayout(Context context, AttributeSet attributeSet) { | ||||
|         this(context, attributeSet, 0); | ||||
|     } | ||||
|  | ||||
|     public ForegroundLinearLayout(Context context, AttributeSet attributeSet, int i) { | ||||
|         super(context, attributeSet, i); | ||||
|         this.selfBounds = new Rect(); | ||||
|         this.overlayBounds = new Rect(); | ||||
|         this.foregroundGravity = 119; | ||||
|         this.mForegroundInPadding = true; | ||||
|         this.foregroundBoundsChanged = false; | ||||
|         TypedArray obtainStyledAttributes = ThemeEnforcement.obtainStyledAttributes(context, attributeSet, R.styleable.ForegroundLinearLayout, i, 0, new int[0]); | ||||
|         this.foregroundGravity = obtainStyledAttributes.getInt(R.styleable.ForegroundLinearLayout_android_foregroundGravity, this.foregroundGravity); | ||||
|         Drawable drawable = obtainStyledAttributes.getDrawable(R.styleable.ForegroundLinearLayout_android_foreground); | ||||
|         if (drawable != null) { | ||||
|             setForeground(drawable); | ||||
|         } | ||||
|         this.mForegroundInPadding = obtainStyledAttributes.getBoolean(R.styleable.ForegroundLinearLayout_foregroundInsidePadding, true); | ||||
|         obtainStyledAttributes.recycle(); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     public void setForegroundGravity(int i) { | ||||
|         if (this.foregroundGravity != i) { | ||||
|             if ((8388615 & i) == 0) { | ||||
|                 i |= GravityCompat.START; | ||||
|             } | ||||
|             if ((i & 112) == 0) { | ||||
|                 i |= 48; | ||||
|             } | ||||
|             this.foregroundGravity = i; | ||||
|             if (i == 119 && this.foreground != null) { | ||||
|                 this.foreground.getPadding(new Rect()); | ||||
|             } | ||||
|             requestLayout(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     protected boolean verifyDrawable(Drawable drawable) { | ||||
|         return super.verifyDrawable(drawable) || drawable == this.foreground; | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.ViewGroup, android.view.View | ||||
|     public void jumpDrawablesToCurrentState() { | ||||
|         super.jumpDrawablesToCurrentState(); | ||||
|         Drawable drawable = this.foreground; | ||||
|         if (drawable != null) { | ||||
|             drawable.jumpToCurrentState(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.ViewGroup, android.view.View | ||||
|     protected void drawableStateChanged() { | ||||
|         super.drawableStateChanged(); | ||||
|         Drawable drawable = this.foreground; | ||||
|         if (drawable == null || !drawable.isStateful()) { | ||||
|             return; | ||||
|         } | ||||
|         this.foreground.setState(getDrawableState()); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     public void setForeground(Drawable drawable) { | ||||
|         Drawable drawable2 = this.foreground; | ||||
|         if (drawable2 != drawable) { | ||||
|             if (drawable2 != null) { | ||||
|                 drawable2.setCallback(null); | ||||
|                 unscheduleDrawable(this.foreground); | ||||
|             } | ||||
|             this.foreground = drawable; | ||||
|             this.foregroundBoundsChanged = true; | ||||
|             if (drawable != null) { | ||||
|                 setWillNotDraw(false); | ||||
|                 drawable.setCallback(this); | ||||
|                 if (drawable.isStateful()) { | ||||
|                     drawable.setState(getDrawableState()); | ||||
|                 } | ||||
|                 if (this.foregroundGravity == 119) { | ||||
|                     drawable.getPadding(new Rect()); | ||||
|                 } | ||||
|             } else { | ||||
|                 setWillNotDraw(true); | ||||
|             } | ||||
|             requestLayout(); | ||||
|             invalidate(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.widget.LinearLayoutCompat, android.view.ViewGroup, android.view.View | ||||
|     protected void onLayout(boolean z, int i, int i2, int i3, int i4) { | ||||
|         super.onLayout(z, i, i2, i3, i4); | ||||
|         this.foregroundBoundsChanged = z | this.foregroundBoundsChanged; | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     protected void onSizeChanged(int i, int i2, int i3, int i4) { | ||||
|         super.onSizeChanged(i, i2, i3, i4); | ||||
|         this.foregroundBoundsChanged = true; | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     public void draw(Canvas canvas) { | ||||
|         super.draw(canvas); | ||||
|         Drawable drawable = this.foreground; | ||||
|         if (drawable != null) { | ||||
|             if (this.foregroundBoundsChanged) { | ||||
|                 this.foregroundBoundsChanged = false; | ||||
|                 Rect rect = this.selfBounds; | ||||
|                 Rect rect2 = this.overlayBounds; | ||||
|                 int right = getRight() - getLeft(); | ||||
|                 int bottom = getBottom() - getTop(); | ||||
|                 if (this.mForegroundInPadding) { | ||||
|                     rect.set(0, 0, right, bottom); | ||||
|                 } else { | ||||
|                     rect.set(getPaddingLeft(), getPaddingTop(), right - getPaddingRight(), bottom - getPaddingBottom()); | ||||
|                 } | ||||
|                 Gravity.apply(this.foregroundGravity, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), rect, rect2); | ||||
|                 drawable.setBounds(rect2); | ||||
|             } | ||||
|             drawable.draw(canvas); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     public void drawableHotspotChanged(float f, float f2) { | ||||
|         super.drawableHotspotChanged(f, f2); | ||||
|         Drawable drawable = this.foreground; | ||||
|         if (drawable != null) { | ||||
|             drawable.setHotspot(f, f2); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,35 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.os.Build; | ||||
| import java.util.Locale; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class ManufacturerUtils { | ||||
|     private static final String LGE = "lge"; | ||||
|     private static final String MEIZU = "meizu"; | ||||
|     private static final String SAMSUNG = "samsung"; | ||||
|  | ||||
|     private ManufacturerUtils() { | ||||
|     } | ||||
|  | ||||
|     public static boolean isMeizuDevice() { | ||||
|         return getManufacturer().equals(MEIZU); | ||||
|     } | ||||
|  | ||||
|     public static boolean isLGEDevice() { | ||||
|         return getManufacturer().equals(LGE); | ||||
|     } | ||||
|  | ||||
|     public static boolean isSamsungDevice() { | ||||
|         return getManufacturer().equals(SAMSUNG); | ||||
|     } | ||||
|  | ||||
|     public static boolean isDateInputKeyboardMissingSeparatorCharacters() { | ||||
|         return isLGEDevice() || isSamsungDevice(); | ||||
|     } | ||||
|  | ||||
|     private static String getManufacturer() { | ||||
|         String str = Build.MANUFACTURER; | ||||
|         return str != null ? str.toLowerCase(Locale.ENGLISH) : ""; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,16 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.widget.Checkable; | ||||
| import com.google.android.material.internal.MaterialCheckable; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public interface MaterialCheckable<T extends MaterialCheckable<T>> extends Checkable { | ||||
|  | ||||
|     public interface OnCheckedChangeListener<C> { | ||||
|         void onCheckedChanged(C c, boolean z); | ||||
|     } | ||||
|  | ||||
|     int getId(); | ||||
|  | ||||
|     void setInternalOnCheckedChangeListener(OnCheckedChangeListener<T> onCheckedChangeListener); | ||||
| } | ||||
| @@ -0,0 +1,14 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.animation.ValueAnimator; | ||||
| import android.view.View; | ||||
| import com.google.android.material.internal.MultiViewUpdateListener; | ||||
|  | ||||
| /* compiled from: D8$$SyntheticClass */ | ||||
| /* loaded from: classes.dex */ | ||||
| public final /* synthetic */ class MultiViewUpdateListener$$ExternalSyntheticLambda0 implements MultiViewUpdateListener.Listener { | ||||
|     @Override // com.google.android.material.internal.MultiViewUpdateListener.Listener | ||||
|     public final void onAnimationUpdate(ValueAnimator valueAnimator, View view) { | ||||
|         MultiViewUpdateListener.setTranslationX(valueAnimator, view); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,14 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.animation.ValueAnimator; | ||||
| import android.view.View; | ||||
| import com.google.android.material.internal.MultiViewUpdateListener; | ||||
|  | ||||
| /* compiled from: D8$$SyntheticClass */ | ||||
| /* loaded from: classes.dex */ | ||||
| public final /* synthetic */ class MultiViewUpdateListener$$ExternalSyntheticLambda1 implements MultiViewUpdateListener.Listener { | ||||
|     @Override // com.google.android.material.internal.MultiViewUpdateListener.Listener | ||||
|     public final void onAnimationUpdate(ValueAnimator valueAnimator, View view) { | ||||
|         MultiViewUpdateListener.setScale(valueAnimator, view); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,14 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.animation.ValueAnimator; | ||||
| import android.view.View; | ||||
| import com.google.android.material.internal.MultiViewUpdateListener; | ||||
|  | ||||
| /* compiled from: D8$$SyntheticClass */ | ||||
| /* loaded from: classes.dex */ | ||||
| public final /* synthetic */ class MultiViewUpdateListener$$ExternalSyntheticLambda2 implements MultiViewUpdateListener.Listener { | ||||
|     @Override // com.google.android.material.internal.MultiViewUpdateListener.Listener | ||||
|     public final void onAnimationUpdate(ValueAnimator valueAnimator, View view) { | ||||
|         MultiViewUpdateListener.setTranslationY(valueAnimator, view); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,14 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.animation.ValueAnimator; | ||||
| import android.view.View; | ||||
| import com.google.android.material.internal.MultiViewUpdateListener; | ||||
|  | ||||
| /* compiled from: D8$$SyntheticClass */ | ||||
| /* loaded from: classes.dex */ | ||||
| public final /* synthetic */ class MultiViewUpdateListener$$ExternalSyntheticLambda3 implements MultiViewUpdateListener.Listener { | ||||
|     @Override // com.google.android.material.internal.MultiViewUpdateListener.Listener | ||||
|     public final void onAnimationUpdate(ValueAnimator valueAnimator, View view) { | ||||
|         MultiViewUpdateListener.setAlpha(valueAnimator, view); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,86 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.animation.ValueAnimator; | ||||
| import android.view.View; | ||||
| import java.util.Collection; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class MultiViewUpdateListener implements ValueAnimator.AnimatorUpdateListener { | ||||
|     private final Listener listener; | ||||
|     private final View[] views; | ||||
|  | ||||
|     interface Listener { | ||||
|         void onAnimationUpdate(ValueAnimator valueAnimator, View view); | ||||
|     } | ||||
|  | ||||
|     public MultiViewUpdateListener(Listener listener, View... viewArr) { | ||||
|         this.listener = listener; | ||||
|         this.views = viewArr; | ||||
|     } | ||||
|  | ||||
|     public MultiViewUpdateListener(Listener listener, Collection<View> collection) { | ||||
|         this.listener = listener; | ||||
|         this.views = (View[]) collection.toArray(new View[0]); | ||||
|     } | ||||
|  | ||||
|     @Override // android.animation.ValueAnimator.AnimatorUpdateListener | ||||
|     public void onAnimationUpdate(ValueAnimator valueAnimator) { | ||||
|         for (View view : this.views) { | ||||
|             this.listener.onAnimationUpdate(valueAnimator, view); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static MultiViewUpdateListener alphaListener(View... viewArr) { | ||||
|         return new MultiViewUpdateListener(new MultiViewUpdateListener$$ExternalSyntheticLambda3(), viewArr); | ||||
|     } | ||||
|  | ||||
|     public static MultiViewUpdateListener alphaListener(Collection<View> collection) { | ||||
|         return new MultiViewUpdateListener(new MultiViewUpdateListener$$ExternalSyntheticLambda3(), collection); | ||||
|     } | ||||
|  | ||||
|     /* JADX INFO: Access modifiers changed from: private */ | ||||
|     public static void setAlpha(ValueAnimator valueAnimator, View view) { | ||||
|         view.setAlpha(((Float) valueAnimator.getAnimatedValue()).floatValue()); | ||||
|     } | ||||
|  | ||||
|     public static MultiViewUpdateListener scaleListener(View... viewArr) { | ||||
|         return new MultiViewUpdateListener(new MultiViewUpdateListener$$ExternalSyntheticLambda1(), viewArr); | ||||
|     } | ||||
|  | ||||
|     public static MultiViewUpdateListener scaleListener(Collection<View> collection) { | ||||
|         return new MultiViewUpdateListener(new MultiViewUpdateListener$$ExternalSyntheticLambda1(), collection); | ||||
|     } | ||||
|  | ||||
|     /* JADX INFO: Access modifiers changed from: private */ | ||||
|     public static void setScale(ValueAnimator valueAnimator, View view) { | ||||
|         Float f = (Float) valueAnimator.getAnimatedValue(); | ||||
|         view.setScaleX(f.floatValue()); | ||||
|         view.setScaleY(f.floatValue()); | ||||
|     } | ||||
|  | ||||
|     public static MultiViewUpdateListener translationXListener(View... viewArr) { | ||||
|         return new MultiViewUpdateListener(new MultiViewUpdateListener$$ExternalSyntheticLambda0(), viewArr); | ||||
|     } | ||||
|  | ||||
|     public static MultiViewUpdateListener translationXListener(Collection<View> collection) { | ||||
|         return new MultiViewUpdateListener(new MultiViewUpdateListener$$ExternalSyntheticLambda0(), collection); | ||||
|     } | ||||
|  | ||||
|     /* JADX INFO: Access modifiers changed from: private */ | ||||
|     public static void setTranslationX(ValueAnimator valueAnimator, View view) { | ||||
|         view.setTranslationX(((Float) valueAnimator.getAnimatedValue()).floatValue()); | ||||
|     } | ||||
|  | ||||
|     public static MultiViewUpdateListener translationYListener(View... viewArr) { | ||||
|         return new MultiViewUpdateListener(new MultiViewUpdateListener$$ExternalSyntheticLambda2(), viewArr); | ||||
|     } | ||||
|  | ||||
|     public static MultiViewUpdateListener translationYListener(Collection<View> collection) { | ||||
|         return new MultiViewUpdateListener(new MultiViewUpdateListener$$ExternalSyntheticLambda2(), collection); | ||||
|     } | ||||
|  | ||||
|     /* JADX INFO: Access modifiers changed from: private */ | ||||
|     public static void setTranslationY(ValueAnimator valueAnimator, View view) { | ||||
|         view.setTranslationY(((Float) valueAnimator.getAnimatedValue()).floatValue()); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,21 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.view.SubMenu; | ||||
| import androidx.appcompat.view.menu.MenuBuilder; | ||||
| import androidx.appcompat.view.menu.MenuItemImpl; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class NavigationMenu extends MenuBuilder { | ||||
|     public NavigationMenu(Context context) { | ||||
|         super(context); | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuBuilder, android.view.Menu | ||||
|     public SubMenu addSubMenu(int i, int i2, int i3, CharSequence charSequence) { | ||||
|         MenuItemImpl menuItemImpl = (MenuItemImpl) addInternal(i, i2, i3, charSequence); | ||||
|         NavigationSubMenu navigationSubMenu = new NavigationSubMenu(getContext(), this, menuItemImpl); | ||||
|         menuItemImpl.setSubMenu(navigationSubMenu); | ||||
|         return navigationSubMenu; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,265 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.R; | ||||
| import android.content.Context; | ||||
| import android.content.res.ColorStateList; | ||||
| import android.graphics.drawable.ColorDrawable; | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.graphics.drawable.StateListDrawable; | ||||
| import android.util.AttributeSet; | ||||
| import android.util.TypedValue; | ||||
| import android.view.LayoutInflater; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.view.ViewStub; | ||||
| import android.widget.CheckedTextView; | ||||
| import android.widget.FrameLayout; | ||||
| import androidx.appcompat.view.menu.MenuItemImpl; | ||||
| import androidx.appcompat.view.menu.MenuView; | ||||
| import androidx.appcompat.widget.LinearLayoutCompat; | ||||
| import androidx.appcompat.widget.TooltipCompat; | ||||
| import androidx.core.content.res.ResourcesCompat; | ||||
| import androidx.core.graphics.drawable.DrawableCompat; | ||||
| import androidx.core.view.AccessibilityDelegateCompat; | ||||
| import androidx.core.view.ViewCompat; | ||||
| import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; | ||||
| import androidx.core.widget.TextViewCompat; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class NavigationMenuItemView extends ForegroundLinearLayout implements MenuView.ItemView { | ||||
|     private static final int[] CHECKED_STATE_SET = {R.attr.state_checked}; | ||||
|     private final AccessibilityDelegateCompat accessibilityDelegate; | ||||
|     private FrameLayout actionArea; | ||||
|     boolean checkable; | ||||
|     private Drawable emptyDrawable; | ||||
|     private boolean hasIconTintList; | ||||
|     private int iconSize; | ||||
|     private ColorStateList iconTintList; | ||||
|     boolean isBold; | ||||
|     private MenuItemImpl itemData; | ||||
|     private boolean needsEmptyIcon; | ||||
|     private final CheckedTextView textView; | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuView.ItemView | ||||
|     public MenuItemImpl getItemData() { | ||||
|         return this.itemData; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuView.ItemView | ||||
|     public boolean prefersCondensedTitle() { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     public void setIconSize(int i) { | ||||
|         this.iconSize = i; | ||||
|     } | ||||
|  | ||||
|     public void setNeedsEmptyIcon(boolean z) { | ||||
|         this.needsEmptyIcon = z; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuView.ItemView | ||||
|     public void setShortcut(boolean z, char c) { | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuView.ItemView | ||||
|     public boolean showsIcon() { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     public NavigationMenuItemView(Context context) { | ||||
|         this(context, null); | ||||
|     } | ||||
|  | ||||
|     public NavigationMenuItemView(Context context, AttributeSet attributeSet) { | ||||
|         this(context, attributeSet, 0); | ||||
|     } | ||||
|  | ||||
|     public NavigationMenuItemView(Context context, AttributeSet attributeSet, int i) { | ||||
|         super(context, attributeSet, i); | ||||
|         this.isBold = true; | ||||
|         AccessibilityDelegateCompat accessibilityDelegateCompat = new AccessibilityDelegateCompat() { // from class: com.google.android.material.internal.NavigationMenuItemView.1 | ||||
|             @Override // androidx.core.view.AccessibilityDelegateCompat | ||||
|             public void onInitializeAccessibilityNodeInfo(View view, AccessibilityNodeInfoCompat accessibilityNodeInfoCompat) { | ||||
|                 super.onInitializeAccessibilityNodeInfo(view, accessibilityNodeInfoCompat); | ||||
|                 accessibilityNodeInfoCompat.setCheckable(NavigationMenuItemView.this.checkable); | ||||
|             } | ||||
|         }; | ||||
|         this.accessibilityDelegate = accessibilityDelegateCompat; | ||||
|         setOrientation(0); | ||||
|         LayoutInflater.from(context).inflate(com.google.android.material.R.layout.design_navigation_menu_item, (ViewGroup) this, true); | ||||
|         setIconSize(context.getResources().getDimensionPixelSize(com.google.android.material.R.dimen.design_navigation_icon_size)); | ||||
|         CheckedTextView checkedTextView = (CheckedTextView) findViewById(com.google.android.material.R.id.design_menu_item_text); | ||||
|         this.textView = checkedTextView; | ||||
|         checkedTextView.setDuplicateParentStateEnabled(true); | ||||
|         ViewCompat.setAccessibilityDelegate(checkedTextView, accessibilityDelegateCompat); | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuView.ItemView | ||||
|     public void initialize(MenuItemImpl menuItemImpl, int i) { | ||||
|         this.itemData = menuItemImpl; | ||||
|         if (menuItemImpl.getItemId() > 0) { | ||||
|             setId(menuItemImpl.getItemId()); | ||||
|         } | ||||
|         setVisibility(menuItemImpl.isVisible() ? 0 : 8); | ||||
|         if (getBackground() == null) { | ||||
|             ViewCompat.setBackground(this, createDefaultBackground()); | ||||
|         } | ||||
|         setCheckable(menuItemImpl.isCheckable()); | ||||
|         setChecked(menuItemImpl.isChecked()); | ||||
|         setEnabled(menuItemImpl.isEnabled()); | ||||
|         setTitle(menuItemImpl.getTitle()); | ||||
|         setIcon(menuItemImpl.getIcon()); | ||||
|         setActionView(menuItemImpl.getActionView()); | ||||
|         setContentDescription(menuItemImpl.getContentDescription()); | ||||
|         TooltipCompat.setTooltipText(this, menuItemImpl.getTooltipText()); | ||||
|         adjustAppearance(); | ||||
|     } | ||||
|  | ||||
|     public void initialize(MenuItemImpl menuItemImpl, boolean z) { | ||||
|         this.isBold = z; | ||||
|         initialize(menuItemImpl, 0); | ||||
|     } | ||||
|  | ||||
|     private boolean shouldExpandActionArea() { | ||||
|         return this.itemData.getTitle() == null && this.itemData.getIcon() == null && this.itemData.getActionView() != null; | ||||
|     } | ||||
|  | ||||
|     private void adjustAppearance() { | ||||
|         if (shouldExpandActionArea()) { | ||||
|             this.textView.setVisibility(8); | ||||
|             FrameLayout frameLayout = this.actionArea; | ||||
|             if (frameLayout != null) { | ||||
|                 LinearLayoutCompat.LayoutParams layoutParams = (LinearLayoutCompat.LayoutParams) frameLayout.getLayoutParams(); | ||||
|                 layoutParams.width = -1; | ||||
|                 this.actionArea.setLayoutParams(layoutParams); | ||||
|                 return; | ||||
|             } | ||||
|             return; | ||||
|         } | ||||
|         this.textView.setVisibility(0); | ||||
|         FrameLayout frameLayout2 = this.actionArea; | ||||
|         if (frameLayout2 != null) { | ||||
|             LinearLayoutCompat.LayoutParams layoutParams2 = (LinearLayoutCompat.LayoutParams) frameLayout2.getLayoutParams(); | ||||
|             layoutParams2.width = -2; | ||||
|             this.actionArea.setLayoutParams(layoutParams2); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void recycle() { | ||||
|         FrameLayout frameLayout = this.actionArea; | ||||
|         if (frameLayout != null) { | ||||
|             frameLayout.removeAllViews(); | ||||
|         } | ||||
|         this.textView.setCompoundDrawables(null, null, null, null); | ||||
|     } | ||||
|  | ||||
|     private void setActionView(View view) { | ||||
|         if (view != null) { | ||||
|             if (this.actionArea == null) { | ||||
|                 this.actionArea = (FrameLayout) ((ViewStub) findViewById(com.google.android.material.R.id.design_menu_item_action_area_stub)).inflate(); | ||||
|             } | ||||
|             this.actionArea.removeAllViews(); | ||||
|             this.actionArea.addView(view); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private StateListDrawable createDefaultBackground() { | ||||
|         TypedValue typedValue = new TypedValue(); | ||||
|         if (!getContext().getTheme().resolveAttribute(androidx.appcompat.R.attr.colorControlHighlight, typedValue, true)) { | ||||
|             return null; | ||||
|         } | ||||
|         StateListDrawable stateListDrawable = new StateListDrawable(); | ||||
|         stateListDrawable.addState(CHECKED_STATE_SET, new ColorDrawable(typedValue.data)); | ||||
|         stateListDrawable.addState(EMPTY_STATE_SET, new ColorDrawable(0)); | ||||
|         return stateListDrawable; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuView.ItemView | ||||
|     public void setTitle(CharSequence charSequence) { | ||||
|         this.textView.setText(charSequence); | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuView.ItemView | ||||
|     public void setCheckable(boolean z) { | ||||
|         refreshDrawableState(); | ||||
|         if (this.checkable != z) { | ||||
|             this.checkable = z; | ||||
|             this.accessibilityDelegate.sendAccessibilityEvent(this.textView, 2048); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuView.ItemView | ||||
|     public void setChecked(boolean z) { | ||||
|         refreshDrawableState(); | ||||
|         this.textView.setChecked(z); | ||||
|         CheckedTextView checkedTextView = this.textView; | ||||
|         checkedTextView.setTypeface(checkedTextView.getTypeface(), (z && this.isBold) ? 1 : 0); | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuView.ItemView | ||||
|     public void setIcon(Drawable drawable) { | ||||
|         if (drawable != null) { | ||||
|             if (this.hasIconTintList) { | ||||
|                 Drawable.ConstantState constantState = drawable.getConstantState(); | ||||
|                 if (constantState != null) { | ||||
|                     drawable = constantState.newDrawable(); | ||||
|                 } | ||||
|                 drawable = DrawableCompat.wrap(drawable).mutate(); | ||||
|                 DrawableCompat.setTintList(drawable, this.iconTintList); | ||||
|             } | ||||
|             int i = this.iconSize; | ||||
|             drawable.setBounds(0, 0, i, i); | ||||
|         } else if (this.needsEmptyIcon) { | ||||
|             if (this.emptyDrawable == null) { | ||||
|                 Drawable drawable2 = ResourcesCompat.getDrawable(getResources(), com.google.android.material.R.drawable.navigation_empty_icon, getContext().getTheme()); | ||||
|                 this.emptyDrawable = drawable2; | ||||
|                 if (drawable2 != null) { | ||||
|                     int i2 = this.iconSize; | ||||
|                     drawable2.setBounds(0, 0, i2, i2); | ||||
|                 } | ||||
|             } | ||||
|             drawable = this.emptyDrawable; | ||||
|         } | ||||
|         TextViewCompat.setCompoundDrawablesRelative(this.textView, drawable, null, null, null); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.ViewGroup, android.view.View | ||||
|     protected int[] onCreateDrawableState(int i) { | ||||
|         int[] onCreateDrawableState = super.onCreateDrawableState(i + 1); | ||||
|         MenuItemImpl menuItemImpl = this.itemData; | ||||
|         if (menuItemImpl != null && menuItemImpl.isCheckable() && this.itemData.isChecked()) { | ||||
|             mergeDrawableStates(onCreateDrawableState, CHECKED_STATE_SET); | ||||
|         } | ||||
|         return onCreateDrawableState; | ||||
|     } | ||||
|  | ||||
|     void setIconTintList(ColorStateList colorStateList) { | ||||
|         this.iconTintList = colorStateList; | ||||
|         this.hasIconTintList = colorStateList != null; | ||||
|         MenuItemImpl menuItemImpl = this.itemData; | ||||
|         if (menuItemImpl != null) { | ||||
|             setIcon(menuItemImpl.getIcon()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setTextAppearance(int i) { | ||||
|         TextViewCompat.setTextAppearance(this.textView, i); | ||||
|     } | ||||
|  | ||||
|     public void setTextColor(ColorStateList colorStateList) { | ||||
|         this.textView.setTextColor(colorStateList); | ||||
|     } | ||||
|  | ||||
|     public void setHorizontalPadding(int i) { | ||||
|         setPadding(i, getPaddingTop(), i, getPaddingBottom()); | ||||
|     } | ||||
|  | ||||
|     public void setIconPadding(int i) { | ||||
|         this.textView.setCompoundDrawablePadding(i); | ||||
|     } | ||||
|  | ||||
|     public void setMaxLines(int i) { | ||||
|         this.textView.setMaxLines(i); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,802 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.content.res.ColorStateList; | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.graphics.drawable.RippleDrawable; | ||||
| import android.os.Bundle; | ||||
| import android.os.Parcelable; | ||||
| import android.util.SparseArray; | ||||
| import android.view.LayoutInflater; | ||||
| import android.view.SubMenu; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.widget.LinearLayout; | ||||
| import android.widget.TextView; | ||||
| import androidx.appcompat.view.menu.MenuBuilder; | ||||
| import androidx.appcompat.view.menu.MenuItemImpl; | ||||
| import androidx.appcompat.view.menu.MenuPresenter; | ||||
| import androidx.appcompat.view.menu.MenuView; | ||||
| import androidx.appcompat.view.menu.SubMenuBuilder; | ||||
| import androidx.core.view.AccessibilityDelegateCompat; | ||||
| import androidx.core.view.ViewCompat; | ||||
| import androidx.core.view.WindowInsetsCompat; | ||||
| import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; | ||||
| import androidx.core.widget.TextViewCompat; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
| import androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate; | ||||
| import com.google.android.material.R; | ||||
| import java.util.ArrayList; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class NavigationMenuPresenter implements MenuPresenter { | ||||
|     public static final int NO_TEXT_APPEARANCE_SET = 0; | ||||
|     private static final String STATE_ADAPTER = "android:menu:adapter"; | ||||
|     private static final String STATE_HEADER = "android:menu:header"; | ||||
|     private static final String STATE_HIERARCHY = "android:menu:list"; | ||||
|     NavigationMenuAdapter adapter; | ||||
|     private MenuPresenter.Callback callback; | ||||
|     int dividerInsetEnd; | ||||
|     int dividerInsetStart; | ||||
|     boolean hasCustomItemIconSize; | ||||
|     LinearLayout headerLayout; | ||||
|     ColorStateList iconTintList; | ||||
|     private int id; | ||||
|     Drawable itemBackground; | ||||
|     RippleDrawable itemForeground; | ||||
|     int itemHorizontalPadding; | ||||
|     int itemIconPadding; | ||||
|     int itemIconSize; | ||||
|     private int itemMaxLines; | ||||
|     int itemVerticalPadding; | ||||
|     LayoutInflater layoutInflater; | ||||
|     MenuBuilder menu; | ||||
|     private NavigationMenuView menuView; | ||||
|     int paddingSeparator; | ||||
|     private int paddingTopDefault; | ||||
|     ColorStateList subheaderColor; | ||||
|     int subheaderInsetEnd; | ||||
|     int subheaderInsetStart; | ||||
|     ColorStateList textColor; | ||||
|     int subheaderTextAppearance = 0; | ||||
|     int textAppearance = 0; | ||||
|     boolean textAppearanceActiveBoldEnabled = true; | ||||
|     boolean isBehindStatusBar = true; | ||||
|     private int overScrollMode = -1; | ||||
|     final View.OnClickListener onClickListener = new View.OnClickListener() { // from class: com.google.android.material.internal.NavigationMenuPresenter.1 | ||||
|         @Override // android.view.View.OnClickListener | ||||
|         public void onClick(View view) { | ||||
|             boolean z = true; | ||||
|             NavigationMenuPresenter.this.setUpdateSuspended(true); | ||||
|             MenuItemImpl itemData = ((NavigationMenuItemView) view).getItemData(); | ||||
|             boolean performItemAction = NavigationMenuPresenter.this.menu.performItemAction(itemData, NavigationMenuPresenter.this, 0); | ||||
|             if (itemData != null && itemData.isCheckable() && performItemAction) { | ||||
|                 NavigationMenuPresenter.this.adapter.setCheckedItem(itemData); | ||||
|             } else { | ||||
|                 z = false; | ||||
|             } | ||||
|             NavigationMenuPresenter.this.setUpdateSuspended(false); | ||||
|             if (z) { | ||||
|                 NavigationMenuPresenter.this.updateMenuView(false); | ||||
|             } | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     private interface NavigationMenuItem { | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPresenter | ||||
|     public boolean collapseItemActionView(MenuBuilder menuBuilder, MenuItemImpl menuItemImpl) { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPresenter | ||||
|     public boolean expandItemActionView(MenuBuilder menuBuilder, MenuItemImpl menuItemImpl) { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPresenter | ||||
|     public boolean flagActionItems() { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     public int getDividerInsetEnd() { | ||||
|         return this.dividerInsetEnd; | ||||
|     } | ||||
|  | ||||
|     public int getDividerInsetStart() { | ||||
|         return this.dividerInsetStart; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPresenter | ||||
|     public int getId() { | ||||
|         return this.id; | ||||
|     } | ||||
|  | ||||
|     public Drawable getItemBackground() { | ||||
|         return this.itemBackground; | ||||
|     } | ||||
|  | ||||
|     public int getItemHorizontalPadding() { | ||||
|         return this.itemHorizontalPadding; | ||||
|     } | ||||
|  | ||||
|     public int getItemIconPadding() { | ||||
|         return this.itemIconPadding; | ||||
|     } | ||||
|  | ||||
|     public int getItemMaxLines() { | ||||
|         return this.itemMaxLines; | ||||
|     } | ||||
|  | ||||
|     public ColorStateList getItemTextColor() { | ||||
|         return this.textColor; | ||||
|     } | ||||
|  | ||||
|     public ColorStateList getItemTintList() { | ||||
|         return this.iconTintList; | ||||
|     } | ||||
|  | ||||
|     public int getItemVerticalPadding() { | ||||
|         return this.itemVerticalPadding; | ||||
|     } | ||||
|  | ||||
|     public int getSubheaderInsetEnd() { | ||||
|         return this.subheaderInsetEnd; | ||||
|     } | ||||
|  | ||||
|     public int getSubheaderInsetStart() { | ||||
|         return this.subheaderInsetStart; | ||||
|     } | ||||
|  | ||||
|     public boolean isBehindStatusBar() { | ||||
|         return this.isBehindStatusBar; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPresenter | ||||
|     public boolean onSubMenuSelected(SubMenuBuilder subMenuBuilder) { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPresenter | ||||
|     public void setCallback(MenuPresenter.Callback callback) { | ||||
|         this.callback = callback; | ||||
|     } | ||||
|  | ||||
|     public void setId(int i) { | ||||
|         this.id = i; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPresenter | ||||
|     public void initForMenu(Context context, MenuBuilder menuBuilder) { | ||||
|         this.layoutInflater = LayoutInflater.from(context); | ||||
|         this.menu = menuBuilder; | ||||
|         this.paddingSeparator = context.getResources().getDimensionPixelOffset(R.dimen.design_navigation_separator_vertical_padding); | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPresenter | ||||
|     public MenuView getMenuView(ViewGroup viewGroup) { | ||||
|         if (this.menuView == null) { | ||||
|             NavigationMenuView navigationMenuView = (NavigationMenuView) this.layoutInflater.inflate(R.layout.design_navigation_menu, viewGroup, false); | ||||
|             this.menuView = navigationMenuView; | ||||
|             navigationMenuView.setAccessibilityDelegateCompat(new NavigationMenuViewAccessibilityDelegate(this.menuView)); | ||||
|             if (this.adapter == null) { | ||||
|                 this.adapter = new NavigationMenuAdapter(); | ||||
|             } | ||||
|             int i = this.overScrollMode; | ||||
|             if (i != -1) { | ||||
|                 this.menuView.setOverScrollMode(i); | ||||
|             } | ||||
|             LinearLayout linearLayout = (LinearLayout) this.layoutInflater.inflate(R.layout.design_navigation_item_header, (ViewGroup) this.menuView, false); | ||||
|             this.headerLayout = linearLayout; | ||||
|             ViewCompat.setImportantForAccessibility(linearLayout, 2); | ||||
|             this.menuView.setAdapter(this.adapter); | ||||
|         } | ||||
|         return this.menuView; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPresenter | ||||
|     public void updateMenuView(boolean z) { | ||||
|         NavigationMenuAdapter navigationMenuAdapter = this.adapter; | ||||
|         if (navigationMenuAdapter != null) { | ||||
|             navigationMenuAdapter.update(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPresenter | ||||
|     public void onCloseMenu(MenuBuilder menuBuilder, boolean z) { | ||||
|         MenuPresenter.Callback callback = this.callback; | ||||
|         if (callback != null) { | ||||
|             callback.onCloseMenu(menuBuilder, z); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPresenter | ||||
|     public Parcelable onSaveInstanceState() { | ||||
|         Bundle bundle = new Bundle(); | ||||
|         if (this.menuView != null) { | ||||
|             SparseArray<? extends Parcelable> sparseArray = new SparseArray<>(); | ||||
|             this.menuView.saveHierarchyState(sparseArray); | ||||
|             bundle.putSparseParcelableArray("android:menu:list", sparseArray); | ||||
|         } | ||||
|         NavigationMenuAdapter navigationMenuAdapter = this.adapter; | ||||
|         if (navigationMenuAdapter != null) { | ||||
|             bundle.putBundle(STATE_ADAPTER, navigationMenuAdapter.createInstanceState()); | ||||
|         } | ||||
|         if (this.headerLayout != null) { | ||||
|             SparseArray<? extends Parcelable> sparseArray2 = new SparseArray<>(); | ||||
|             this.headerLayout.saveHierarchyState(sparseArray2); | ||||
|             bundle.putSparseParcelableArray(STATE_HEADER, sparseArray2); | ||||
|         } | ||||
|         return bundle; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuPresenter | ||||
|     public void onRestoreInstanceState(Parcelable parcelable) { | ||||
|         if (parcelable instanceof Bundle) { | ||||
|             Bundle bundle = (Bundle) parcelable; | ||||
|             SparseArray sparseParcelableArray = bundle.getSparseParcelableArray("android:menu:list"); | ||||
|             if (sparseParcelableArray != null) { | ||||
|                 this.menuView.restoreHierarchyState(sparseParcelableArray); | ||||
|             } | ||||
|             Bundle bundle2 = bundle.getBundle(STATE_ADAPTER); | ||||
|             if (bundle2 != null) { | ||||
|                 this.adapter.restoreInstanceState(bundle2); | ||||
|             } | ||||
|             SparseArray sparseParcelableArray2 = bundle.getSparseParcelableArray(STATE_HEADER); | ||||
|             if (sparseParcelableArray2 != null) { | ||||
|                 this.headerLayout.restoreHierarchyState(sparseParcelableArray2); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setCheckedItem(MenuItemImpl menuItemImpl) { | ||||
|         this.adapter.setCheckedItem(menuItemImpl); | ||||
|     } | ||||
|  | ||||
|     public MenuItemImpl getCheckedItem() { | ||||
|         return this.adapter.getCheckedItem(); | ||||
|     } | ||||
|  | ||||
|     public View inflateHeaderView(int i) { | ||||
|         View inflate = this.layoutInflater.inflate(i, (ViewGroup) this.headerLayout, false); | ||||
|         addHeaderView(inflate); | ||||
|         return inflate; | ||||
|     } | ||||
|  | ||||
|     public void addHeaderView(View view) { | ||||
|         this.headerLayout.addView(view); | ||||
|         NavigationMenuView navigationMenuView = this.menuView; | ||||
|         navigationMenuView.setPadding(0, 0, 0, navigationMenuView.getPaddingBottom()); | ||||
|     } | ||||
|  | ||||
|     public void removeHeaderView(View view) { | ||||
|         this.headerLayout.removeView(view); | ||||
|         if (hasHeader()) { | ||||
|             return; | ||||
|         } | ||||
|         NavigationMenuView navigationMenuView = this.menuView; | ||||
|         navigationMenuView.setPadding(0, this.paddingTopDefault, 0, navigationMenuView.getPaddingBottom()); | ||||
|     } | ||||
|  | ||||
|     public int getHeaderCount() { | ||||
|         return this.headerLayout.getChildCount(); | ||||
|     } | ||||
|  | ||||
|     private boolean hasHeader() { | ||||
|         return getHeaderCount() > 0; | ||||
|     } | ||||
|  | ||||
|     public View getHeaderView(int i) { | ||||
|         return this.headerLayout.getChildAt(i); | ||||
|     } | ||||
|  | ||||
|     public void setSubheaderColor(ColorStateList colorStateList) { | ||||
|         this.subheaderColor = colorStateList; | ||||
|         updateMenuView(false); | ||||
|     } | ||||
|  | ||||
|     public void setSubheaderTextAppearance(int i) { | ||||
|         this.subheaderTextAppearance = i; | ||||
|         updateMenuView(false); | ||||
|     } | ||||
|  | ||||
|     public void setItemIconTintList(ColorStateList colorStateList) { | ||||
|         this.iconTintList = colorStateList; | ||||
|         updateMenuView(false); | ||||
|     } | ||||
|  | ||||
|     public void setItemTextColor(ColorStateList colorStateList) { | ||||
|         this.textColor = colorStateList; | ||||
|         updateMenuView(false); | ||||
|     } | ||||
|  | ||||
|     public void setItemTextAppearance(int i) { | ||||
|         this.textAppearance = i; | ||||
|         updateMenuView(false); | ||||
|     } | ||||
|  | ||||
|     public void setItemTextAppearanceActiveBoldEnabled(boolean z) { | ||||
|         this.textAppearanceActiveBoldEnabled = z; | ||||
|         updateMenuView(false); | ||||
|     } | ||||
|  | ||||
|     public void setItemBackground(Drawable drawable) { | ||||
|         this.itemBackground = drawable; | ||||
|         updateMenuView(false); | ||||
|     } | ||||
|  | ||||
|     public void setItemForeground(RippleDrawable rippleDrawable) { | ||||
|         this.itemForeground = rippleDrawable; | ||||
|         updateMenuView(false); | ||||
|     } | ||||
|  | ||||
|     public void setItemHorizontalPadding(int i) { | ||||
|         this.itemHorizontalPadding = i; | ||||
|         updateMenuView(false); | ||||
|     } | ||||
|  | ||||
|     public void setItemVerticalPadding(int i) { | ||||
|         this.itemVerticalPadding = i; | ||||
|         updateMenuView(false); | ||||
|     } | ||||
|  | ||||
|     public void setDividerInsetStart(int i) { | ||||
|         this.dividerInsetStart = i; | ||||
|         updateMenuView(false); | ||||
|     } | ||||
|  | ||||
|     public void setDividerInsetEnd(int i) { | ||||
|         this.dividerInsetEnd = i; | ||||
|         updateMenuView(false); | ||||
|     } | ||||
|  | ||||
|     public void setSubheaderInsetStart(int i) { | ||||
|         this.subheaderInsetStart = i; | ||||
|         updateMenuView(false); | ||||
|     } | ||||
|  | ||||
|     public void setSubheaderInsetEnd(int i) { | ||||
|         this.subheaderInsetEnd = i; | ||||
|         updateMenuView(false); | ||||
|     } | ||||
|  | ||||
|     public void setItemIconPadding(int i) { | ||||
|         this.itemIconPadding = i; | ||||
|         updateMenuView(false); | ||||
|     } | ||||
|  | ||||
|     public void setItemMaxLines(int i) { | ||||
|         this.itemMaxLines = i; | ||||
|         updateMenuView(false); | ||||
|     } | ||||
|  | ||||
|     public void setItemIconSize(int i) { | ||||
|         if (this.itemIconSize != i) { | ||||
|             this.itemIconSize = i; | ||||
|             this.hasCustomItemIconSize = true; | ||||
|             updateMenuView(false); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setUpdateSuspended(boolean z) { | ||||
|         NavigationMenuAdapter navigationMenuAdapter = this.adapter; | ||||
|         if (navigationMenuAdapter != null) { | ||||
|             navigationMenuAdapter.setUpdateSuspended(z); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setBehindStatusBar(boolean z) { | ||||
|         if (this.isBehindStatusBar != z) { | ||||
|             this.isBehindStatusBar = z; | ||||
|             updateTopPadding(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void updateTopPadding() { | ||||
|         int i = (hasHeader() || !this.isBehindStatusBar) ? 0 : this.paddingTopDefault; | ||||
|         NavigationMenuView navigationMenuView = this.menuView; | ||||
|         navigationMenuView.setPadding(0, i, 0, navigationMenuView.getPaddingBottom()); | ||||
|     } | ||||
|  | ||||
|     public void dispatchApplyWindowInsets(WindowInsetsCompat windowInsetsCompat) { | ||||
|         int systemWindowInsetTop = windowInsetsCompat.getSystemWindowInsetTop(); | ||||
|         if (this.paddingTopDefault != systemWindowInsetTop) { | ||||
|             this.paddingTopDefault = systemWindowInsetTop; | ||||
|             updateTopPadding(); | ||||
|         } | ||||
|         NavigationMenuView navigationMenuView = this.menuView; | ||||
|         navigationMenuView.setPadding(0, navigationMenuView.getPaddingTop(), 0, windowInsetsCompat.getSystemWindowInsetBottom()); | ||||
|         ViewCompat.dispatchApplyWindowInsets(this.headerLayout, windowInsetsCompat); | ||||
|     } | ||||
|  | ||||
|     public void setOverScrollMode(int i) { | ||||
|         this.overScrollMode = i; | ||||
|         NavigationMenuView navigationMenuView = this.menuView; | ||||
|         if (navigationMenuView != null) { | ||||
|             navigationMenuView.setOverScrollMode(i); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static abstract class ViewHolder extends RecyclerView.ViewHolder { | ||||
|         public ViewHolder(View view) { | ||||
|             super(view); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static class NormalViewHolder extends ViewHolder { | ||||
|         public NormalViewHolder(LayoutInflater layoutInflater, ViewGroup viewGroup, View.OnClickListener onClickListener) { | ||||
|             super(layoutInflater.inflate(R.layout.design_navigation_item, viewGroup, false)); | ||||
|             this.itemView.setOnClickListener(onClickListener); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static class SubheaderViewHolder extends ViewHolder { | ||||
|         public SubheaderViewHolder(LayoutInflater layoutInflater, ViewGroup viewGroup) { | ||||
|             super(layoutInflater.inflate(R.layout.design_navigation_item_subheader, viewGroup, false)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static class SeparatorViewHolder extends ViewHolder { | ||||
|         public SeparatorViewHolder(LayoutInflater layoutInflater, ViewGroup viewGroup) { | ||||
|             super(layoutInflater.inflate(R.layout.design_navigation_item_separator, viewGroup, false)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static class HeaderViewHolder extends ViewHolder { | ||||
|         public HeaderViewHolder(View view) { | ||||
|             super(view); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private class NavigationMenuAdapter extends RecyclerView.Adapter<ViewHolder> { | ||||
|         private static final String STATE_ACTION_VIEWS = "android:menu:action_views"; | ||||
|         private static final String STATE_CHECKED_ITEM = "android:menu:checked"; | ||||
|         private static final int VIEW_TYPE_HEADER = 3; | ||||
|         private static final int VIEW_TYPE_NORMAL = 0; | ||||
|         private static final int VIEW_TYPE_SEPARATOR = 2; | ||||
|         private static final int VIEW_TYPE_SUBHEADER = 1; | ||||
|         private MenuItemImpl checkedItem; | ||||
|         private final ArrayList<NavigationMenuItem> items = new ArrayList<>(); | ||||
|         private boolean updateSuspended; | ||||
|  | ||||
|         public MenuItemImpl getCheckedItem() { | ||||
|             return this.checkedItem; | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.recyclerview.widget.RecyclerView.Adapter | ||||
|         public long getItemId(int i) { | ||||
|             return i; | ||||
|         } | ||||
|  | ||||
|         public void setUpdateSuspended(boolean z) { | ||||
|             this.updateSuspended = z; | ||||
|         } | ||||
|  | ||||
|         NavigationMenuAdapter() { | ||||
|             prepareMenuItems(); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.recyclerview.widget.RecyclerView.Adapter | ||||
|         public int getItemCount() { | ||||
|             return this.items.size(); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.recyclerview.widget.RecyclerView.Adapter | ||||
|         public int getItemViewType(int i) { | ||||
|             NavigationMenuItem navigationMenuItem = this.items.get(i); | ||||
|             if (navigationMenuItem instanceof NavigationMenuSeparatorItem) { | ||||
|                 return 2; | ||||
|             } | ||||
|             if (navigationMenuItem instanceof NavigationMenuHeaderItem) { | ||||
|                 return 3; | ||||
|             } | ||||
|             if (navigationMenuItem instanceof NavigationMenuTextItem) { | ||||
|                 return ((NavigationMenuTextItem) navigationMenuItem).getMenuItem().hasSubMenu() ? 1 : 0; | ||||
|             } | ||||
|             throw new RuntimeException("Unknown item type."); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.recyclerview.widget.RecyclerView.Adapter | ||||
|         public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { | ||||
|             if (i == 0) { | ||||
|                 return new NormalViewHolder(NavigationMenuPresenter.this.layoutInflater, viewGroup, NavigationMenuPresenter.this.onClickListener); | ||||
|             } | ||||
|             if (i == 1) { | ||||
|                 return new SubheaderViewHolder(NavigationMenuPresenter.this.layoutInflater, viewGroup); | ||||
|             } | ||||
|             if (i == 2) { | ||||
|                 return new SeparatorViewHolder(NavigationMenuPresenter.this.layoutInflater, viewGroup); | ||||
|             } | ||||
|             if (i != 3) { | ||||
|                 return null; | ||||
|             } | ||||
|             return new HeaderViewHolder(NavigationMenuPresenter.this.headerLayout); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.recyclerview.widget.RecyclerView.Adapter | ||||
|         public void onBindViewHolder(ViewHolder viewHolder, int i) { | ||||
|             int itemViewType = getItemViewType(i); | ||||
|             if (itemViewType != 0) { | ||||
|                 if (itemViewType != 1) { | ||||
|                     if (itemViewType != 2) { | ||||
|                         return; | ||||
|                     } | ||||
|                     NavigationMenuSeparatorItem navigationMenuSeparatorItem = (NavigationMenuSeparatorItem) this.items.get(i); | ||||
|                     viewHolder.itemView.setPadding(NavigationMenuPresenter.this.dividerInsetStart, navigationMenuSeparatorItem.getPaddingTop(), NavigationMenuPresenter.this.dividerInsetEnd, navigationMenuSeparatorItem.getPaddingBottom()); | ||||
|                     return; | ||||
|                 } | ||||
|                 TextView textView = (TextView) viewHolder.itemView; | ||||
|                 textView.setText(((NavigationMenuTextItem) this.items.get(i)).getMenuItem().getTitle()); | ||||
|                 TextViewCompat.setTextAppearance(textView, NavigationMenuPresenter.this.subheaderTextAppearance); | ||||
|                 textView.setPadding(NavigationMenuPresenter.this.subheaderInsetStart, textView.getPaddingTop(), NavigationMenuPresenter.this.subheaderInsetEnd, textView.getPaddingBottom()); | ||||
|                 if (NavigationMenuPresenter.this.subheaderColor != null) { | ||||
|                     textView.setTextColor(NavigationMenuPresenter.this.subheaderColor); | ||||
|                 } | ||||
|                 setAccessibilityDelegate(textView, i, true); | ||||
|                 return; | ||||
|             } | ||||
|             NavigationMenuItemView navigationMenuItemView = (NavigationMenuItemView) viewHolder.itemView; | ||||
|             navigationMenuItemView.setIconTintList(NavigationMenuPresenter.this.iconTintList); | ||||
|             navigationMenuItemView.setTextAppearance(NavigationMenuPresenter.this.textAppearance); | ||||
|             if (NavigationMenuPresenter.this.textColor != null) { | ||||
|                 navigationMenuItemView.setTextColor(NavigationMenuPresenter.this.textColor); | ||||
|             } | ||||
|             ViewCompat.setBackground(navigationMenuItemView, NavigationMenuPresenter.this.itemBackground != null ? NavigationMenuPresenter.this.itemBackground.getConstantState().newDrawable() : null); | ||||
|             if (NavigationMenuPresenter.this.itemForeground != null) { | ||||
|                 navigationMenuItemView.setForeground(NavigationMenuPresenter.this.itemForeground.getConstantState().newDrawable()); | ||||
|             } | ||||
|             NavigationMenuTextItem navigationMenuTextItem = (NavigationMenuTextItem) this.items.get(i); | ||||
|             navigationMenuItemView.setNeedsEmptyIcon(navigationMenuTextItem.needsEmptyIcon); | ||||
|             navigationMenuItemView.setPadding(NavigationMenuPresenter.this.itemHorizontalPadding, NavigationMenuPresenter.this.itemVerticalPadding, NavigationMenuPresenter.this.itemHorizontalPadding, NavigationMenuPresenter.this.itemVerticalPadding); | ||||
|             navigationMenuItemView.setIconPadding(NavigationMenuPresenter.this.itemIconPadding); | ||||
|             if (NavigationMenuPresenter.this.hasCustomItemIconSize) { | ||||
|                 navigationMenuItemView.setIconSize(NavigationMenuPresenter.this.itemIconSize); | ||||
|             } | ||||
|             navigationMenuItemView.setMaxLines(NavigationMenuPresenter.this.itemMaxLines); | ||||
|             navigationMenuItemView.initialize(navigationMenuTextItem.getMenuItem(), NavigationMenuPresenter.this.textAppearanceActiveBoldEnabled); | ||||
|             setAccessibilityDelegate(navigationMenuItemView, i, false); | ||||
|         } | ||||
|  | ||||
|         private void setAccessibilityDelegate(View view, final int i, final boolean z) { | ||||
|             ViewCompat.setAccessibilityDelegate(view, new AccessibilityDelegateCompat() { // from class: com.google.android.material.internal.NavigationMenuPresenter.NavigationMenuAdapter.1 | ||||
|                 @Override // androidx.core.view.AccessibilityDelegateCompat | ||||
|                 public void onInitializeAccessibilityNodeInfo(View view2, AccessibilityNodeInfoCompat accessibilityNodeInfoCompat) { | ||||
|                     super.onInitializeAccessibilityNodeInfo(view2, accessibilityNodeInfoCompat); | ||||
|                     accessibilityNodeInfoCompat.setCollectionItemInfo(AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain(NavigationMenuAdapter.this.adjustItemPositionForA11yDelegate(i), 1, 1, 1, z, view2.isSelected())); | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|  | ||||
|         /* JADX INFO: Access modifiers changed from: private */ | ||||
|         public int adjustItemPositionForA11yDelegate(int i) { | ||||
|             int i2 = i; | ||||
|             for (int i3 = 0; i3 < i; i3++) { | ||||
|                 if (NavigationMenuPresenter.this.adapter.getItemViewType(i3) == 2 || NavigationMenuPresenter.this.adapter.getItemViewType(i3) == 3) { | ||||
|                     i2--; | ||||
|                 } | ||||
|             } | ||||
|             return i2; | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.recyclerview.widget.RecyclerView.Adapter | ||||
|         public void onViewRecycled(ViewHolder viewHolder) { | ||||
|             if (viewHolder instanceof NormalViewHolder) { | ||||
|                 ((NavigationMenuItemView) viewHolder.itemView).recycle(); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public void update() { | ||||
|             prepareMenuItems(); | ||||
|             notifyDataSetChanged(); | ||||
|         } | ||||
|  | ||||
|         private void prepareMenuItems() { | ||||
|             if (this.updateSuspended) { | ||||
|                 return; | ||||
|             } | ||||
|             this.updateSuspended = true; | ||||
|             this.items.clear(); | ||||
|             this.items.add(new NavigationMenuHeaderItem()); | ||||
|             int size = NavigationMenuPresenter.this.menu.getVisibleItems().size(); | ||||
|             int i = -1; | ||||
|             boolean z = false; | ||||
|             int i2 = 0; | ||||
|             for (int i3 = 0; i3 < size; i3++) { | ||||
|                 MenuItemImpl menuItemImpl = NavigationMenuPresenter.this.menu.getVisibleItems().get(i3); | ||||
|                 if (menuItemImpl.isChecked()) { | ||||
|                     setCheckedItem(menuItemImpl); | ||||
|                 } | ||||
|                 if (menuItemImpl.isCheckable()) { | ||||
|                     menuItemImpl.setExclusiveCheckable(false); | ||||
|                 } | ||||
|                 if (menuItemImpl.hasSubMenu()) { | ||||
|                     SubMenu subMenu = menuItemImpl.getSubMenu(); | ||||
|                     if (subMenu.hasVisibleItems()) { | ||||
|                         if (i3 != 0) { | ||||
|                             this.items.add(new NavigationMenuSeparatorItem(NavigationMenuPresenter.this.paddingSeparator, 0)); | ||||
|                         } | ||||
|                         this.items.add(new NavigationMenuTextItem(menuItemImpl)); | ||||
|                         int size2 = this.items.size(); | ||||
|                         int size3 = subMenu.size(); | ||||
|                         boolean z2 = false; | ||||
|                         for (int i4 = 0; i4 < size3; i4++) { | ||||
|                             MenuItemImpl menuItemImpl2 = (MenuItemImpl) subMenu.getItem(i4); | ||||
|                             if (menuItemImpl2.isVisible()) { | ||||
|                                 if (!z2 && menuItemImpl2.getIcon() != null) { | ||||
|                                     z2 = true; | ||||
|                                 } | ||||
|                                 if (menuItemImpl2.isCheckable()) { | ||||
|                                     menuItemImpl2.setExclusiveCheckable(false); | ||||
|                                 } | ||||
|                                 if (menuItemImpl.isChecked()) { | ||||
|                                     setCheckedItem(menuItemImpl); | ||||
|                                 } | ||||
|                                 this.items.add(new NavigationMenuTextItem(menuItemImpl2)); | ||||
|                             } | ||||
|                         } | ||||
|                         if (z2) { | ||||
|                             appendTransparentIconIfMissing(size2, this.items.size()); | ||||
|                         } | ||||
|                     } | ||||
|                 } else { | ||||
|                     int groupId = menuItemImpl.getGroupId(); | ||||
|                     if (groupId != i) { | ||||
|                         i2 = this.items.size(); | ||||
|                         z = menuItemImpl.getIcon() != null; | ||||
|                         if (i3 != 0) { | ||||
|                             i2++; | ||||
|                             this.items.add(new NavigationMenuSeparatorItem(NavigationMenuPresenter.this.paddingSeparator, NavigationMenuPresenter.this.paddingSeparator)); | ||||
|                         } | ||||
|                     } else if (!z && menuItemImpl.getIcon() != null) { | ||||
|                         appendTransparentIconIfMissing(i2, this.items.size()); | ||||
|                         z = true; | ||||
|                     } | ||||
|                     NavigationMenuTextItem navigationMenuTextItem = new NavigationMenuTextItem(menuItemImpl); | ||||
|                     navigationMenuTextItem.needsEmptyIcon = z; | ||||
|                     this.items.add(navigationMenuTextItem); | ||||
|                     i = groupId; | ||||
|                 } | ||||
|             } | ||||
|             this.updateSuspended = false; | ||||
|         } | ||||
|  | ||||
|         private void appendTransparentIconIfMissing(int i, int i2) { | ||||
|             while (i < i2) { | ||||
|                 ((NavigationMenuTextItem) this.items.get(i)).needsEmptyIcon = true; | ||||
|                 i++; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public void setCheckedItem(MenuItemImpl menuItemImpl) { | ||||
|             if (this.checkedItem == menuItemImpl || !menuItemImpl.isCheckable()) { | ||||
|                 return; | ||||
|             } | ||||
|             MenuItemImpl menuItemImpl2 = this.checkedItem; | ||||
|             if (menuItemImpl2 != null) { | ||||
|                 menuItemImpl2.setChecked(false); | ||||
|             } | ||||
|             this.checkedItem = menuItemImpl; | ||||
|             menuItemImpl.setChecked(true); | ||||
|         } | ||||
|  | ||||
|         public Bundle createInstanceState() { | ||||
|             Bundle bundle = new Bundle(); | ||||
|             MenuItemImpl menuItemImpl = this.checkedItem; | ||||
|             if (menuItemImpl != null) { | ||||
|                 bundle.putInt(STATE_CHECKED_ITEM, menuItemImpl.getItemId()); | ||||
|             } | ||||
|             SparseArray<? extends Parcelable> sparseArray = new SparseArray<>(); | ||||
|             int size = this.items.size(); | ||||
|             for (int i = 0; i < size; i++) { | ||||
|                 NavigationMenuItem navigationMenuItem = this.items.get(i); | ||||
|                 if (navigationMenuItem instanceof NavigationMenuTextItem) { | ||||
|                     MenuItemImpl menuItem = ((NavigationMenuTextItem) navigationMenuItem).getMenuItem(); | ||||
|                     View actionView = menuItem != null ? menuItem.getActionView() : null; | ||||
|                     if (actionView != null) { | ||||
|                         ParcelableSparseArray parcelableSparseArray = new ParcelableSparseArray(); | ||||
|                         actionView.saveHierarchyState(parcelableSparseArray); | ||||
|                         sparseArray.put(menuItem.getItemId(), parcelableSparseArray); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             bundle.putSparseParcelableArray(STATE_ACTION_VIEWS, sparseArray); | ||||
|             return bundle; | ||||
|         } | ||||
|  | ||||
|         public void restoreInstanceState(Bundle bundle) { | ||||
|             MenuItemImpl menuItem; | ||||
|             View actionView; | ||||
|             ParcelableSparseArray parcelableSparseArray; | ||||
|             MenuItemImpl menuItem2; | ||||
|             int i = bundle.getInt(STATE_CHECKED_ITEM, 0); | ||||
|             if (i != 0) { | ||||
|                 this.updateSuspended = true; | ||||
|                 int size = this.items.size(); | ||||
|                 int i2 = 0; | ||||
|                 while (true) { | ||||
|                     if (i2 >= size) { | ||||
|                         break; | ||||
|                     } | ||||
|                     NavigationMenuItem navigationMenuItem = this.items.get(i2); | ||||
|                     if ((navigationMenuItem instanceof NavigationMenuTextItem) && (menuItem2 = ((NavigationMenuTextItem) navigationMenuItem).getMenuItem()) != null && menuItem2.getItemId() == i) { | ||||
|                         setCheckedItem(menuItem2); | ||||
|                         break; | ||||
|                     } | ||||
|                     i2++; | ||||
|                 } | ||||
|                 this.updateSuspended = false; | ||||
|                 prepareMenuItems(); | ||||
|             } | ||||
|             SparseArray sparseParcelableArray = bundle.getSparseParcelableArray(STATE_ACTION_VIEWS); | ||||
|             if (sparseParcelableArray != null) { | ||||
|                 int size2 = this.items.size(); | ||||
|                 for (int i3 = 0; i3 < size2; i3++) { | ||||
|                     NavigationMenuItem navigationMenuItem2 = this.items.get(i3); | ||||
|                     if ((navigationMenuItem2 instanceof NavigationMenuTextItem) && (menuItem = ((NavigationMenuTextItem) navigationMenuItem2).getMenuItem()) != null && (actionView = menuItem.getActionView()) != null && (parcelableSparseArray = (ParcelableSparseArray) sparseParcelableArray.get(menuItem.getItemId())) != null) { | ||||
|                         actionView.restoreHierarchyState(parcelableSparseArray); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         int getRowCount() { | ||||
|             int i = 0; | ||||
|             for (int i2 = 0; i2 < NavigationMenuPresenter.this.adapter.getItemCount(); i2++) { | ||||
|                 int itemViewType = NavigationMenuPresenter.this.adapter.getItemViewType(i2); | ||||
|                 if (itemViewType == 0 || itemViewType == 1) { | ||||
|                     i++; | ||||
|                 } | ||||
|             } | ||||
|             return i; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static class NavigationMenuTextItem implements NavigationMenuItem { | ||||
|         private final MenuItemImpl menuItem; | ||||
|         boolean needsEmptyIcon; | ||||
|  | ||||
|         public MenuItemImpl getMenuItem() { | ||||
|             return this.menuItem; | ||||
|         } | ||||
|  | ||||
|         NavigationMenuTextItem(MenuItemImpl menuItemImpl) { | ||||
|             this.menuItem = menuItemImpl; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static class NavigationMenuSeparatorItem implements NavigationMenuItem { | ||||
|         private final int paddingBottom; | ||||
|         private final int paddingTop; | ||||
|  | ||||
|         public int getPaddingBottom() { | ||||
|             return this.paddingBottom; | ||||
|         } | ||||
|  | ||||
|         public int getPaddingTop() { | ||||
|             return this.paddingTop; | ||||
|         } | ||||
|  | ||||
|         public NavigationMenuSeparatorItem(int i, int i2) { | ||||
|             this.paddingTop = i; | ||||
|             this.paddingBottom = i2; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static class NavigationMenuHeaderItem implements NavigationMenuItem { | ||||
|         NavigationMenuHeaderItem() { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private class NavigationMenuViewAccessibilityDelegate extends RecyclerViewAccessibilityDelegate { | ||||
|         NavigationMenuViewAccessibilityDelegate(RecyclerView recyclerView) { | ||||
|             super(recyclerView); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate, androidx.core.view.AccessibilityDelegateCompat | ||||
|         public void onInitializeAccessibilityNodeInfo(View view, AccessibilityNodeInfoCompat accessibilityNodeInfoCompat) { | ||||
|             super.onInitializeAccessibilityNodeInfo(view, accessibilityNodeInfoCompat); | ||||
|             accessibilityNodeInfoCompat.setCollectionInfo(AccessibilityNodeInfoCompat.CollectionInfoCompat.obtain(NavigationMenuPresenter.this.adapter.getRowCount(), 1, false)); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,33 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.util.AttributeSet; | ||||
| import androidx.appcompat.view.menu.MenuBuilder; | ||||
| import androidx.appcompat.view.menu.MenuView; | ||||
| import androidx.recyclerview.widget.LinearLayoutManager; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class NavigationMenuView extends RecyclerView implements MenuView { | ||||
|     @Override // androidx.appcompat.view.menu.MenuView | ||||
|     public int getWindowAnimations() { | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuView | ||||
|     public void initialize(MenuBuilder menuBuilder) { | ||||
|     } | ||||
|  | ||||
|     public NavigationMenuView(Context context) { | ||||
|         this(context, null); | ||||
|     } | ||||
|  | ||||
|     public NavigationMenuView(Context context, AttributeSet attributeSet) { | ||||
|         this(context, attributeSet, 0); | ||||
|     } | ||||
|  | ||||
|     public NavigationMenuView(Context context, AttributeSet attributeSet, int i) { | ||||
|         super(context, attributeSet, i); | ||||
|         setLayoutManager(new LinearLayoutManager(context, 1, false)); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,19 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.content.Context; | ||||
| import androidx.appcompat.view.menu.MenuBuilder; | ||||
| import androidx.appcompat.view.menu.MenuItemImpl; | ||||
| import androidx.appcompat.view.menu.SubMenuBuilder; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class NavigationSubMenu extends SubMenuBuilder { | ||||
|     public NavigationSubMenu(Context context, NavigationMenu navigationMenu, MenuItemImpl menuItemImpl) { | ||||
|         super(context, navigationMenu, menuItemImpl); | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.appcompat.view.menu.MenuBuilder | ||||
|     public void onItemsChanged(boolean z) { | ||||
|         super.onItemsChanged(z); | ||||
|         ((MenuBuilder) getParentMenu()).onItemsChanged(z); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,58 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.os.Parcel; | ||||
| import android.os.Parcelable; | ||||
| import android.util.SparseArray; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class ParcelableSparseArray extends SparseArray<Parcelable> implements Parcelable { | ||||
|     public static final Parcelable.Creator<ParcelableSparseArray> CREATOR = new Parcelable.ClassLoaderCreator<ParcelableSparseArray>() { // from class: com.google.android.material.internal.ParcelableSparseArray.1 | ||||
|         /* JADX WARN: Can't rename method to resolve collision */ | ||||
|         @Override // android.os.Parcelable.ClassLoaderCreator | ||||
|         public ParcelableSparseArray createFromParcel(Parcel parcel, ClassLoader classLoader) { | ||||
|             return new ParcelableSparseArray(parcel, classLoader); | ||||
|         } | ||||
|  | ||||
|         @Override // android.os.Parcelable.Creator | ||||
|         public ParcelableSparseArray createFromParcel(Parcel parcel) { | ||||
|             return new ParcelableSparseArray(parcel, null); | ||||
|         } | ||||
|  | ||||
|         @Override // android.os.Parcelable.Creator | ||||
|         public ParcelableSparseArray[] newArray(int i) { | ||||
|             return new ParcelableSparseArray[i]; | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     @Override // android.os.Parcelable | ||||
|     public int describeContents() { | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|     public ParcelableSparseArray() { | ||||
|     } | ||||
|  | ||||
|     public ParcelableSparseArray(Parcel parcel, ClassLoader classLoader) { | ||||
|         int readInt = parcel.readInt(); | ||||
|         int[] iArr = new int[readInt]; | ||||
|         parcel.readIntArray(iArr); | ||||
|         Parcelable[] readParcelableArray = parcel.readParcelableArray(classLoader); | ||||
|         for (int i = 0; i < readInt; i++) { | ||||
|             put(iArr[i], readParcelableArray[i]); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.os.Parcelable | ||||
|     public void writeToParcel(Parcel parcel, int i) { | ||||
|         int size = size(); | ||||
|         int[] iArr = new int[size]; | ||||
|         Parcelable[] parcelableArr = new Parcelable[size]; | ||||
|         for (int i2 = 0; i2 < size; i2++) { | ||||
|             iArr[i2] = keyAt(i2); | ||||
|             parcelableArr[i2] = valueAt(i2); | ||||
|         } | ||||
|         parcel.writeInt(size); | ||||
|         parcel.writeIntArray(iArr); | ||||
|         parcel.writeParcelableArray(parcelableArr, i); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,63 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.os.Parcel; | ||||
| import android.os.Parcelable; | ||||
| import android.util.SparseBooleanArray; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class ParcelableSparseBooleanArray extends SparseBooleanArray implements Parcelable { | ||||
|     public static final Parcelable.Creator<ParcelableSparseBooleanArray> CREATOR = new Parcelable.Creator<ParcelableSparseBooleanArray>() { // from class: com.google.android.material.internal.ParcelableSparseBooleanArray.1 | ||||
|         /* JADX WARN: Can't rename method to resolve collision */ | ||||
|         @Override // android.os.Parcelable.Creator | ||||
|         public ParcelableSparseBooleanArray createFromParcel(Parcel parcel) { | ||||
|             int readInt = parcel.readInt(); | ||||
|             ParcelableSparseBooleanArray parcelableSparseBooleanArray = new ParcelableSparseBooleanArray(readInt); | ||||
|             int[] iArr = new int[readInt]; | ||||
|             boolean[] zArr = new boolean[readInt]; | ||||
|             parcel.readIntArray(iArr); | ||||
|             parcel.readBooleanArray(zArr); | ||||
|             for (int i = 0; i < readInt; i++) { | ||||
|                 parcelableSparseBooleanArray.put(iArr[i], zArr[i]); | ||||
|             } | ||||
|             return parcelableSparseBooleanArray; | ||||
|         } | ||||
|  | ||||
|         /* JADX WARN: Can't rename method to resolve collision */ | ||||
|         @Override // android.os.Parcelable.Creator | ||||
|         public ParcelableSparseBooleanArray[] newArray(int i) { | ||||
|             return new ParcelableSparseBooleanArray[i]; | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     @Override // android.os.Parcelable | ||||
|     public int describeContents() { | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|     public ParcelableSparseBooleanArray() { | ||||
|     } | ||||
|  | ||||
|     public ParcelableSparseBooleanArray(int i) { | ||||
|         super(i); | ||||
|     } | ||||
|  | ||||
|     public ParcelableSparseBooleanArray(SparseBooleanArray sparseBooleanArray) { | ||||
|         super(sparseBooleanArray.size()); | ||||
|         for (int i = 0; i < sparseBooleanArray.size(); i++) { | ||||
|             put(sparseBooleanArray.keyAt(i), sparseBooleanArray.valueAt(i)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.os.Parcelable | ||||
|     public void writeToParcel(Parcel parcel, int i) { | ||||
|         int[] iArr = new int[size()]; | ||||
|         boolean[] zArr = new boolean[size()]; | ||||
|         for (int i2 = 0; i2 < size(); i2++) { | ||||
|             iArr[i2] = keyAt(i2); | ||||
|             zArr[i2] = valueAt(i2); | ||||
|         } | ||||
|         parcel.writeInt(size()); | ||||
|         parcel.writeIntArray(iArr); | ||||
|         parcel.writeBooleanArray(zArr); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,62 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.os.Parcel; | ||||
| import android.os.Parcelable; | ||||
| import android.util.SparseIntArray; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class ParcelableSparseIntArray extends SparseIntArray implements Parcelable { | ||||
|     public static final Parcelable.Creator<ParcelableSparseIntArray> CREATOR = new Parcelable.Creator<ParcelableSparseIntArray>() { // from class: com.google.android.material.internal.ParcelableSparseIntArray.1 | ||||
|         /* JADX WARN: Can't rename method to resolve collision */ | ||||
|         @Override // android.os.Parcelable.Creator | ||||
|         public ParcelableSparseIntArray createFromParcel(Parcel parcel) { | ||||
|             int readInt = parcel.readInt(); | ||||
|             ParcelableSparseIntArray parcelableSparseIntArray = new ParcelableSparseIntArray(readInt); | ||||
|             int[] iArr = new int[readInt]; | ||||
|             int[] iArr2 = new int[readInt]; | ||||
|             parcel.readIntArray(iArr); | ||||
|             parcel.readIntArray(iArr2); | ||||
|             for (int i = 0; i < readInt; i++) { | ||||
|                 parcelableSparseIntArray.put(iArr[i], iArr2[i]); | ||||
|             } | ||||
|             return parcelableSparseIntArray; | ||||
|         } | ||||
|  | ||||
|         /* JADX WARN: Can't rename method to resolve collision */ | ||||
|         @Override // android.os.Parcelable.Creator | ||||
|         public ParcelableSparseIntArray[] newArray(int i) { | ||||
|             return new ParcelableSparseIntArray[i]; | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     @Override // android.os.Parcelable | ||||
|     public int describeContents() { | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|     public ParcelableSparseIntArray() { | ||||
|     } | ||||
|  | ||||
|     public ParcelableSparseIntArray(int i) { | ||||
|         super(i); | ||||
|     } | ||||
|  | ||||
|     public ParcelableSparseIntArray(SparseIntArray sparseIntArray) { | ||||
|         for (int i = 0; i < sparseIntArray.size(); i++) { | ||||
|             put(sparseIntArray.keyAt(i), sparseIntArray.valueAt(i)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.os.Parcelable | ||||
|     public void writeToParcel(Parcel parcel, int i) { | ||||
|         int[] iArr = new int[size()]; | ||||
|         int[] iArr2 = new int[size()]; | ||||
|         for (int i2 = 0; i2 < size(); i2++) { | ||||
|             iArr[i2] = keyAt(i2); | ||||
|             iArr2[i2] = valueAt(i2); | ||||
|         } | ||||
|         parcel.writeInt(size()); | ||||
|         parcel.writeIntArray(iArr); | ||||
|         parcel.writeIntArray(iArr2); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,19 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.animation.TypeEvaluator; | ||||
| import android.graphics.Rect; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class RectEvaluator implements TypeEvaluator<Rect> { | ||||
|     private final Rect rect; | ||||
|  | ||||
|     public RectEvaluator(Rect rect) { | ||||
|         this.rect = rect; | ||||
|     } | ||||
|  | ||||
|     @Override // android.animation.TypeEvaluator | ||||
|     public Rect evaluate(float f, Rect rect, Rect rect2) { | ||||
|         this.rect.set(rect.left + ((int) ((rect2.left - rect.left) * f)), rect.top + ((int) ((rect2.top - rect.top) * f)), rect.right + ((int) ((rect2.right - rect.right) * f)), rect.bottom + ((int) ((rect2.bottom - rect.bottom) * f))); | ||||
|         return this.rect; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,21 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.animation.TimeInterpolator; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class ReversableAnimatedValueInterpolator implements TimeInterpolator { | ||||
|     private final TimeInterpolator sourceInterpolator; | ||||
|  | ||||
|     public ReversableAnimatedValueInterpolator(TimeInterpolator timeInterpolator) { | ||||
|         this.sourceInterpolator = timeInterpolator; | ||||
|     } | ||||
|  | ||||
|     public static TimeInterpolator of(boolean z, TimeInterpolator timeInterpolator) { | ||||
|         return z ? timeInterpolator : new ReversableAnimatedValueInterpolator(timeInterpolator); | ||||
|     } | ||||
|  | ||||
|     @Override // android.animation.TimeInterpolator | ||||
|     public float getInterpolation(float f) { | ||||
|         return 1.0f - this.sourceInterpolator.getInterpolation(f); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,133 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.content.res.TypedArray; | ||||
| import android.graphics.Canvas; | ||||
| import android.graphics.Rect; | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.util.AttributeSet; | ||||
| import android.view.View; | ||||
| import android.widget.FrameLayout; | ||||
| import androidx.core.view.OnApplyWindowInsetsListener; | ||||
| import androidx.core.view.ViewCompat; | ||||
| import androidx.core.view.WindowInsetsCompat; | ||||
| import com.google.android.material.R; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class ScrimInsetsFrameLayout extends FrameLayout { | ||||
|     private boolean drawBottomInsetForeground; | ||||
|     private boolean drawLeftInsetForeground; | ||||
|     private boolean drawRightInsetForeground; | ||||
|     private boolean drawTopInsetForeground; | ||||
|     Drawable insetForeground; | ||||
|     Rect insets; | ||||
|     private Rect tempRect; | ||||
|  | ||||
|     protected void onInsetsChanged(WindowInsetsCompat windowInsetsCompat) { | ||||
|     } | ||||
|  | ||||
|     public void setDrawBottomInsetForeground(boolean z) { | ||||
|         this.drawBottomInsetForeground = z; | ||||
|     } | ||||
|  | ||||
|     public void setDrawLeftInsetForeground(boolean z) { | ||||
|         this.drawLeftInsetForeground = z; | ||||
|     } | ||||
|  | ||||
|     public void setDrawRightInsetForeground(boolean z) { | ||||
|         this.drawRightInsetForeground = z; | ||||
|     } | ||||
|  | ||||
|     public void setDrawTopInsetForeground(boolean z) { | ||||
|         this.drawTopInsetForeground = z; | ||||
|     } | ||||
|  | ||||
|     public void setScrimInsetForeground(Drawable drawable) { | ||||
|         this.insetForeground = drawable; | ||||
|     } | ||||
|  | ||||
|     public ScrimInsetsFrameLayout(Context context) { | ||||
|         this(context, null); | ||||
|     } | ||||
|  | ||||
|     public ScrimInsetsFrameLayout(Context context, AttributeSet attributeSet) { | ||||
|         this(context, attributeSet, 0); | ||||
|     } | ||||
|  | ||||
|     public ScrimInsetsFrameLayout(Context context, AttributeSet attributeSet, int i) { | ||||
|         super(context, attributeSet, i); | ||||
|         this.tempRect = new Rect(); | ||||
|         this.drawTopInsetForeground = true; | ||||
|         this.drawBottomInsetForeground = true; | ||||
|         this.drawLeftInsetForeground = true; | ||||
|         this.drawRightInsetForeground = true; | ||||
|         TypedArray obtainStyledAttributes = ThemeEnforcement.obtainStyledAttributes(context, attributeSet, R.styleable.ScrimInsetsFrameLayout, i, R.style.Widget_Design_ScrimInsetsFrameLayout, new int[0]); | ||||
|         this.insetForeground = obtainStyledAttributes.getDrawable(R.styleable.ScrimInsetsFrameLayout_insetForeground); | ||||
|         obtainStyledAttributes.recycle(); | ||||
|         setWillNotDraw(true); | ||||
|         ViewCompat.setOnApplyWindowInsetsListener(this, new OnApplyWindowInsetsListener() { // from class: com.google.android.material.internal.ScrimInsetsFrameLayout.1 | ||||
|             @Override // androidx.core.view.OnApplyWindowInsetsListener | ||||
|             public WindowInsetsCompat onApplyWindowInsets(View view, WindowInsetsCompat windowInsetsCompat) { | ||||
|                 if (ScrimInsetsFrameLayout.this.insets == null) { | ||||
|                     ScrimInsetsFrameLayout.this.insets = new Rect(); | ||||
|                 } | ||||
|                 ScrimInsetsFrameLayout.this.insets.set(windowInsetsCompat.getSystemWindowInsetLeft(), windowInsetsCompat.getSystemWindowInsetTop(), windowInsetsCompat.getSystemWindowInsetRight(), windowInsetsCompat.getSystemWindowInsetBottom()); | ||||
|                 ScrimInsetsFrameLayout.this.onInsetsChanged(windowInsetsCompat); | ||||
|                 ScrimInsetsFrameLayout.this.setWillNotDraw(!windowInsetsCompat.hasSystemWindowInsets() || ScrimInsetsFrameLayout.this.insetForeground == null); | ||||
|                 ViewCompat.postInvalidateOnAnimation(ScrimInsetsFrameLayout.this); | ||||
|                 return windowInsetsCompat.consumeSystemWindowInsets(); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     public void draw(Canvas canvas) { | ||||
|         super.draw(canvas); | ||||
|         int width = getWidth(); | ||||
|         int height = getHeight(); | ||||
|         if (this.insets == null || this.insetForeground == null) { | ||||
|             return; | ||||
|         } | ||||
|         int save = canvas.save(); | ||||
|         canvas.translate(getScrollX(), getScrollY()); | ||||
|         if (this.drawTopInsetForeground) { | ||||
|             this.tempRect.set(0, 0, width, this.insets.top); | ||||
|             this.insetForeground.setBounds(this.tempRect); | ||||
|             this.insetForeground.draw(canvas); | ||||
|         } | ||||
|         if (this.drawBottomInsetForeground) { | ||||
|             this.tempRect.set(0, height - this.insets.bottom, width, height); | ||||
|             this.insetForeground.setBounds(this.tempRect); | ||||
|             this.insetForeground.draw(canvas); | ||||
|         } | ||||
|         if (this.drawLeftInsetForeground) { | ||||
|             this.tempRect.set(0, this.insets.top, this.insets.left, height - this.insets.bottom); | ||||
|             this.insetForeground.setBounds(this.tempRect); | ||||
|             this.insetForeground.draw(canvas); | ||||
|         } | ||||
|         if (this.drawRightInsetForeground) { | ||||
|             this.tempRect.set(width - this.insets.right, this.insets.top, width, height - this.insets.bottom); | ||||
|             this.insetForeground.setBounds(this.tempRect); | ||||
|             this.insetForeground.draw(canvas); | ||||
|         } | ||||
|         canvas.restoreToCount(save); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.ViewGroup, android.view.View | ||||
|     protected void onAttachedToWindow() { | ||||
|         super.onAttachedToWindow(); | ||||
|         Drawable drawable = this.insetForeground; | ||||
|         if (drawable != null) { | ||||
|             drawable.setCallback(this); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.ViewGroup, android.view.View | ||||
|     protected void onDetachedFromWindow() { | ||||
|         super.onDetachedFromWindow(); | ||||
|         Drawable drawable = this.insetForeground; | ||||
|         if (drawable != null) { | ||||
|             drawable.setCallback(null); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,89 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.animation.Animator; | ||||
| import android.animation.AnimatorListenerAdapter; | ||||
| import android.animation.ValueAnimator; | ||||
| import android.util.StateSet; | ||||
| import java.util.ArrayList; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public final class StateListAnimator { | ||||
|     private final ArrayList<Tuple> tuples = new ArrayList<>(); | ||||
|     private Tuple lastMatch = null; | ||||
|     ValueAnimator runningAnimator = null; | ||||
|     private final Animator.AnimatorListener animationListener = new AnimatorListenerAdapter() { // from class: com.google.android.material.internal.StateListAnimator.1 | ||||
|         @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener | ||||
|         public void onAnimationEnd(Animator animator) { | ||||
|             if (StateListAnimator.this.runningAnimator == animator) { | ||||
|                 StateListAnimator.this.runningAnimator = null; | ||||
|             } | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     public void addState(int[] iArr, ValueAnimator valueAnimator) { | ||||
|         Tuple tuple = new Tuple(iArr, valueAnimator); | ||||
|         valueAnimator.addListener(this.animationListener); | ||||
|         this.tuples.add(tuple); | ||||
|     } | ||||
|  | ||||
|     public void setState(int[] iArr) { | ||||
|         Tuple tuple; | ||||
|         int size = this.tuples.size(); | ||||
|         int i = 0; | ||||
|         while (true) { | ||||
|             if (i >= size) { | ||||
|                 tuple = null; | ||||
|                 break; | ||||
|             } | ||||
|             tuple = this.tuples.get(i); | ||||
|             if (StateSet.stateSetMatches(tuple.specs, iArr)) { | ||||
|                 break; | ||||
|             } else { | ||||
|                 i++; | ||||
|             } | ||||
|         } | ||||
|         Tuple tuple2 = this.lastMatch; | ||||
|         if (tuple == tuple2) { | ||||
|             return; | ||||
|         } | ||||
|         if (tuple2 != null) { | ||||
|             cancel(); | ||||
|         } | ||||
|         this.lastMatch = tuple; | ||||
|         if (tuple != null) { | ||||
|             start(tuple); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void start(Tuple tuple) { | ||||
|         ValueAnimator valueAnimator = tuple.animator; | ||||
|         this.runningAnimator = valueAnimator; | ||||
|         valueAnimator.start(); | ||||
|     } | ||||
|  | ||||
|     private void cancel() { | ||||
|         ValueAnimator valueAnimator = this.runningAnimator; | ||||
|         if (valueAnimator != null) { | ||||
|             valueAnimator.cancel(); | ||||
|             this.runningAnimator = null; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void jumpToCurrentState() { | ||||
|         ValueAnimator valueAnimator = this.runningAnimator; | ||||
|         if (valueAnimator != null) { | ||||
|             valueAnimator.end(); | ||||
|             this.runningAnimator = null; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     static class Tuple { | ||||
|         final ValueAnimator animator; | ||||
|         final int[] specs; | ||||
|  | ||||
|         Tuple(int[] iArr, ValueAnimator valueAnimator) { | ||||
|             this.specs = iArr; | ||||
|             this.animator = valueAnimator; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,179 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.os.Build; | ||||
| import android.text.Layout; | ||||
| import android.text.StaticLayout; | ||||
| import android.text.TextDirectionHeuristic; | ||||
| import android.text.TextDirectionHeuristics; | ||||
| import android.text.TextPaint; | ||||
| import android.text.TextUtils; | ||||
| import androidx.core.util.Preconditions; | ||||
| import java.lang.reflect.Constructor; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| final class StaticLayoutBuilderCompat { | ||||
|     static final int DEFAULT_HYPHENATION_FREQUENCY; | ||||
|     static final float DEFAULT_LINE_SPACING_ADD = 0.0f; | ||||
|     static final float DEFAULT_LINE_SPACING_MULTIPLIER = 1.0f; | ||||
|     private static final String TEXT_DIRS_CLASS = "android.text.TextDirectionHeuristics"; | ||||
|     private static final String TEXT_DIR_CLASS = "android.text.TextDirectionHeuristic"; | ||||
|     private static final String TEXT_DIR_CLASS_LTR = "LTR"; | ||||
|     private static final String TEXT_DIR_CLASS_RTL = "RTL"; | ||||
|     private static Constructor<StaticLayout> constructor; | ||||
|     private static boolean initialized; | ||||
|     private static Object textDirection; | ||||
|     private int end; | ||||
|     private boolean isRtl; | ||||
|     private final TextPaint paint; | ||||
|     private CharSequence source; | ||||
|     private StaticLayoutBuilderConfigurer staticLayoutBuilderConfigurer; | ||||
|     private final int width; | ||||
|     private int start = 0; | ||||
|     private Layout.Alignment alignment = Layout.Alignment.ALIGN_NORMAL; | ||||
|     private int maxLines = Integer.MAX_VALUE; | ||||
|     private float lineSpacingAdd = 0.0f; | ||||
|     private float lineSpacingMultiplier = 1.0f; | ||||
|     private int hyphenationFrequency = DEFAULT_HYPHENATION_FREQUENCY; | ||||
|     private boolean includePad = true; | ||||
|     private TextUtils.TruncateAt ellipsize = null; | ||||
|  | ||||
|     static { | ||||
|         DEFAULT_HYPHENATION_FREQUENCY = Build.VERSION.SDK_INT >= 23 ? 1 : 0; | ||||
|     } | ||||
|  | ||||
|     public StaticLayoutBuilderCompat setAlignment(Layout.Alignment alignment) { | ||||
|         this.alignment = alignment; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public StaticLayoutBuilderCompat setEllipsize(TextUtils.TruncateAt truncateAt) { | ||||
|         this.ellipsize = truncateAt; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public StaticLayoutBuilderCompat setEnd(int i) { | ||||
|         this.end = i; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public StaticLayoutBuilderCompat setHyphenationFrequency(int i) { | ||||
|         this.hyphenationFrequency = i; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public StaticLayoutBuilderCompat setIncludePad(boolean z) { | ||||
|         this.includePad = z; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public StaticLayoutBuilderCompat setIsRtl(boolean z) { | ||||
|         this.isRtl = z; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public StaticLayoutBuilderCompat setLineSpacing(float f, float f2) { | ||||
|         this.lineSpacingAdd = f; | ||||
|         this.lineSpacingMultiplier = f2; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public StaticLayoutBuilderCompat setMaxLines(int i) { | ||||
|         this.maxLines = i; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public StaticLayoutBuilderCompat setStart(int i) { | ||||
|         this.start = i; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public StaticLayoutBuilderCompat setStaticLayoutBuilderConfigurer(StaticLayoutBuilderConfigurer staticLayoutBuilderConfigurer) { | ||||
|         this.staticLayoutBuilderConfigurer = staticLayoutBuilderConfigurer; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     private StaticLayoutBuilderCompat(CharSequence charSequence, TextPaint textPaint, int i) { | ||||
|         this.source = charSequence; | ||||
|         this.paint = textPaint; | ||||
|         this.width = i; | ||||
|         this.end = charSequence.length(); | ||||
|     } | ||||
|  | ||||
|     public static StaticLayoutBuilderCompat obtain(CharSequence charSequence, TextPaint textPaint, int i) { | ||||
|         return new StaticLayoutBuilderCompat(charSequence, textPaint, i); | ||||
|     } | ||||
|  | ||||
|     public StaticLayout build() throws StaticLayoutBuilderCompatException { | ||||
|         StaticLayout.Builder obtain; | ||||
|         TextDirectionHeuristic textDirectionHeuristic; | ||||
|         StaticLayout build; | ||||
|         if (this.source == null) { | ||||
|             this.source = ""; | ||||
|         } | ||||
|         int max = Math.max(0, this.width); | ||||
|         CharSequence charSequence = this.source; | ||||
|         if (this.maxLines == 1) { | ||||
|             charSequence = TextUtils.ellipsize(charSequence, this.paint, max, this.ellipsize); | ||||
|         } | ||||
|         this.end = Math.min(charSequence.length(), this.end); | ||||
|         if (Build.VERSION.SDK_INT >= 23) { | ||||
|             if (this.isRtl && this.maxLines == 1) { | ||||
|                 this.alignment = Layout.Alignment.ALIGN_OPPOSITE; | ||||
|             } | ||||
|             obtain = StaticLayout.Builder.obtain(charSequence, this.start, this.end, this.paint, max); | ||||
|             obtain.setAlignment(this.alignment); | ||||
|             obtain.setIncludePad(this.includePad); | ||||
|             if (this.isRtl) { | ||||
|                 textDirectionHeuristic = TextDirectionHeuristics.RTL; | ||||
|             } else { | ||||
|                 textDirectionHeuristic = TextDirectionHeuristics.LTR; | ||||
|             } | ||||
|             obtain.setTextDirection(textDirectionHeuristic); | ||||
|             TextUtils.TruncateAt truncateAt = this.ellipsize; | ||||
|             if (truncateAt != null) { | ||||
|                 obtain.setEllipsize(truncateAt); | ||||
|             } | ||||
|             obtain.setMaxLines(this.maxLines); | ||||
|             float f = this.lineSpacingAdd; | ||||
|             if (f != 0.0f || this.lineSpacingMultiplier != 1.0f) { | ||||
|                 obtain.setLineSpacing(f, this.lineSpacingMultiplier); | ||||
|             } | ||||
|             if (this.maxLines > 1) { | ||||
|                 obtain.setHyphenationFrequency(this.hyphenationFrequency); | ||||
|             } | ||||
|             StaticLayoutBuilderConfigurer staticLayoutBuilderConfigurer = this.staticLayoutBuilderConfigurer; | ||||
|             if (staticLayoutBuilderConfigurer != null) { | ||||
|                 staticLayoutBuilderConfigurer.configure(obtain); | ||||
|             } | ||||
|             build = obtain.build(); | ||||
|             return build; | ||||
|         } | ||||
|         createConstructorWithReflection(); | ||||
|         try { | ||||
|             return (StaticLayout) ((Constructor) Preconditions.checkNotNull(constructor)).newInstance(charSequence, Integer.valueOf(this.start), Integer.valueOf(this.end), this.paint, Integer.valueOf(max), this.alignment, Preconditions.checkNotNull(textDirection), Float.valueOf(1.0f), Float.valueOf(0.0f), Boolean.valueOf(this.includePad), null, Integer.valueOf(max), Integer.valueOf(this.maxLines)); | ||||
|         } catch (Exception e) { | ||||
|             throw new StaticLayoutBuilderCompatException(e); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void createConstructorWithReflection() throws StaticLayoutBuilderCompatException { | ||||
|         if (initialized) { | ||||
|             return; | ||||
|         } | ||||
|         try { | ||||
|             textDirection = this.isRtl && Build.VERSION.SDK_INT >= 23 ? TextDirectionHeuristics.RTL : TextDirectionHeuristics.LTR; | ||||
|             Constructor<StaticLayout> declaredConstructor = StaticLayout.class.getDeclaredConstructor(CharSequence.class, Integer.TYPE, Integer.TYPE, TextPaint.class, Integer.TYPE, Layout.Alignment.class, TextDirectionHeuristic.class, Float.TYPE, Float.TYPE, Boolean.TYPE, TextUtils.TruncateAt.class, Integer.TYPE, Integer.TYPE); | ||||
|             constructor = declaredConstructor; | ||||
|             declaredConstructor.setAccessible(true); | ||||
|             initialized = true; | ||||
|         } catch (Exception e) { | ||||
|             throw new StaticLayoutBuilderCompatException(e); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     static class StaticLayoutBuilderCompatException extends Exception { | ||||
|         StaticLayoutBuilderCompatException(Throwable th) { | ||||
|             super("Error thrown initializing StaticLayout " + th.getMessage(), th); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,8 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.text.StaticLayout; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public interface StaticLayoutBuilderConfigurer { | ||||
|     void configure(StaticLayout.Builder builder); | ||||
| } | ||||
| @@ -0,0 +1,136 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.graphics.Typeface; | ||||
| import android.text.TextPaint; | ||||
| import com.google.android.material.resources.TextAppearance; | ||||
| import com.google.android.material.resources.TextAppearanceFontCallback; | ||||
| import java.lang.ref.WeakReference; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class TextDrawableHelper { | ||||
|     private TextAppearance textAppearance; | ||||
|     private float textHeight; | ||||
|     private float textWidth; | ||||
|     private final TextPaint textPaint = new TextPaint(1); | ||||
|     private final TextAppearanceFontCallback fontCallback = new TextAppearanceFontCallback() { // from class: com.google.android.material.internal.TextDrawableHelper.1 | ||||
|         @Override // com.google.android.material.resources.TextAppearanceFontCallback | ||||
|         public void onFontRetrieved(Typeface typeface, boolean z) { | ||||
|             if (z) { | ||||
|                 return; | ||||
|             } | ||||
|             TextDrawableHelper.this.textSizeDirty = true; | ||||
|             TextDrawableDelegate textDrawableDelegate = (TextDrawableDelegate) TextDrawableHelper.this.delegate.get(); | ||||
|             if (textDrawableDelegate != null) { | ||||
|                 textDrawableDelegate.onTextSizeChange(); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         @Override // com.google.android.material.resources.TextAppearanceFontCallback | ||||
|         public void onFontRetrievalFailed(int i) { | ||||
|             TextDrawableHelper.this.textSizeDirty = true; | ||||
|             TextDrawableDelegate textDrawableDelegate = (TextDrawableDelegate) TextDrawableHelper.this.delegate.get(); | ||||
|             if (textDrawableDelegate != null) { | ||||
|                 textDrawableDelegate.onTextSizeChange(); | ||||
|             } | ||||
|         } | ||||
|     }; | ||||
|     private boolean textSizeDirty = true; | ||||
|     private WeakReference<TextDrawableDelegate> delegate = new WeakReference<>(null); | ||||
|  | ||||
|     public interface TextDrawableDelegate { | ||||
|         int[] getState(); | ||||
|  | ||||
|         boolean onStateChange(int[] iArr); | ||||
|  | ||||
|         void onTextSizeChange(); | ||||
|     } | ||||
|  | ||||
|     public TextAppearance getTextAppearance() { | ||||
|         return this.textAppearance; | ||||
|     } | ||||
|  | ||||
|     public TextPaint getTextPaint() { | ||||
|         return this.textPaint; | ||||
|     } | ||||
|  | ||||
|     public boolean isTextWidthDirty() { | ||||
|         return this.textSizeDirty; | ||||
|     } | ||||
|  | ||||
|     public void setTextSizeDirty(boolean z) { | ||||
|         this.textSizeDirty = z; | ||||
|     } | ||||
|  | ||||
|     public void setTextWidthDirty(boolean z) { | ||||
|         this.textSizeDirty = z; | ||||
|     } | ||||
|  | ||||
|     public TextDrawableHelper(TextDrawableDelegate textDrawableDelegate) { | ||||
|         setDelegate(textDrawableDelegate); | ||||
|     } | ||||
|  | ||||
|     public void setDelegate(TextDrawableDelegate textDrawableDelegate) { | ||||
|         this.delegate = new WeakReference<>(textDrawableDelegate); | ||||
|     } | ||||
|  | ||||
|     private void refreshTextDimens(String str) { | ||||
|         this.textWidth = calculateTextWidth(str); | ||||
|         this.textHeight = calculateTextHeight(str); | ||||
|         this.textSizeDirty = false; | ||||
|     } | ||||
|  | ||||
|     public float getTextWidth(String str) { | ||||
|         if (!this.textSizeDirty) { | ||||
|             return this.textWidth; | ||||
|         } | ||||
|         refreshTextDimens(str); | ||||
|         return this.textWidth; | ||||
|     } | ||||
|  | ||||
|     private float calculateTextWidth(CharSequence charSequence) { | ||||
|         if (charSequence == null) { | ||||
|             return 0.0f; | ||||
|         } | ||||
|         return this.textPaint.measureText(charSequence, 0, charSequence.length()); | ||||
|     } | ||||
|  | ||||
|     public float getTextHeight(String str) { | ||||
|         if (!this.textSizeDirty) { | ||||
|             return this.textHeight; | ||||
|         } | ||||
|         refreshTextDimens(str); | ||||
|         return this.textHeight; | ||||
|     } | ||||
|  | ||||
|     private float calculateTextHeight(String str) { | ||||
|         if (str == null) { | ||||
|             return 0.0f; | ||||
|         } | ||||
|         return Math.abs(this.textPaint.getFontMetrics().ascent); | ||||
|     } | ||||
|  | ||||
|     public void setTextAppearance(TextAppearance textAppearance, Context context) { | ||||
|         if (this.textAppearance != textAppearance) { | ||||
|             this.textAppearance = textAppearance; | ||||
|             if (textAppearance != null) { | ||||
|                 textAppearance.updateMeasureState(context, this.textPaint, this.fontCallback); | ||||
|                 TextDrawableDelegate textDrawableDelegate = this.delegate.get(); | ||||
|                 if (textDrawableDelegate != null) { | ||||
|                     this.textPaint.drawableState = textDrawableDelegate.getState(); | ||||
|                 } | ||||
|                 textAppearance.updateDrawState(context, this.textPaint, this.fontCallback); | ||||
|                 this.textSizeDirty = true; | ||||
|             } | ||||
|             TextDrawableDelegate textDrawableDelegate2 = this.delegate.get(); | ||||
|             if (textDrawableDelegate2 != null) { | ||||
|                 textDrawableDelegate2.onTextSizeChange(); | ||||
|                 textDrawableDelegate2.onStateChange(textDrawableDelegate2.getState()); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void updateTextPaintDrawState(Context context) { | ||||
|         this.textAppearance.updateDrawState(context, this.textPaint, this.fontCallback); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,55 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.animation.Animator; | ||||
| import android.animation.ValueAnimator; | ||||
| import android.view.ViewGroup; | ||||
| import android.widget.TextView; | ||||
| import androidx.transition.Transition; | ||||
| import androidx.transition.TransitionValues; | ||||
| import java.util.Map; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class TextScale extends Transition { | ||||
|     private static final String PROPNAME_SCALE = "android:textscale:scale"; | ||||
|  | ||||
|     @Override // androidx.transition.Transition | ||||
|     public void captureStartValues(TransitionValues transitionValues) { | ||||
|         captureValues(transitionValues); | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.transition.Transition | ||||
|     public void captureEndValues(TransitionValues transitionValues) { | ||||
|         captureValues(transitionValues); | ||||
|     } | ||||
|  | ||||
|     private void captureValues(TransitionValues transitionValues) { | ||||
|         if (transitionValues.view instanceof TextView) { | ||||
|             transitionValues.values.put(PROPNAME_SCALE, Float.valueOf(((TextView) transitionValues.view).getScaleX())); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.transition.Transition | ||||
|     public Animator createAnimator(ViewGroup viewGroup, TransitionValues transitionValues, TransitionValues transitionValues2) { | ||||
|         if (transitionValues == null || transitionValues2 == null || !(transitionValues.view instanceof TextView) || !(transitionValues2.view instanceof TextView)) { | ||||
|             return null; | ||||
|         } | ||||
|         final TextView textView = (TextView) transitionValues2.view; | ||||
|         Map<String, Object> map = transitionValues.values; | ||||
|         Map<String, Object> map2 = transitionValues2.values; | ||||
|         float floatValue = map.get(PROPNAME_SCALE) != null ? ((Float) map.get(PROPNAME_SCALE)).floatValue() : 1.0f; | ||||
|         float floatValue2 = map2.get(PROPNAME_SCALE) != null ? ((Float) map2.get(PROPNAME_SCALE)).floatValue() : 1.0f; | ||||
|         if (floatValue == floatValue2) { | ||||
|             return null; | ||||
|         } | ||||
|         ValueAnimator ofFloat = ValueAnimator.ofFloat(floatValue, floatValue2); | ||||
|         ofFloat.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { // from class: com.google.android.material.internal.TextScale.1 | ||||
|             @Override // android.animation.ValueAnimator.AnimatorUpdateListener | ||||
|             public void onAnimationUpdate(ValueAnimator valueAnimator) { | ||||
|                 float floatValue3 = ((Float) valueAnimator.getAnimatedValue()).floatValue(); | ||||
|                 textView.setScaleX(floatValue3); | ||||
|                 textView.setScaleY(floatValue3); | ||||
|             } | ||||
|         }); | ||||
|         return ofFloat; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,19 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.text.Editable; | ||||
| import android.text.TextWatcher; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class TextWatcherAdapter implements TextWatcher { | ||||
|     @Override // android.text.TextWatcher | ||||
|     public void afterTextChanged(Editable editable) { | ||||
|     } | ||||
|  | ||||
|     @Override // android.text.TextWatcher | ||||
|     public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) { | ||||
|     } | ||||
|  | ||||
|     @Override // android.text.TextWatcher | ||||
|     public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) { | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,114 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.content.res.TypedArray; | ||||
| import android.util.AttributeSet; | ||||
| import android.util.TypedValue; | ||||
| import androidx.appcompat.widget.TintTypedArray; | ||||
| import com.google.android.material.R; | ||||
| import com.google.android.material.resources.MaterialAttributes; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public final class ThemeEnforcement { | ||||
|     private static final String APPCOMPAT_THEME_NAME = "Theme.AppCompat"; | ||||
|     private static final String MATERIAL_THEME_NAME = "Theme.MaterialComponents"; | ||||
|     private static final int[] APPCOMPAT_CHECK_ATTRS = {R.attr.colorPrimary}; | ||||
|     private static final int[] MATERIAL_CHECK_ATTRS = {R.attr.colorPrimaryVariant}; | ||||
|  | ||||
|     private ThemeEnforcement() { | ||||
|     } | ||||
|  | ||||
|     public static TypedArray obtainStyledAttributes(Context context, AttributeSet attributeSet, int[] iArr, int i, int i2, int... iArr2) { | ||||
|         checkCompatibleTheme(context, attributeSet, i, i2); | ||||
|         checkTextAppearance(context, attributeSet, iArr, i, i2, iArr2); | ||||
|         return context.obtainStyledAttributes(attributeSet, iArr, i, i2); | ||||
|     } | ||||
|  | ||||
|     public static TintTypedArray obtainTintedStyledAttributes(Context context, AttributeSet attributeSet, int[] iArr, int i, int i2, int... iArr2) { | ||||
|         checkCompatibleTheme(context, attributeSet, i, i2); | ||||
|         checkTextAppearance(context, attributeSet, iArr, i, i2, iArr2); | ||||
|         return TintTypedArray.obtainStyledAttributes(context, attributeSet, iArr, i, i2); | ||||
|     } | ||||
|  | ||||
|     private static void checkCompatibleTheme(Context context, AttributeSet attributeSet, int i, int i2) { | ||||
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, R.styleable.ThemeEnforcement, i, i2); | ||||
|         boolean z = obtainStyledAttributes.getBoolean(R.styleable.ThemeEnforcement_enforceMaterialTheme, false); | ||||
|         obtainStyledAttributes.recycle(); | ||||
|         if (z) { | ||||
|             TypedValue typedValue = new TypedValue(); | ||||
|             if (!context.getTheme().resolveAttribute(R.attr.isMaterialTheme, typedValue, true) || (typedValue.type == 18 && typedValue.data == 0)) { | ||||
|                 checkMaterialTheme(context); | ||||
|             } | ||||
|         } | ||||
|         checkAppCompatTheme(context); | ||||
|     } | ||||
|  | ||||
|     private static void checkTextAppearance(Context context, AttributeSet attributeSet, int[] iArr, int i, int i2, int... iArr2) { | ||||
|         boolean z; | ||||
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, R.styleable.ThemeEnforcement, i, i2); | ||||
|         if (!obtainStyledAttributes.getBoolean(R.styleable.ThemeEnforcement_enforceTextAppearance, false)) { | ||||
|             obtainStyledAttributes.recycle(); | ||||
|             return; | ||||
|         } | ||||
|         if (iArr2 == null || iArr2.length == 0) { | ||||
|             z = obtainStyledAttributes.getResourceId(R.styleable.ThemeEnforcement_android_textAppearance, -1) != -1; | ||||
|         } else { | ||||
|             z = isCustomTextAppearanceValid(context, attributeSet, iArr, i, i2, iArr2); | ||||
|         } | ||||
|         obtainStyledAttributes.recycle(); | ||||
|         if (!z) { | ||||
|             throw new IllegalArgumentException("This component requires that you specify a valid TextAppearance attribute. Update your app theme to inherit from Theme.MaterialComponents (or a descendant)."); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static boolean isCustomTextAppearanceValid(Context context, AttributeSet attributeSet, int[] iArr, int i, int i2, int... iArr2) { | ||||
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, iArr, i, i2); | ||||
|         for (int i3 : iArr2) { | ||||
|             if (obtainStyledAttributes.getResourceId(i3, -1) == -1) { | ||||
|                 obtainStyledAttributes.recycle(); | ||||
|                 return false; | ||||
|             } | ||||
|         } | ||||
|         obtainStyledAttributes.recycle(); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     public static void checkAppCompatTheme(Context context) { | ||||
|         checkTheme(context, APPCOMPAT_CHECK_ATTRS, APPCOMPAT_THEME_NAME); | ||||
|     } | ||||
|  | ||||
|     public static void checkMaterialTheme(Context context) { | ||||
|         checkTheme(context, MATERIAL_CHECK_ATTRS, MATERIAL_THEME_NAME); | ||||
|     } | ||||
|  | ||||
|     public static boolean isAppCompatTheme(Context context) { | ||||
|         return isTheme(context, APPCOMPAT_CHECK_ATTRS); | ||||
|     } | ||||
|  | ||||
|     public static boolean isMaterialTheme(Context context) { | ||||
|         return isTheme(context, MATERIAL_CHECK_ATTRS); | ||||
|     } | ||||
|  | ||||
|     public static boolean isMaterial3Theme(Context context) { | ||||
|         return MaterialAttributes.resolveBoolean(context, R.attr.isMaterial3Theme, false); | ||||
|     } | ||||
|  | ||||
|     private static boolean isTheme(Context context, int[] iArr) { | ||||
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(iArr); | ||||
|         for (int i = 0; i < iArr.length; i++) { | ||||
|             if (!obtainStyledAttributes.hasValue(i)) { | ||||
|                 obtainStyledAttributes.recycle(); | ||||
|                 return false; | ||||
|             } | ||||
|         } | ||||
|         obtainStyledAttributes.recycle(); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     private static void checkTheme(Context context, int[] iArr, String str) { | ||||
|         if (isTheme(context, iArr)) { | ||||
|             return; | ||||
|         } | ||||
|         throw new IllegalArgumentException("The style on this component requires your app theme to be " + str + " (or a descendant)."); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,129 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.text.TextUtils; | ||||
| import android.view.View; | ||||
| import android.widget.ImageButton; | ||||
| import android.widget.ImageView; | ||||
| import android.widget.TextView; | ||||
| import androidx.appcompat.view.menu.ActionMenuItemView; | ||||
| import androidx.appcompat.widget.ActionMenuView; | ||||
| import androidx.appcompat.widget.Toolbar; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collections; | ||||
| import java.util.Comparator; | ||||
| import java.util.List; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class ToolbarUtils { | ||||
|     private static final Comparator<View> VIEW_TOP_COMPARATOR = new Comparator<View>() { // from class: com.google.android.material.internal.ToolbarUtils.1 | ||||
|         @Override // java.util.Comparator | ||||
|         public int compare(View view, View view2) { | ||||
|             return view.getTop() - view2.getTop(); | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     private ToolbarUtils() { | ||||
|     } | ||||
|  | ||||
|     public static TextView getTitleTextView(Toolbar toolbar) { | ||||
|         List<TextView> textViewsWithText = getTextViewsWithText(toolbar, toolbar.getTitle()); | ||||
|         if (textViewsWithText.isEmpty()) { | ||||
|             return null; | ||||
|         } | ||||
|         return (TextView) Collections.min(textViewsWithText, VIEW_TOP_COMPARATOR); | ||||
|     } | ||||
|  | ||||
|     public static TextView getSubtitleTextView(Toolbar toolbar) { | ||||
|         List<TextView> textViewsWithText = getTextViewsWithText(toolbar, toolbar.getSubtitle()); | ||||
|         if (textViewsWithText.isEmpty()) { | ||||
|             return null; | ||||
|         } | ||||
|         return (TextView) Collections.max(textViewsWithText, VIEW_TOP_COMPARATOR); | ||||
|     } | ||||
|  | ||||
|     private static List<TextView> getTextViewsWithText(Toolbar toolbar, CharSequence charSequence) { | ||||
|         ArrayList arrayList = new ArrayList(); | ||||
|         for (int i = 0; i < toolbar.getChildCount(); i++) { | ||||
|             View childAt = toolbar.getChildAt(i); | ||||
|             if (childAt instanceof TextView) { | ||||
|                 TextView textView = (TextView) childAt; | ||||
|                 if (TextUtils.equals(textView.getText(), charSequence)) { | ||||
|                     arrayList.add(textView); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return arrayList; | ||||
|     } | ||||
|  | ||||
|     public static ImageView getLogoImageView(Toolbar toolbar) { | ||||
|         return getImageView(toolbar, toolbar.getLogo()); | ||||
|     } | ||||
|  | ||||
|     private static ImageView getImageView(Toolbar toolbar, Drawable drawable) { | ||||
|         ImageView imageView; | ||||
|         Drawable drawable2; | ||||
|         if (drawable == null) { | ||||
|             return null; | ||||
|         } | ||||
|         for (int i = 0; i < toolbar.getChildCount(); i++) { | ||||
|             View childAt = toolbar.getChildAt(i); | ||||
|             if ((childAt instanceof ImageView) && (drawable2 = (imageView = (ImageView) childAt).getDrawable()) != null && drawable2.getConstantState() != null && drawable2.getConstantState().equals(drawable.getConstantState())) { | ||||
|                 return imageView; | ||||
|             } | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     public static View getSecondaryActionMenuItemView(Toolbar toolbar) { | ||||
|         ActionMenuView actionMenuView = getActionMenuView(toolbar); | ||||
|         if (actionMenuView == null || actionMenuView.getChildCount() <= 1) { | ||||
|             return null; | ||||
|         } | ||||
|         return actionMenuView.getChildAt(0); | ||||
|     } | ||||
|  | ||||
|     public static ActionMenuView getActionMenuView(Toolbar toolbar) { | ||||
|         for (int i = 0; i < toolbar.getChildCount(); i++) { | ||||
|             View childAt = toolbar.getChildAt(i); | ||||
|             if (childAt instanceof ActionMenuView) { | ||||
|                 return (ActionMenuView) childAt; | ||||
|             } | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     public static ImageButton getNavigationIconButton(Toolbar toolbar) { | ||||
|         Drawable navigationIcon = toolbar.getNavigationIcon(); | ||||
|         if (navigationIcon == null) { | ||||
|             return null; | ||||
|         } | ||||
|         for (int i = 0; i < toolbar.getChildCount(); i++) { | ||||
|             View childAt = toolbar.getChildAt(i); | ||||
|             if (childAt instanceof ImageButton) { | ||||
|                 ImageButton imageButton = (ImageButton) childAt; | ||||
|                 if (imageButton.getDrawable() == navigationIcon) { | ||||
|                     return imageButton; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     public static ActionMenuItemView getActionMenuItemView(Toolbar toolbar, int i) { | ||||
|         ActionMenuView actionMenuView = getActionMenuView(toolbar); | ||||
|         if (actionMenuView == null) { | ||||
|             return null; | ||||
|         } | ||||
|         for (int i2 = 0; i2 < actionMenuView.getChildCount(); i2++) { | ||||
|             View childAt = actionMenuView.getChildAt(i2); | ||||
|             if (childAt instanceof ActionMenuItemView) { | ||||
|                 ActionMenuItemView actionMenuItemView = (ActionMenuItemView) childAt; | ||||
|                 if (actionMenuItemView.getItemData().getItemId() == i) { | ||||
|                     return actionMenuItemView; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,38 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.util.AttributeSet; | ||||
| import android.view.MotionEvent; | ||||
| import android.view.View; | ||||
| import android.widget.FrameLayout; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class TouchObserverFrameLayout extends FrameLayout { | ||||
|     private View.OnTouchListener onTouchListener; | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     public void setOnTouchListener(View.OnTouchListener onTouchListener) { | ||||
|         this.onTouchListener = onTouchListener; | ||||
|     } | ||||
|  | ||||
|     public TouchObserverFrameLayout(Context context) { | ||||
|         super(context); | ||||
|     } | ||||
|  | ||||
|     public TouchObserverFrameLayout(Context context, AttributeSet attributeSet) { | ||||
|         super(context, attributeSet); | ||||
|     } | ||||
|  | ||||
|     public TouchObserverFrameLayout(Context context, AttributeSet attributeSet, int i) { | ||||
|         super(context, attributeSet, i); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.ViewGroup | ||||
|     public boolean onInterceptTouchEvent(MotionEvent motionEvent) { | ||||
|         View.OnTouchListener onTouchListener = this.onTouchListener; | ||||
|         if (onTouchListener != null) { | ||||
|             onTouchListener.onTouch(this, motionEvent); | ||||
|         } | ||||
|         return super.onInterceptTouchEvent(motionEvent); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,26 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| class ViewGroupOverlayApi14 extends ViewOverlayApi14 implements ViewGroupOverlayImpl { | ||||
|     ViewGroupOverlayApi14(Context context, ViewGroup viewGroup, View view) { | ||||
|         super(context, viewGroup, view); | ||||
|     } | ||||
|  | ||||
|     static ViewGroupOverlayApi14 createFrom(ViewGroup viewGroup) { | ||||
|         return (ViewGroupOverlayApi14) ViewOverlayApi14.createFrom(viewGroup); | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.internal.ViewGroupOverlayImpl | ||||
|     public void add(View view) { | ||||
|         this.overlayViewGroup.add(view); | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.internal.ViewGroupOverlayImpl | ||||
|     public void remove(View view) { | ||||
|         this.overlayViewGroup.remove(view); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,35 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.view.ViewGroupOverlay; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| class ViewGroupOverlayApi18 implements ViewGroupOverlayImpl { | ||||
|     private final ViewGroupOverlay viewGroupOverlay; | ||||
|  | ||||
|     ViewGroupOverlayApi18(ViewGroup viewGroup) { | ||||
|         this.viewGroupOverlay = viewGroup.getOverlay(); | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.internal.ViewOverlayImpl | ||||
|     public void add(Drawable drawable) { | ||||
|         this.viewGroupOverlay.add(drawable); | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.internal.ViewOverlayImpl | ||||
|     public void remove(Drawable drawable) { | ||||
|         this.viewGroupOverlay.remove(drawable); | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.internal.ViewGroupOverlayImpl | ||||
|     public void add(View view) { | ||||
|         this.viewGroupOverlay.add(view); | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.internal.ViewGroupOverlayImpl | ||||
|     public void remove(View view) { | ||||
|         this.viewGroupOverlay.remove(view); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,10 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.view.View; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| interface ViewGroupOverlayImpl extends ViewOverlayImpl { | ||||
|     void add(View view); | ||||
|  | ||||
|     void remove(View view); | ||||
| } | ||||
| @@ -0,0 +1,217 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.graphics.Canvas; | ||||
| import android.graphics.Rect; | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.view.MotionEvent; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.view.ViewParent; | ||||
| import androidx.core.view.ViewCompat; | ||||
| import java.lang.reflect.InvocationTargetException; | ||||
| import java.lang.reflect.Method; | ||||
| import java.util.ArrayList; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| class ViewOverlayApi14 implements ViewOverlayImpl { | ||||
|     protected OverlayViewGroup overlayViewGroup; | ||||
|  | ||||
|     ViewOverlayApi14(Context context, ViewGroup viewGroup, View view) { | ||||
|         this.overlayViewGroup = new OverlayViewGroup(context, viewGroup, view, this); | ||||
|     } | ||||
|  | ||||
|     static ViewOverlayApi14 createFrom(View view) { | ||||
|         ViewGroup contentView = ViewUtils.getContentView(view); | ||||
|         if (contentView == null) { | ||||
|             return null; | ||||
|         } | ||||
|         int childCount = contentView.getChildCount(); | ||||
|         for (int i = 0; i < childCount; i++) { | ||||
|             View childAt = contentView.getChildAt(i); | ||||
|             if (childAt instanceof OverlayViewGroup) { | ||||
|                 return ((OverlayViewGroup) childAt).viewOverlay; | ||||
|             } | ||||
|         } | ||||
|         return new ViewGroupOverlayApi14(contentView.getContext(), contentView, view); | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.internal.ViewOverlayImpl | ||||
|     public void add(Drawable drawable) { | ||||
|         this.overlayViewGroup.add(drawable); | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.internal.ViewOverlayImpl | ||||
|     public void remove(Drawable drawable) { | ||||
|         this.overlayViewGroup.remove(drawable); | ||||
|     } | ||||
|  | ||||
|     static class OverlayViewGroup extends ViewGroup { | ||||
|         static Method invalidateChildInParentFastMethod; | ||||
|         private boolean disposed; | ||||
|         ArrayList<Drawable> drawables; | ||||
|         ViewGroup hostView; | ||||
|         View requestingView; | ||||
|         ViewOverlayApi14 viewOverlay; | ||||
|  | ||||
|         @Override // android.view.ViewGroup, android.view.View | ||||
|         public boolean dispatchTouchEvent(MotionEvent motionEvent) { | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         @Override // android.view.ViewGroup, android.view.View | ||||
|         protected void onLayout(boolean z, int i, int i2, int i3, int i4) { | ||||
|         } | ||||
|  | ||||
|         static { | ||||
|             try { | ||||
|                 invalidateChildInParentFastMethod = ViewGroup.class.getDeclaredMethod("invalidateChildInParentFast", Integer.TYPE, Integer.TYPE, Rect.class); | ||||
|             } catch (NoSuchMethodException unused) { | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         OverlayViewGroup(Context context, ViewGroup viewGroup, View view, ViewOverlayApi14 viewOverlayApi14) { | ||||
|             super(context); | ||||
|             this.drawables = null; | ||||
|             this.hostView = viewGroup; | ||||
|             this.requestingView = view; | ||||
|             setRight(viewGroup.getWidth()); | ||||
|             setBottom(viewGroup.getHeight()); | ||||
|             viewGroup.addView(this); | ||||
|             this.viewOverlay = viewOverlayApi14; | ||||
|         } | ||||
|  | ||||
|         public void add(Drawable drawable) { | ||||
|             assertNotDisposed(); | ||||
|             if (this.drawables == null) { | ||||
|                 this.drawables = new ArrayList<>(); | ||||
|             } | ||||
|             if (this.drawables.contains(drawable)) { | ||||
|                 return; | ||||
|             } | ||||
|             this.drawables.add(drawable); | ||||
|             invalidate(drawable.getBounds()); | ||||
|             drawable.setCallback(this); | ||||
|         } | ||||
|  | ||||
|         public void remove(Drawable drawable) { | ||||
|             ArrayList<Drawable> arrayList = this.drawables; | ||||
|             if (arrayList != null) { | ||||
|                 arrayList.remove(drawable); | ||||
|                 invalidate(drawable.getBounds()); | ||||
|                 drawable.setCallback(null); | ||||
|                 disposeIfEmpty(); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         @Override // android.view.View | ||||
|         protected boolean verifyDrawable(Drawable drawable) { | ||||
|             ArrayList<Drawable> arrayList; | ||||
|             return super.verifyDrawable(drawable) || ((arrayList = this.drawables) != null && arrayList.contains(drawable)); | ||||
|         } | ||||
|  | ||||
|         public void add(View view) { | ||||
|             assertNotDisposed(); | ||||
|             if (view.getParent() instanceof ViewGroup) { | ||||
|                 ViewGroup viewGroup = (ViewGroup) view.getParent(); | ||||
|                 if (viewGroup != this.hostView && viewGroup.getParent() != null && ViewCompat.isAttachedToWindow(viewGroup)) { | ||||
|                     int[] iArr = new int[2]; | ||||
|                     int[] iArr2 = new int[2]; | ||||
|                     viewGroup.getLocationOnScreen(iArr); | ||||
|                     this.hostView.getLocationOnScreen(iArr2); | ||||
|                     ViewCompat.offsetLeftAndRight(view, iArr[0] - iArr2[0]); | ||||
|                     ViewCompat.offsetTopAndBottom(view, iArr[1] - iArr2[1]); | ||||
|                 } | ||||
|                 viewGroup.removeView(view); | ||||
|                 if (view.getParent() != null) { | ||||
|                     viewGroup.removeView(view); | ||||
|                 } | ||||
|             } | ||||
|             super.addView(view); | ||||
|         } | ||||
|  | ||||
|         public void remove(View view) { | ||||
|             super.removeView(view); | ||||
|             disposeIfEmpty(); | ||||
|         } | ||||
|  | ||||
|         private void assertNotDisposed() { | ||||
|             if (this.disposed) { | ||||
|                 throw new IllegalStateException("This overlay was disposed already. Please use a new one via ViewGroupUtils.getOverlay()"); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private void disposeIfEmpty() { | ||||
|             if (getChildCount() == 0) { | ||||
|                 ArrayList<Drawable> arrayList = this.drawables; | ||||
|                 if (arrayList == null || arrayList.size() == 0) { | ||||
|                     this.disposed = true; | ||||
|                     this.hostView.removeView(this); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         @Override // android.view.View, android.graphics.drawable.Drawable.Callback | ||||
|         public void invalidateDrawable(Drawable drawable) { | ||||
|             invalidate(drawable.getBounds()); | ||||
|         } | ||||
|  | ||||
|         @Override // android.view.ViewGroup, android.view.View | ||||
|         protected void dispatchDraw(Canvas canvas) { | ||||
|             this.hostView.getLocationOnScreen(new int[2]); | ||||
|             this.requestingView.getLocationOnScreen(new int[2]); | ||||
|             canvas.translate(r0[0] - r1[0], r0[1] - r1[1]); | ||||
|             canvas.clipRect(new Rect(0, 0, this.requestingView.getWidth(), this.requestingView.getHeight())); | ||||
|             super.dispatchDraw(canvas); | ||||
|             ArrayList<Drawable> arrayList = this.drawables; | ||||
|             int size = arrayList == null ? 0 : arrayList.size(); | ||||
|             for (int i = 0; i < size; i++) { | ||||
|                 this.drawables.get(i).draw(canvas); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private void getOffset(int[] iArr) { | ||||
|             int[] iArr2 = new int[2]; | ||||
|             int[] iArr3 = new int[2]; | ||||
|             this.hostView.getLocationOnScreen(iArr2); | ||||
|             this.requestingView.getLocationOnScreen(iArr3); | ||||
|             iArr[0] = iArr3[0] - iArr2[0]; | ||||
|             iArr[1] = iArr3[1] - iArr2[1]; | ||||
|         } | ||||
|  | ||||
|         protected ViewParent invalidateChildInParentFast(int i, int i2, Rect rect) { | ||||
|             if (this.hostView == null || invalidateChildInParentFastMethod == null) { | ||||
|                 return null; | ||||
|             } | ||||
|             try { | ||||
|                 getOffset(new int[2]); | ||||
|                 invalidateChildInParentFastMethod.invoke(this.hostView, Integer.valueOf(i), Integer.valueOf(i2), rect); | ||||
|                 return null; | ||||
|             } catch (IllegalAccessException e) { | ||||
|                 e.printStackTrace(); | ||||
|                 return null; | ||||
|             } catch (InvocationTargetException e2) { | ||||
|                 e2.printStackTrace(); | ||||
|                 return null; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         @Override // android.view.ViewGroup, android.view.ViewParent | ||||
|         public ViewParent invalidateChildInParent(int[] iArr, Rect rect) { | ||||
|             if (this.hostView == null) { | ||||
|                 return null; | ||||
|             } | ||||
|             rect.offset(iArr[0], iArr[1]); | ||||
|             if (this.hostView != null) { | ||||
|                 iArr[0] = 0; | ||||
|                 iArr[1] = 0; | ||||
|                 int[] iArr2 = new int[2]; | ||||
|                 getOffset(iArr2); | ||||
|                 rect.offset(iArr2[0], iArr2[1]); | ||||
|                 return super.invalidateChildInParent(iArr, rect); | ||||
|             } | ||||
|             invalidate(rect); | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,24 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.view.View; | ||||
| import android.view.ViewOverlay; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| class ViewOverlayApi18 implements ViewOverlayImpl { | ||||
|     private final ViewOverlay viewOverlay; | ||||
|  | ||||
|     ViewOverlayApi18(View view) { | ||||
|         this.viewOverlay = view.getOverlay(); | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.internal.ViewOverlayImpl | ||||
|     public void add(Drawable drawable) { | ||||
|         this.viewOverlay.add(drawable); | ||||
|     } | ||||
|  | ||||
|     @Override // com.google.android.material.internal.ViewOverlayImpl | ||||
|     public void remove(Drawable drawable) { | ||||
|         this.viewOverlay.remove(drawable); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,10 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.graphics.drawable.Drawable; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public interface ViewOverlayImpl { | ||||
|     void add(Drawable drawable); | ||||
|  | ||||
|     void remove(Drawable drawable); | ||||
| } | ||||
| @@ -0,0 +1,299 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.content.res.ColorStateList; | ||||
| import android.content.res.TypedArray; | ||||
| import android.graphics.PorterDuff; | ||||
| import android.graphics.Rect; | ||||
| import android.util.AttributeSet; | ||||
| import android.util.TypedValue; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.view.ViewParent; | ||||
| import android.view.ViewTreeObserver; | ||||
| import android.view.inputmethod.InputMethodManager; | ||||
| import androidx.core.content.ContextCompat; | ||||
| import androidx.core.view.ViewCompat; | ||||
| import androidx.core.view.WindowInsetsCompat; | ||||
| import androidx.core.view.WindowInsetsControllerCompat; | ||||
| import com.google.android.material.R; | ||||
| import com.google.android.material.drawable.DrawableUtils; | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class ViewUtils { | ||||
|     public static final int EDGE_TO_EDGE_FLAGS = 768; | ||||
|  | ||||
|     public interface OnApplyWindowInsetsListener { | ||||
|         WindowInsetsCompat onApplyWindowInsets(View view, WindowInsetsCompat windowInsetsCompat, RelativePadding relativePadding); | ||||
|     } | ||||
|  | ||||
|     private ViewUtils() { | ||||
|     } | ||||
|  | ||||
|     public static void showKeyboard(View view) { | ||||
|         showKeyboard(view, true); | ||||
|     } | ||||
|  | ||||
|     public static void showKeyboard(View view, boolean z) { | ||||
|         WindowInsetsControllerCompat windowInsetsController; | ||||
|         if (z && (windowInsetsController = ViewCompat.getWindowInsetsController(view)) != null) { | ||||
|             windowInsetsController.show(WindowInsetsCompat.Type.ime()); | ||||
|         } else { | ||||
|             getInputMethodManager(view).showSoftInput(view, 1); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void requestFocusAndShowKeyboard(View view) { | ||||
|         requestFocusAndShowKeyboard(view, true); | ||||
|     } | ||||
|  | ||||
|     public static void requestFocusAndShowKeyboard(final View view, final boolean z) { | ||||
|         view.requestFocus(); | ||||
|         view.post(new Runnable() { // from class: com.google.android.material.internal.ViewUtils$$ExternalSyntheticLambda0 | ||||
|             @Override // java.lang.Runnable | ||||
|             public final void run() { | ||||
|                 ViewUtils.showKeyboard(view, z); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     public static void hideKeyboard(View view) { | ||||
|         hideKeyboard(view, true); | ||||
|     } | ||||
|  | ||||
|     public static void hideKeyboard(View view, boolean z) { | ||||
|         WindowInsetsControllerCompat windowInsetsController; | ||||
|         if (z && (windowInsetsController = ViewCompat.getWindowInsetsController(view)) != null) { | ||||
|             windowInsetsController.hide(WindowInsetsCompat.Type.ime()); | ||||
|             return; | ||||
|         } | ||||
|         InputMethodManager inputMethodManager = getInputMethodManager(view); | ||||
|         if (inputMethodManager != null) { | ||||
|             inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static InputMethodManager getInputMethodManager(View view) { | ||||
|         return (InputMethodManager) ContextCompat.getSystemService(view.getContext(), InputMethodManager.class); | ||||
|     } | ||||
|  | ||||
|     public static void setBoundsFromRect(View view, Rect rect) { | ||||
|         view.setLeft(rect.left); | ||||
|         view.setTop(rect.top); | ||||
|         view.setRight(rect.right); | ||||
|         view.setBottom(rect.bottom); | ||||
|     } | ||||
|  | ||||
|     public static Rect calculateRectFromBounds(View view) { | ||||
|         return calculateRectFromBounds(view, 0); | ||||
|     } | ||||
|  | ||||
|     public static Rect calculateRectFromBounds(View view, int i) { | ||||
|         return new Rect(view.getLeft(), view.getTop() + i, view.getRight(), view.getBottom() + i); | ||||
|     } | ||||
|  | ||||
|     public static Rect calculateOffsetRectFromBounds(View view, View view2) { | ||||
|         int[] iArr = new int[2]; | ||||
|         view2.getLocationOnScreen(iArr); | ||||
|         int i = iArr[0]; | ||||
|         int i2 = iArr[1]; | ||||
|         int[] iArr2 = new int[2]; | ||||
|         view.getLocationOnScreen(iArr2); | ||||
|         int i3 = i - iArr2[0]; | ||||
|         int i4 = i2 - iArr2[1]; | ||||
|         return new Rect(i3, i4, view2.getWidth() + i3, view2.getHeight() + i4); | ||||
|     } | ||||
|  | ||||
|     public static List<View> getChildren(View view) { | ||||
|         ArrayList arrayList = new ArrayList(); | ||||
|         if (view instanceof ViewGroup) { | ||||
|             ViewGroup viewGroup = (ViewGroup) view; | ||||
|             for (int i = 0; i < viewGroup.getChildCount(); i++) { | ||||
|                 arrayList.add(viewGroup.getChildAt(i)); | ||||
|             } | ||||
|         } | ||||
|         return arrayList; | ||||
|     } | ||||
|  | ||||
|     public static PorterDuff.Mode parseTintMode(int i, PorterDuff.Mode mode) { | ||||
|         if (i == 3) { | ||||
|             return PorterDuff.Mode.SRC_OVER; | ||||
|         } | ||||
|         if (i == 5) { | ||||
|             return PorterDuff.Mode.SRC_IN; | ||||
|         } | ||||
|         if (i == 9) { | ||||
|             return PorterDuff.Mode.SRC_ATOP; | ||||
|         } | ||||
|         switch (i) { | ||||
|             case 14: | ||||
|                 return PorterDuff.Mode.MULTIPLY; | ||||
|             case 15: | ||||
|                 return PorterDuff.Mode.SCREEN; | ||||
|             case 16: | ||||
|                 return PorterDuff.Mode.ADD; | ||||
|             default: | ||||
|                 return mode; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static boolean isLayoutRtl(View view) { | ||||
|         return ViewCompat.getLayoutDirection(view) == 1; | ||||
|     } | ||||
|  | ||||
|     public static float dpToPx(Context context, int i) { | ||||
|         return TypedValue.applyDimension(1, i, context.getResources().getDisplayMetrics()); | ||||
|     } | ||||
|  | ||||
|     public static class RelativePadding { | ||||
|         public int bottom; | ||||
|         public int end; | ||||
|         public int start; | ||||
|         public int top; | ||||
|  | ||||
|         public RelativePadding(int i, int i2, int i3, int i4) { | ||||
|             this.start = i; | ||||
|             this.top = i2; | ||||
|             this.end = i3; | ||||
|             this.bottom = i4; | ||||
|         } | ||||
|  | ||||
|         public RelativePadding(RelativePadding relativePadding) { | ||||
|             this.start = relativePadding.start; | ||||
|             this.top = relativePadding.top; | ||||
|             this.end = relativePadding.end; | ||||
|             this.bottom = relativePadding.bottom; | ||||
|         } | ||||
|  | ||||
|         public void applyToView(View view) { | ||||
|             ViewCompat.setPaddingRelative(view, this.start, this.top, this.end, this.bottom); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void doOnApplyWindowInsets(View view, AttributeSet attributeSet, int i, int i2) { | ||||
|         doOnApplyWindowInsets(view, attributeSet, i, i2, null); | ||||
|     } | ||||
|  | ||||
|     public static void doOnApplyWindowInsets(View view, AttributeSet attributeSet, int i, int i2, final OnApplyWindowInsetsListener onApplyWindowInsetsListener) { | ||||
|         TypedArray obtainStyledAttributes = view.getContext().obtainStyledAttributes(attributeSet, R.styleable.Insets, i, i2); | ||||
|         final boolean z = obtainStyledAttributes.getBoolean(R.styleable.Insets_paddingBottomSystemWindowInsets, false); | ||||
|         final boolean z2 = obtainStyledAttributes.getBoolean(R.styleable.Insets_paddingLeftSystemWindowInsets, false); | ||||
|         final boolean z3 = obtainStyledAttributes.getBoolean(R.styleable.Insets_paddingRightSystemWindowInsets, false); | ||||
|         obtainStyledAttributes.recycle(); | ||||
|         doOnApplyWindowInsets(view, new OnApplyWindowInsetsListener() { // from class: com.google.android.material.internal.ViewUtils.1 | ||||
|             @Override // com.google.android.material.internal.ViewUtils.OnApplyWindowInsetsListener | ||||
|             public WindowInsetsCompat onApplyWindowInsets(View view2, WindowInsetsCompat windowInsetsCompat, RelativePadding relativePadding) { | ||||
|                 if (z) { | ||||
|                     relativePadding.bottom += windowInsetsCompat.getSystemWindowInsetBottom(); | ||||
|                 } | ||||
|                 boolean isLayoutRtl = ViewUtils.isLayoutRtl(view2); | ||||
|                 if (z2) { | ||||
|                     if (isLayoutRtl) { | ||||
|                         relativePadding.end += windowInsetsCompat.getSystemWindowInsetLeft(); | ||||
|                     } else { | ||||
|                         relativePadding.start += windowInsetsCompat.getSystemWindowInsetLeft(); | ||||
|                     } | ||||
|                 } | ||||
|                 if (z3) { | ||||
|                     if (isLayoutRtl) { | ||||
|                         relativePadding.start += windowInsetsCompat.getSystemWindowInsetRight(); | ||||
|                     } else { | ||||
|                         relativePadding.end += windowInsetsCompat.getSystemWindowInsetRight(); | ||||
|                     } | ||||
|                 } | ||||
|                 relativePadding.applyToView(view2); | ||||
|                 OnApplyWindowInsetsListener onApplyWindowInsetsListener2 = onApplyWindowInsetsListener; | ||||
|                 return onApplyWindowInsetsListener2 != null ? onApplyWindowInsetsListener2.onApplyWindowInsets(view2, windowInsetsCompat, relativePadding) : windowInsetsCompat; | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     public static void doOnApplyWindowInsets(View view, final OnApplyWindowInsetsListener onApplyWindowInsetsListener) { | ||||
|         final RelativePadding relativePadding = new RelativePadding(ViewCompat.getPaddingStart(view), view.getPaddingTop(), ViewCompat.getPaddingEnd(view), view.getPaddingBottom()); | ||||
|         ViewCompat.setOnApplyWindowInsetsListener(view, new androidx.core.view.OnApplyWindowInsetsListener() { // from class: com.google.android.material.internal.ViewUtils.2 | ||||
|             @Override // androidx.core.view.OnApplyWindowInsetsListener | ||||
|             public WindowInsetsCompat onApplyWindowInsets(View view2, WindowInsetsCompat windowInsetsCompat) { | ||||
|                 return OnApplyWindowInsetsListener.this.onApplyWindowInsets(view2, windowInsetsCompat, new RelativePadding(relativePadding)); | ||||
|             } | ||||
|         }); | ||||
|         requestApplyInsetsWhenAttached(view); | ||||
|     } | ||||
|  | ||||
|     public static void requestApplyInsetsWhenAttached(View view) { | ||||
|         if (ViewCompat.isAttachedToWindow(view)) { | ||||
|             ViewCompat.requestApplyInsets(view); | ||||
|         } else { | ||||
|             view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { // from class: com.google.android.material.internal.ViewUtils.3 | ||||
|                 @Override // android.view.View.OnAttachStateChangeListener | ||||
|                 public void onViewDetachedFromWindow(View view2) { | ||||
|                 } | ||||
|  | ||||
|                 @Override // android.view.View.OnAttachStateChangeListener | ||||
|                 public void onViewAttachedToWindow(View view2) { | ||||
|                     view2.removeOnAttachStateChangeListener(this); | ||||
|                     ViewCompat.requestApplyInsets(view2); | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static float getParentAbsoluteElevation(View view) { | ||||
|         float f = 0.0f; | ||||
|         for (ViewParent parent = view.getParent(); parent instanceof View; parent = parent.getParent()) { | ||||
|             f += ViewCompat.getElevation((View) parent); | ||||
|         } | ||||
|         return f; | ||||
|     } | ||||
|  | ||||
|     public static ViewOverlayImpl getOverlay(View view) { | ||||
|         if (view == null) { | ||||
|             return null; | ||||
|         } | ||||
|         return new ViewOverlayApi18(view); | ||||
|     } | ||||
|  | ||||
|     public static ViewGroup getContentView(View view) { | ||||
|         if (view == null) { | ||||
|             return null; | ||||
|         } | ||||
|         View rootView = view.getRootView(); | ||||
|         ViewGroup viewGroup = (ViewGroup) rootView.findViewById(android.R.id.content); | ||||
|         if (viewGroup != null) { | ||||
|             return viewGroup; | ||||
|         } | ||||
|         if (rootView == view || !(rootView instanceof ViewGroup)) { | ||||
|             return null; | ||||
|         } | ||||
|         return (ViewGroup) rootView; | ||||
|     } | ||||
|  | ||||
|     public static ViewOverlayImpl getContentViewOverlay(View view) { | ||||
|         return getOverlay(getContentView(view)); | ||||
|     } | ||||
|  | ||||
|     public static void addOnGlobalLayoutListener(View view, ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener) { | ||||
|         if (view != null) { | ||||
|             view.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void removeOnGlobalLayoutListener(View view, ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener) { | ||||
|         if (view != null) { | ||||
|             removeOnGlobalLayoutListener(view.getViewTreeObserver(), onGlobalLayoutListener); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void removeOnGlobalLayoutListener(ViewTreeObserver viewTreeObserver, ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener) { | ||||
|         viewTreeObserver.removeOnGlobalLayoutListener(onGlobalLayoutListener); | ||||
|     } | ||||
|  | ||||
|     public static Integer getBackgroundColor(View view) { | ||||
|         ColorStateList colorStateListOrNull = DrawableUtils.getColorStateListOrNull(view.getBackground()); | ||||
|         if (colorStateListOrNull != null) { | ||||
|             return Integer.valueOf(colorStateListOrNull.getDefaultColor()); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,39 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.util.AttributeSet; | ||||
| import android.widget.ImageButton; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class VisibilityAwareImageButton extends ImageButton { | ||||
|     private int userSetVisibility; | ||||
|  | ||||
|     public final int getUserSetVisibility() { | ||||
|         return this.userSetVisibility; | ||||
|     } | ||||
|  | ||||
|     public VisibilityAwareImageButton(Context context) { | ||||
|         this(context, null); | ||||
|     } | ||||
|  | ||||
|     public VisibilityAwareImageButton(Context context, AttributeSet attributeSet) { | ||||
|         this(context, attributeSet, 0); | ||||
|     } | ||||
|  | ||||
|     public VisibilityAwareImageButton(Context context, AttributeSet attributeSet, int i) { | ||||
|         super(context, attributeSet, i); | ||||
|         this.userSetVisibility = getVisibility(); | ||||
|     } | ||||
|  | ||||
|     @Override // android.widget.ImageView, android.view.View | ||||
|     public void setVisibility(int i) { | ||||
|         internalSetVisibility(i, true); | ||||
|     } | ||||
|  | ||||
|     public final void internalSetVisibility(int i, boolean z) { | ||||
|         super.setVisibility(i); | ||||
|         if (z) { | ||||
|             this.userSetVisibility = i; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,90 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.graphics.Point; | ||||
| import android.graphics.Rect; | ||||
| import android.os.Build; | ||||
| import android.util.Log; | ||||
| import android.view.Display; | ||||
| import android.view.WindowManager; | ||||
| import android.view.WindowMetrics; | ||||
| import java.lang.reflect.InvocationTargetException; | ||||
| import java.lang.reflect.Method; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class WindowUtils { | ||||
|     private static final String TAG = "WindowUtils"; | ||||
|  | ||||
|     private WindowUtils() { | ||||
|     } | ||||
|  | ||||
|     public static Rect getCurrentWindowBounds(Context context) { | ||||
|         WindowManager windowManager = (WindowManager) context.getSystemService("window"); | ||||
|         if (Build.VERSION.SDK_INT >= 30) { | ||||
|             return Api30Impl.getCurrentWindowBounds(windowManager); | ||||
|         } | ||||
|         return Api17Impl.getCurrentWindowBounds(windowManager); | ||||
|     } | ||||
|  | ||||
|     private static class Api30Impl { | ||||
|         private Api30Impl() { | ||||
|         } | ||||
|  | ||||
|         static Rect getCurrentWindowBounds(WindowManager windowManager) { | ||||
|             WindowMetrics currentWindowMetrics; | ||||
|             Rect bounds; | ||||
|             currentWindowMetrics = windowManager.getCurrentWindowMetrics(); | ||||
|             bounds = currentWindowMetrics.getBounds(); | ||||
|             return bounds; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static class Api17Impl { | ||||
|         private Api17Impl() { | ||||
|         } | ||||
|  | ||||
|         static Rect getCurrentWindowBounds(WindowManager windowManager) { | ||||
|             Display defaultDisplay = windowManager.getDefaultDisplay(); | ||||
|             Point point = new Point(); | ||||
|             defaultDisplay.getRealSize(point); | ||||
|             Rect rect = new Rect(); | ||||
|             rect.right = point.x; | ||||
|             rect.bottom = point.y; | ||||
|             return rect; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static class Api14Impl { | ||||
|         private Api14Impl() { | ||||
|         } | ||||
|  | ||||
|         static Rect getCurrentWindowBounds(WindowManager windowManager) { | ||||
|             Display defaultDisplay = windowManager.getDefaultDisplay(); | ||||
|             Point realSizeForDisplay = getRealSizeForDisplay(defaultDisplay); | ||||
|             Rect rect = new Rect(); | ||||
|             if (realSizeForDisplay.x == 0 || realSizeForDisplay.y == 0) { | ||||
|                 defaultDisplay.getRectSize(rect); | ||||
|             } else { | ||||
|                 rect.right = realSizeForDisplay.x; | ||||
|                 rect.bottom = realSizeForDisplay.y; | ||||
|             } | ||||
|             return rect; | ||||
|         } | ||||
|  | ||||
|         private static Point getRealSizeForDisplay(Display display) { | ||||
|             Point point = new Point(); | ||||
|             try { | ||||
|                 Method declaredMethod = Display.class.getDeclaredMethod("getRealSize", Point.class); | ||||
|                 declaredMethod.setAccessible(true); | ||||
|                 declaredMethod.invoke(display, point); | ||||
|             } catch (IllegalAccessException e) { | ||||
|                 Log.w(WindowUtils.TAG, e); | ||||
|             } catch (NoSuchMethodException e2) { | ||||
|                 Log.w(WindowUtils.TAG, e2); | ||||
|             } catch (InvocationTargetException e3) { | ||||
|                 Log.w(WindowUtils.TAG, e3); | ||||
|             } | ||||
|             return point; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,2 @@ | ||||
| package com.google.android.material.internal; | ||||
|  | ||||
		Reference in New Issue
	
	Block a user