861 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			861 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package com.google.android.material.button;
 | |
| 
 | |
| import android.R;
 | |
| import android.content.Context;
 | |
| import android.content.res.ColorStateList;
 | |
| import android.graphics.PorterDuff;
 | |
| import android.graphics.Rect;
 | |
| import android.graphics.drawable.Drawable;
 | |
| import android.os.Build;
 | |
| import android.os.Parcel;
 | |
| import android.os.Parcelable;
 | |
| import android.text.Layout;
 | |
| import android.text.TextPaint;
 | |
| import android.text.TextUtils;
 | |
| import android.util.AttributeSet;
 | |
| import android.util.Log;
 | |
| import android.view.accessibility.AccessibilityEvent;
 | |
| import android.view.accessibility.AccessibilityNodeInfo;
 | |
| import android.view.inspector.PropertyMapper;
 | |
| import android.view.inspector.PropertyReader;
 | |
| import android.widget.Button;
 | |
| import android.widget.Checkable;
 | |
| import android.widget.CompoundButton;
 | |
| import androidx.appcompat.content.res.AppCompatResources;
 | |
| import androidx.appcompat.widget.AppCompatButton;
 | |
| import androidx.core.graphics.drawable.DrawableCompat;
 | |
| import androidx.core.view.GravityCompat;
 | |
| import androidx.core.view.ViewCompat;
 | |
| import androidx.core.widget.TextViewCompat;
 | |
| import androidx.customview.view.AbsSavedState;
 | |
| import androidx.tracing.Trace$$ExternalSyntheticApiModelOutline0;
 | |
| import com.google.android.material.shape.MaterialShapeUtils;
 | |
| import com.google.android.material.shape.ShapeAppearanceModel;
 | |
| import com.google.android.material.shape.Shapeable;
 | |
| import java.lang.annotation.Retention;
 | |
| import java.lang.annotation.RetentionPolicy;
 | |
| import java.util.Iterator;
 | |
| import java.util.LinkedHashSet;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class MaterialButton extends AppCompatButton implements Checkable, Shapeable {
 | |
|     private static final int[] CHECKABLE_STATE_SET = {R.attr.state_checkable};
 | |
|     private static final int[] CHECKED_STATE_SET = {R.attr.state_checked};
 | |
|     private static final int DEF_STYLE_RES = com.google.android.material.R.style.Widget_MaterialComponents_Button;
 | |
|     public static final int ICON_GRAVITY_END = 3;
 | |
|     public static final int ICON_GRAVITY_START = 1;
 | |
|     public static final int ICON_GRAVITY_TEXT_END = 4;
 | |
|     public static final int ICON_GRAVITY_TEXT_START = 2;
 | |
|     public static final int ICON_GRAVITY_TEXT_TOP = 32;
 | |
|     public static final int ICON_GRAVITY_TOP = 16;
 | |
|     private static final String LOG_TAG = "MaterialButton";
 | |
|     private String accessibilityClassName;
 | |
|     private boolean broadcasting;
 | |
|     private boolean checked;
 | |
|     private Drawable icon;
 | |
|     private int iconGravity;
 | |
|     private int iconLeft;
 | |
|     private int iconPadding;
 | |
|     private int iconSize;
 | |
|     private ColorStateList iconTint;
 | |
|     private PorterDuff.Mode iconTintMode;
 | |
|     private int iconTop;
 | |
|     private final MaterialButtonHelper materialButtonHelper;
 | |
|     private final LinkedHashSet<OnCheckedChangeListener> onCheckedChangeListeners;
 | |
|     private OnPressedChangeListener onPressedChangeListenerInternal;
 | |
| 
 | |
|     @Retention(RetentionPolicy.SOURCE)
 | |
|     public @interface IconGravity {
 | |
|     }
 | |
| 
 | |
|     public interface OnCheckedChangeListener {
 | |
|         void onCheckedChanged(MaterialButton materialButton, boolean z);
 | |
|     }
 | |
| 
 | |
|     interface OnPressedChangeListener {
 | |
|         void onPressedChanged(MaterialButton materialButton, boolean z);
 | |
|     }
 | |
| 
 | |
|     private boolean isIconEnd() {
 | |
|         int i = this.iconGravity;
 | |
|         return i == 3 || i == 4;
 | |
|     }
 | |
| 
 | |
|     private boolean isIconStart() {
 | |
|         int i = this.iconGravity;
 | |
|         return i == 1 || i == 2;
 | |
|     }
 | |
| 
 | |
|     private boolean isIconTop() {
 | |
|         int i = this.iconGravity;
 | |
|         return i == 16 || i == 32;
 | |
|     }
 | |
| 
 | |
|     public Drawable getIcon() {
 | |
|         return this.icon;
 | |
|     }
 | |
| 
 | |
|     public int getIconGravity() {
 | |
|         return this.iconGravity;
 | |
|     }
 | |
| 
 | |
|     public int getIconPadding() {
 | |
|         return this.iconPadding;
 | |
|     }
 | |
| 
 | |
|     public int getIconSize() {
 | |
|         return this.iconSize;
 | |
|     }
 | |
| 
 | |
|     public ColorStateList getIconTint() {
 | |
|         return this.iconTint;
 | |
|     }
 | |
| 
 | |
|     public PorterDuff.Mode getIconTintMode() {
 | |
|         return this.iconTintMode;
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.Checkable
 | |
|     public boolean isChecked() {
 | |
|         return this.checked;
 | |
|     }
 | |
| 
 | |
|     void setA11yClassName(String str) {
 | |
|         this.accessibilityClassName = str;
 | |
|     }
 | |
| 
 | |
|     void setOnPressedChangeListenerInternal(OnPressedChangeListener onPressedChangeListener) {
 | |
|         this.onPressedChangeListenerInternal = onPressedChangeListener;
 | |
|     }
 | |
| 
 | |
|     public final class InspectionCompanion implements android.view.inspector.InspectionCompanion<MaterialButton> {
 | |
|         private int mIconPaddingId;
 | |
|         private boolean mPropertiesMapped = false;
 | |
| 
 | |
|         @Override // android.view.inspector.InspectionCompanion
 | |
|         public void mapProperties(PropertyMapper propertyMapper) {
 | |
|             int mapInt;
 | |
|             mapInt = propertyMapper.mapInt("iconPadding", com.google.android.material.R.attr.iconPadding);
 | |
|             this.mIconPaddingId = mapInt;
 | |
|             this.mPropertiesMapped = true;
 | |
|         }
 | |
| 
 | |
|         @Override // android.view.inspector.InspectionCompanion
 | |
|         public void readProperties(MaterialButton materialButton, PropertyReader propertyReader) {
 | |
|             if (!this.mPropertiesMapped) {
 | |
|                 throw Trace$$ExternalSyntheticApiModelOutline0.m176m();
 | |
|             }
 | |
|             propertyReader.readInt(this.mIconPaddingId, materialButton.getIconPadding());
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public MaterialButton(Context context) {
 | |
|         this(context, null);
 | |
|     }
 | |
| 
 | |
|     public MaterialButton(Context context, AttributeSet attributeSet) {
 | |
|         this(context, attributeSet, com.google.android.material.R.attr.materialButtonStyle);
 | |
|     }
 | |
| 
 | |
|     /* JADX WARN: Illegal instructions before constructor call */
 | |
|     /*
 | |
|         Code decompiled incorrectly, please refer to instructions dump.
 | |
|         To view partially-correct add '--show-bad-code' argument
 | |
|     */
 | |
|     public MaterialButton(android.content.Context r9, android.util.AttributeSet r10, int r11) {
 | |
|         /*
 | |
|             r8 = this;
 | |
|             int r6 = com.google.android.material.button.MaterialButton.DEF_STYLE_RES
 | |
|             android.content.Context r9 = com.google.android.material.theme.overlay.MaterialThemeOverlay.wrap(r9, r10, r11, r6)
 | |
|             r8.<init>(r9, r10, r11)
 | |
|             java.util.LinkedHashSet r9 = new java.util.LinkedHashSet
 | |
|             r9.<init>()
 | |
|             r8.onCheckedChangeListeners = r9
 | |
|             r9 = 0
 | |
|             r8.checked = r9
 | |
|             r8.broadcasting = r9
 | |
|             android.content.Context r7 = r8.getContext()
 | |
|             int[] r2 = com.google.android.material.R.styleable.MaterialButton
 | |
|             int[] r5 = new int[r9]
 | |
|             r0 = r7
 | |
|             r1 = r10
 | |
|             r3 = r11
 | |
|             r4 = r6
 | |
|             android.content.res.TypedArray r0 = com.google.android.material.internal.ThemeEnforcement.obtainStyledAttributes(r0, r1, r2, r3, r4, r5)
 | |
|             int r1 = com.google.android.material.R.styleable.MaterialButton_iconPadding
 | |
|             int r1 = r0.getDimensionPixelSize(r1, r9)
 | |
|             r8.iconPadding = r1
 | |
|             int r1 = com.google.android.material.R.styleable.MaterialButton_iconTintMode
 | |
|             r2 = -1
 | |
|             int r1 = r0.getInt(r1, r2)
 | |
|             android.graphics.PorterDuff$Mode r2 = android.graphics.PorterDuff.Mode.SRC_IN
 | |
|             android.graphics.PorterDuff$Mode r1 = com.google.android.material.internal.ViewUtils.parseTintMode(r1, r2)
 | |
|             r8.iconTintMode = r1
 | |
|             android.content.Context r1 = r8.getContext()
 | |
|             int r2 = com.google.android.material.R.styleable.MaterialButton_iconTint
 | |
|             android.content.res.ColorStateList r1 = com.google.android.material.resources.MaterialResources.getColorStateList(r1, r0, r2)
 | |
|             r8.iconTint = r1
 | |
|             android.content.Context r1 = r8.getContext()
 | |
|             int r2 = com.google.android.material.R.styleable.MaterialButton_icon
 | |
|             android.graphics.drawable.Drawable r1 = com.google.android.material.resources.MaterialResources.getDrawable(r1, r0, r2)
 | |
|             r8.icon = r1
 | |
|             int r1 = com.google.android.material.R.styleable.MaterialButton_iconGravity
 | |
|             r2 = 1
 | |
|             int r1 = r0.getInteger(r1, r2)
 | |
|             r8.iconGravity = r1
 | |
|             int r1 = com.google.android.material.R.styleable.MaterialButton_iconSize
 | |
|             int r1 = r0.getDimensionPixelSize(r1, r9)
 | |
|             r8.iconSize = r1
 | |
|             com.google.android.material.shape.ShapeAppearanceModel$Builder r10 = com.google.android.material.shape.ShapeAppearanceModel.builder(r7, r10, r11, r6)
 | |
|             com.google.android.material.shape.ShapeAppearanceModel r10 = r10.build()
 | |
|             com.google.android.material.button.MaterialButtonHelper r11 = new com.google.android.material.button.MaterialButtonHelper
 | |
|             r11.<init>(r8, r10)
 | |
|             r8.materialButtonHelper = r11
 | |
|             r11.loadFromAttributes(r0)
 | |
|             r0.recycle()
 | |
|             int r10 = r8.iconPadding
 | |
|             r8.setCompoundDrawablePadding(r10)
 | |
|             android.graphics.drawable.Drawable r10 = r8.icon
 | |
|             if (r10 == 0) goto L84
 | |
|             r9 = 1
 | |
|         L84:
 | |
|             r8.updateIcon(r9)
 | |
|             return
 | |
|         */
 | |
|         throw new UnsupportedOperationException("Method not decompiled: com.google.android.material.button.MaterialButton.<init>(android.content.Context, android.util.AttributeSet, int):void");
 | |
|     }
 | |
| 
 | |
|     String getA11yClassName() {
 | |
|         if (TextUtils.isEmpty(this.accessibilityClassName)) {
 | |
|             return (isCheckable() ? CompoundButton.class : Button.class).getName();
 | |
|         }
 | |
|         return this.accessibilityClassName;
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AppCompatButton, android.view.View
 | |
|     public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo accessibilityNodeInfo) {
 | |
|         super.onInitializeAccessibilityNodeInfo(accessibilityNodeInfo);
 | |
|         accessibilityNodeInfo.setClassName(getA11yClassName());
 | |
|         accessibilityNodeInfo.setCheckable(isCheckable());
 | |
|         accessibilityNodeInfo.setChecked(isChecked());
 | |
|         accessibilityNodeInfo.setClickable(isClickable());
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AppCompatButton, android.view.View
 | |
|     public void onInitializeAccessibilityEvent(AccessibilityEvent accessibilityEvent) {
 | |
|         super.onInitializeAccessibilityEvent(accessibilityEvent);
 | |
|         accessibilityEvent.setClassName(getA11yClassName());
 | |
|         accessibilityEvent.setChecked(isChecked());
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.TextView, android.view.View
 | |
|     public Parcelable onSaveInstanceState() {
 | |
|         SavedState savedState = new SavedState(super.onSaveInstanceState());
 | |
|         savedState.checked = this.checked;
 | |
|         return savedState;
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.TextView, android.view.View
 | |
|     public void onRestoreInstanceState(Parcelable parcelable) {
 | |
|         if (!(parcelable instanceof SavedState)) {
 | |
|             super.onRestoreInstanceState(parcelable);
 | |
|             return;
 | |
|         }
 | |
|         SavedState savedState = (SavedState) parcelable;
 | |
|         super.onRestoreInstanceState(savedState.getSuperState());
 | |
|         setChecked(savedState.checked);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AppCompatButton, androidx.core.view.TintableBackgroundView
 | |
|     public void setSupportBackgroundTintList(ColorStateList colorStateList) {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             this.materialButtonHelper.setSupportBackgroundTintList(colorStateList);
 | |
|         } else {
 | |
|             super.setSupportBackgroundTintList(colorStateList);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AppCompatButton, androidx.core.view.TintableBackgroundView
 | |
|     public ColorStateList getSupportBackgroundTintList() {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             return this.materialButtonHelper.getSupportBackgroundTintList();
 | |
|         }
 | |
|         return super.getSupportBackgroundTintList();
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AppCompatButton, androidx.core.view.TintableBackgroundView
 | |
|     public void setSupportBackgroundTintMode(PorterDuff.Mode mode) {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             this.materialButtonHelper.setSupportBackgroundTintMode(mode);
 | |
|         } else {
 | |
|             super.setSupportBackgroundTintMode(mode);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AppCompatButton, androidx.core.view.TintableBackgroundView
 | |
|     public PorterDuff.Mode getSupportBackgroundTintMode() {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             return this.materialButtonHelper.getSupportBackgroundTintMode();
 | |
|         }
 | |
|         return super.getSupportBackgroundTintMode();
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     public void setBackgroundTintList(ColorStateList colorStateList) {
 | |
|         setSupportBackgroundTintList(colorStateList);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     public ColorStateList getBackgroundTintList() {
 | |
|         return getSupportBackgroundTintList();
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     public void setBackgroundTintMode(PorterDuff.Mode mode) {
 | |
|         setSupportBackgroundTintMode(mode);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     public PorterDuff.Mode getBackgroundTintMode() {
 | |
|         return getSupportBackgroundTintMode();
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     public void setBackgroundColor(int i) {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             this.materialButtonHelper.setBackgroundColor(i);
 | |
|         } else {
 | |
|             super.setBackgroundColor(i);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     public void setBackground(Drawable drawable) {
 | |
|         setBackgroundDrawable(drawable);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AppCompatButton, android.view.View
 | |
|     public void setBackgroundResource(int i) {
 | |
|         setBackgroundDrawable(i != 0 ? AppCompatResources.getDrawable(getContext(), i) : null);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AppCompatButton, android.view.View
 | |
|     public void setBackgroundDrawable(Drawable drawable) {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             if (drawable != getBackground()) {
 | |
|                 Log.w(LOG_TAG, "MaterialButton manages its own background to control elevation, shape, color and states. Consider using backgroundTint, shapeAppearance and other attributes where available. A custom background will ignore these attributes and you should consider handling interaction states such as pressed, focused and disabled");
 | |
|                 this.materialButtonHelper.setBackgroundOverwritten();
 | |
|                 super.setBackgroundDrawable(drawable);
 | |
|                 return;
 | |
|             }
 | |
|             getBackground().setState(drawable.getState());
 | |
|             return;
 | |
|         }
 | |
|         super.setBackgroundDrawable(drawable);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AppCompatButton, android.widget.TextView, android.view.View
 | |
|     protected void onLayout(boolean z, int i, int i2, int i3, int i4) {
 | |
|         MaterialButtonHelper materialButtonHelper;
 | |
|         super.onLayout(z, i, i2, i3, i4);
 | |
|         if (Build.VERSION.SDK_INT == 21 && (materialButtonHelper = this.materialButtonHelper) != null) {
 | |
|             materialButtonHelper.updateMaskBounds(i4 - i2, i3 - i);
 | |
|         }
 | |
|         updateIconPosition(getMeasuredWidth(), getMeasuredHeight());
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.widget.AppCompatButton, android.widget.TextView
 | |
|     protected void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
 | |
|         super.onTextChanged(charSequence, i, i2, i3);
 | |
|         updateIconPosition(getMeasuredWidth(), getMeasuredHeight());
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.TextView, android.view.View
 | |
|     protected void onAttachedToWindow() {
 | |
|         super.onAttachedToWindow();
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             MaterialShapeUtils.setParentAbsoluteElevation(this, this.materialButtonHelper.getMaterialShapeDrawable());
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     public void setElevation(float f) {
 | |
|         super.setElevation(f);
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             this.materialButtonHelper.getMaterialShapeDrawable().setElevation(f);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     public void refreshDrawableState() {
 | |
|         super.refreshDrawableState();
 | |
|         if (this.icon != null) {
 | |
|             if (this.icon.setState(getDrawableState())) {
 | |
|                 invalidate();
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     public void setTextAlignment(int i) {
 | |
|         super.setTextAlignment(i);
 | |
|         updateIconPosition(getMeasuredWidth(), getMeasuredHeight());
 | |
|     }
 | |
| 
 | |
|     private Layout.Alignment getGravityTextAlignment() {
 | |
|         int gravity = getGravity() & GravityCompat.RELATIVE_HORIZONTAL_GRAVITY_MASK;
 | |
|         if (gravity == 1) {
 | |
|             return Layout.Alignment.ALIGN_CENTER;
 | |
|         }
 | |
|         if (gravity == 5 || gravity == 8388613) {
 | |
|             return Layout.Alignment.ALIGN_OPPOSITE;
 | |
|         }
 | |
|         return Layout.Alignment.ALIGN_NORMAL;
 | |
|     }
 | |
| 
 | |
|     private Layout.Alignment getActualTextAlignment() {
 | |
|         int textAlignment = getTextAlignment();
 | |
|         if (textAlignment == 1) {
 | |
|             return getGravityTextAlignment();
 | |
|         }
 | |
|         if (textAlignment == 6 || textAlignment == 3) {
 | |
|             return Layout.Alignment.ALIGN_OPPOSITE;
 | |
|         }
 | |
|         if (textAlignment == 4) {
 | |
|             return Layout.Alignment.ALIGN_CENTER;
 | |
|         }
 | |
|         return Layout.Alignment.ALIGN_NORMAL;
 | |
|     }
 | |
| 
 | |
|     private void updateIconPosition(int i, int i2) {
 | |
|         if (this.icon == null || getLayout() == null) {
 | |
|             return;
 | |
|         }
 | |
|         if (isIconStart() || isIconEnd()) {
 | |
|             this.iconTop = 0;
 | |
|             Layout.Alignment actualTextAlignment = getActualTextAlignment();
 | |
|             int i3 = this.iconGravity;
 | |
|             if (i3 == 1 || i3 == 3 || ((i3 == 2 && actualTextAlignment == Layout.Alignment.ALIGN_NORMAL) || (this.iconGravity == 4 && actualTextAlignment == Layout.Alignment.ALIGN_OPPOSITE))) {
 | |
|                 this.iconLeft = 0;
 | |
|                 updateIcon(false);
 | |
|                 return;
 | |
|             }
 | |
|             int i4 = this.iconSize;
 | |
|             if (i4 == 0) {
 | |
|                 i4 = this.icon.getIntrinsicWidth();
 | |
|             }
 | |
|             int textLayoutWidth = ((((i - getTextLayoutWidth()) - ViewCompat.getPaddingEnd(this)) - i4) - this.iconPadding) - ViewCompat.getPaddingStart(this);
 | |
|             if (actualTextAlignment == Layout.Alignment.ALIGN_CENTER) {
 | |
|                 textLayoutWidth /= 2;
 | |
|             }
 | |
|             if (isLayoutRTL() != (this.iconGravity == 4)) {
 | |
|                 textLayoutWidth = -textLayoutWidth;
 | |
|             }
 | |
|             if (this.iconLeft != textLayoutWidth) {
 | |
|                 this.iconLeft = textLayoutWidth;
 | |
|                 updateIcon(false);
 | |
|                 return;
 | |
|             }
 | |
|             return;
 | |
|         }
 | |
|         if (isIconTop()) {
 | |
|             this.iconLeft = 0;
 | |
|             if (this.iconGravity == 16) {
 | |
|                 this.iconTop = 0;
 | |
|                 updateIcon(false);
 | |
|                 return;
 | |
|             }
 | |
|             int i5 = this.iconSize;
 | |
|             if (i5 == 0) {
 | |
|                 i5 = this.icon.getIntrinsicHeight();
 | |
|             }
 | |
|             int max = Math.max(0, (((((i2 - getTextHeight()) - getPaddingTop()) - i5) - this.iconPadding) - getPaddingBottom()) / 2);
 | |
|             if (this.iconTop != max) {
 | |
|                 this.iconTop = max;
 | |
|                 updateIcon(false);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private int getTextLayoutWidth() {
 | |
|         int lineCount = getLineCount();
 | |
|         float f = 0.0f;
 | |
|         for (int i = 0; i < lineCount; i++) {
 | |
|             f = Math.max(f, getLayout().getLineWidth(i));
 | |
|         }
 | |
|         return (int) Math.ceil(f);
 | |
|     }
 | |
| 
 | |
|     private int getTextHeight() {
 | |
|         if (getLineCount() > 1) {
 | |
|             return getLayout().getHeight();
 | |
|         }
 | |
|         TextPaint paint = getPaint();
 | |
|         String charSequence = getText().toString();
 | |
|         if (getTransformationMethod() != null) {
 | |
|             charSequence = getTransformationMethod().getTransformation(charSequence, this).toString();
 | |
|         }
 | |
|         Rect rect = new Rect();
 | |
|         paint.getTextBounds(charSequence, 0, charSequence.length(), rect);
 | |
|         return Math.min(rect.height(), getLayout().getHeight());
 | |
|     }
 | |
| 
 | |
|     private boolean isLayoutRTL() {
 | |
|         return ViewCompat.getLayoutDirection(this) == 1;
 | |
|     }
 | |
| 
 | |
|     void setInternalBackground(Drawable drawable) {
 | |
|         super.setBackgroundDrawable(drawable);
 | |
|     }
 | |
| 
 | |
|     public void setIconPadding(int i) {
 | |
|         if (this.iconPadding != i) {
 | |
|             this.iconPadding = i;
 | |
|             setCompoundDrawablePadding(i);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setIconSize(int i) {
 | |
|         if (i < 0) {
 | |
|             throw new IllegalArgumentException("iconSize cannot be less than 0");
 | |
|         }
 | |
|         if (this.iconSize != i) {
 | |
|             this.iconSize = i;
 | |
|             updateIcon(true);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setIcon(Drawable drawable) {
 | |
|         if (this.icon != drawable) {
 | |
|             this.icon = drawable;
 | |
|             updateIcon(true);
 | |
|             updateIconPosition(getMeasuredWidth(), getMeasuredHeight());
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setIconResource(int i) {
 | |
|         setIcon(i != 0 ? AppCompatResources.getDrawable(getContext(), i) : null);
 | |
|     }
 | |
| 
 | |
|     public void setIconTint(ColorStateList colorStateList) {
 | |
|         if (this.iconTint != colorStateList) {
 | |
|             this.iconTint = colorStateList;
 | |
|             updateIcon(false);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setIconTintResource(int i) {
 | |
|         setIconTint(AppCompatResources.getColorStateList(getContext(), i));
 | |
|     }
 | |
| 
 | |
|     public void setIconTintMode(PorterDuff.Mode mode) {
 | |
|         if (this.iconTintMode != mode) {
 | |
|             this.iconTintMode = mode;
 | |
|             updateIcon(false);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void updateIcon(boolean z) {
 | |
|         Drawable drawable = this.icon;
 | |
|         if (drawable != null) {
 | |
|             Drawable mutate = DrawableCompat.wrap(drawable).mutate();
 | |
|             this.icon = mutate;
 | |
|             DrawableCompat.setTintList(mutate, this.iconTint);
 | |
|             PorterDuff.Mode mode = this.iconTintMode;
 | |
|             if (mode != null) {
 | |
|                 DrawableCompat.setTintMode(this.icon, mode);
 | |
|             }
 | |
|             int i = this.iconSize;
 | |
|             if (i == 0) {
 | |
|                 i = this.icon.getIntrinsicWidth();
 | |
|             }
 | |
|             int i2 = this.iconSize;
 | |
|             if (i2 == 0) {
 | |
|                 i2 = this.icon.getIntrinsicHeight();
 | |
|             }
 | |
|             Drawable drawable2 = this.icon;
 | |
|             int i3 = this.iconLeft;
 | |
|             int i4 = this.iconTop;
 | |
|             drawable2.setBounds(i3, i4, i + i3, i2 + i4);
 | |
|             this.icon.setVisible(true, z);
 | |
|         }
 | |
|         if (z) {
 | |
|             resetIconDrawable();
 | |
|             return;
 | |
|         }
 | |
|         Drawable[] compoundDrawablesRelative = TextViewCompat.getCompoundDrawablesRelative(this);
 | |
|         Drawable drawable3 = compoundDrawablesRelative[0];
 | |
|         Drawable drawable4 = compoundDrawablesRelative[1];
 | |
|         Drawable drawable5 = compoundDrawablesRelative[2];
 | |
|         if ((!isIconStart() || drawable3 == this.icon) && ((!isIconEnd() || drawable5 == this.icon) && (!isIconTop() || drawable4 == this.icon))) {
 | |
|             return;
 | |
|         }
 | |
|         resetIconDrawable();
 | |
|     }
 | |
| 
 | |
|     private void resetIconDrawable() {
 | |
|         if (isIconStart()) {
 | |
|             TextViewCompat.setCompoundDrawablesRelative(this, this.icon, null, null, null);
 | |
|         } else if (isIconEnd()) {
 | |
|             TextViewCompat.setCompoundDrawablesRelative(this, null, null, this.icon, null);
 | |
|         } else if (isIconTop()) {
 | |
|             TextViewCompat.setCompoundDrawablesRelative(this, null, this.icon, null, null);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setRippleColor(ColorStateList colorStateList) {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             this.materialButtonHelper.setRippleColor(colorStateList);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setRippleColorResource(int i) {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             setRippleColor(AppCompatResources.getColorStateList(getContext(), i));
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public ColorStateList getRippleColor() {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             return this.materialButtonHelper.getRippleColor();
 | |
|         }
 | |
|         return null;
 | |
|     }
 | |
| 
 | |
|     public void setStrokeColor(ColorStateList colorStateList) {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             this.materialButtonHelper.setStrokeColor(colorStateList);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setStrokeColorResource(int i) {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             setStrokeColor(AppCompatResources.getColorStateList(getContext(), i));
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public ColorStateList getStrokeColor() {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             return this.materialButtonHelper.getStrokeColor();
 | |
|         }
 | |
|         return null;
 | |
|     }
 | |
| 
 | |
|     public void setStrokeWidth(int i) {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             this.materialButtonHelper.setStrokeWidth(i);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setStrokeWidthResource(int i) {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             setStrokeWidth(getResources().getDimensionPixelSize(i));
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public int getStrokeWidth() {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             return this.materialButtonHelper.getStrokeWidth();
 | |
|         }
 | |
|         return 0;
 | |
|     }
 | |
| 
 | |
|     public void setCornerRadius(int i) {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             this.materialButtonHelper.setCornerRadius(i);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setCornerRadiusResource(int i) {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             setCornerRadius(getResources().getDimensionPixelSize(i));
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public int getCornerRadius() {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             return this.materialButtonHelper.getCornerRadius();
 | |
|         }
 | |
|         return 0;
 | |
|     }
 | |
| 
 | |
|     public void setIconGravity(int i) {
 | |
|         if (this.iconGravity != i) {
 | |
|             this.iconGravity = i;
 | |
|             updateIconPosition(getMeasuredWidth(), getMeasuredHeight());
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setInsetBottom(int i) {
 | |
|         this.materialButtonHelper.setInsetBottom(i);
 | |
|     }
 | |
| 
 | |
|     public int getInsetBottom() {
 | |
|         return this.materialButtonHelper.getInsetBottom();
 | |
|     }
 | |
| 
 | |
|     public void setInsetTop(int i) {
 | |
|         this.materialButtonHelper.setInsetTop(i);
 | |
|     }
 | |
| 
 | |
|     public int getInsetTop() {
 | |
|         return this.materialButtonHelper.getInsetTop();
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.TextView, android.view.View
 | |
|     protected int[] onCreateDrawableState(int i) {
 | |
|         int[] onCreateDrawableState = super.onCreateDrawableState(i + 2);
 | |
|         if (isCheckable()) {
 | |
|             mergeDrawableStates(onCreateDrawableState, CHECKABLE_STATE_SET);
 | |
|         }
 | |
|         if (isChecked()) {
 | |
|             mergeDrawableStates(onCreateDrawableState, CHECKED_STATE_SET);
 | |
|         }
 | |
|         return onCreateDrawableState;
 | |
|     }
 | |
| 
 | |
|     public void addOnCheckedChangeListener(OnCheckedChangeListener onCheckedChangeListener) {
 | |
|         this.onCheckedChangeListeners.add(onCheckedChangeListener);
 | |
|     }
 | |
| 
 | |
|     public void removeOnCheckedChangeListener(OnCheckedChangeListener onCheckedChangeListener) {
 | |
|         this.onCheckedChangeListeners.remove(onCheckedChangeListener);
 | |
|     }
 | |
| 
 | |
|     public void clearOnCheckedChangeListeners() {
 | |
|         this.onCheckedChangeListeners.clear();
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.Checkable
 | |
|     public void setChecked(boolean z) {
 | |
|         if (isCheckable() && isEnabled() && this.checked != z) {
 | |
|             this.checked = z;
 | |
|             refreshDrawableState();
 | |
|             if (getParent() instanceof MaterialButtonToggleGroup) {
 | |
|                 ((MaterialButtonToggleGroup) getParent()).onButtonCheckedStateChanged(this, this.checked);
 | |
|             }
 | |
|             if (this.broadcasting) {
 | |
|                 return;
 | |
|             }
 | |
|             this.broadcasting = true;
 | |
|             Iterator<OnCheckedChangeListener> it = this.onCheckedChangeListeners.iterator();
 | |
|             while (it.hasNext()) {
 | |
|                 it.next().onCheckedChanged(this, this.checked);
 | |
|             }
 | |
|             this.broadcasting = false;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.widget.Checkable
 | |
|     public void toggle() {
 | |
|         setChecked(!this.checked);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     public boolean performClick() {
 | |
|         if (this.materialButtonHelper.isToggleCheckedStateOnClick()) {
 | |
|             toggle();
 | |
|         }
 | |
|         return super.performClick();
 | |
|     }
 | |
| 
 | |
|     public boolean isToggleCheckedStateOnClick() {
 | |
|         return this.materialButtonHelper.isToggleCheckedStateOnClick();
 | |
|     }
 | |
| 
 | |
|     public void setToggleCheckedStateOnClick(boolean z) {
 | |
|         this.materialButtonHelper.setToggleCheckedStateOnClick(z);
 | |
|     }
 | |
| 
 | |
|     public boolean isCheckable() {
 | |
|         MaterialButtonHelper materialButtonHelper = this.materialButtonHelper;
 | |
|         return materialButtonHelper != null && materialButtonHelper.isCheckable();
 | |
|     }
 | |
| 
 | |
|     public void setCheckable(boolean z) {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             this.materialButtonHelper.setCheckable(z);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // com.google.android.material.shape.Shapeable
 | |
|     public void setShapeAppearanceModel(ShapeAppearanceModel shapeAppearanceModel) {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             this.materialButtonHelper.setShapeAppearanceModel(shapeAppearanceModel);
 | |
|             return;
 | |
|         }
 | |
|         throw new IllegalStateException("Attempted to set ShapeAppearanceModel on a MaterialButton which has an overwritten background.");
 | |
|     }
 | |
| 
 | |
|     @Override // com.google.android.material.shape.Shapeable
 | |
|     public ShapeAppearanceModel getShapeAppearanceModel() {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             return this.materialButtonHelper.getShapeAppearanceModel();
 | |
|         }
 | |
|         throw new IllegalStateException("Attempted to get ShapeAppearanceModel from a MaterialButton which has an overwritten background.");
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     public void setPressed(boolean z) {
 | |
|         OnPressedChangeListener onPressedChangeListener = this.onPressedChangeListenerInternal;
 | |
|         if (onPressedChangeListener != null) {
 | |
|             onPressedChangeListener.onPressedChanged(this, z);
 | |
|         }
 | |
|         super.setPressed(z);
 | |
|     }
 | |
| 
 | |
|     private boolean isUsingOriginalBackground() {
 | |
|         MaterialButtonHelper materialButtonHelper = this.materialButtonHelper;
 | |
|         return (materialButtonHelper == null || materialButtonHelper.isBackgroundOverwritten()) ? false : true;
 | |
|     }
 | |
| 
 | |
|     void setShouldDrawSurfaceColorStroke(boolean z) {
 | |
|         if (isUsingOriginalBackground()) {
 | |
|             this.materialButtonHelper.setShouldDrawSurfaceColorStroke(z);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     static class SavedState extends AbsSavedState {
 | |
|         public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.ClassLoaderCreator<SavedState>() { // from class: com.google.android.material.button.MaterialButton.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);
 | |
|             if (classLoader == null) {
 | |
|                 getClass().getClassLoader();
 | |
|             }
 | |
|             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;
 | |
|         }
 | |
|     }
 | |
| }
 |