315 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			315 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package com.google.android.material.snackbar;
 | |
| 
 | |
| import android.content.Context;
 | |
| import android.content.res.ColorStateList;
 | |
| import android.content.res.TypedArray;
 | |
| import android.graphics.PorterDuff;
 | |
| import android.graphics.drawable.Drawable;
 | |
| import android.os.Build;
 | |
| import android.text.TextUtils;
 | |
| import android.util.AttributeSet;
 | |
| import android.view.LayoutInflater;
 | |
| import android.view.View;
 | |
| import android.view.ViewGroup;
 | |
| import android.view.accessibility.AccessibilityManager;
 | |
| import android.widget.Button;
 | |
| import android.widget.FrameLayout;
 | |
| import android.widget.TextView;
 | |
| import androidx.constraintlayout.core.widgets.analyzer.BasicMeasure;
 | |
| import androidx.coordinatorlayout.widget.CoordinatorLayout;
 | |
| import com.google.android.material.R;
 | |
| import com.google.android.material.snackbar.BaseTransientBottomBar;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class Snackbar extends BaseTransientBottomBar<Snackbar> {
 | |
|     private static final int[] SNACKBAR_BUTTON_STYLE_ATTR = {R.attr.snackbarButtonStyle};
 | |
|     private static final int[] SNACKBAR_CONTENT_STYLE_ATTRS = {R.attr.snackbarButtonStyle, R.attr.snackbarTextViewStyle};
 | |
|     private final AccessibilityManager accessibilityManager;
 | |
|     private BaseTransientBottomBar.BaseCallback<Snackbar> callback;
 | |
|     private boolean hasAction;
 | |
| 
 | |
|     public static class Callback extends BaseTransientBottomBar.BaseCallback<Snackbar> {
 | |
|         public static final int DISMISS_EVENT_ACTION = 1;
 | |
|         public static final int DISMISS_EVENT_CONSECUTIVE = 4;
 | |
|         public static final int DISMISS_EVENT_MANUAL = 3;
 | |
|         public static final int DISMISS_EVENT_SWIPE = 0;
 | |
|         public static final int DISMISS_EVENT_TIMEOUT = 2;
 | |
| 
 | |
|         @Override // com.google.android.material.snackbar.BaseTransientBottomBar.BaseCallback
 | |
|         public void onDismissed(Snackbar snackbar, int i) {
 | |
|         }
 | |
| 
 | |
|         @Override // com.google.android.material.snackbar.BaseTransientBottomBar.BaseCallback
 | |
|         public void onShown(Snackbar snackbar) {
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private Snackbar(Context context, ViewGroup viewGroup, View view, ContentViewCallback contentViewCallback) {
 | |
|         super(context, viewGroup, view, contentViewCallback);
 | |
|         this.accessibilityManager = (AccessibilityManager) viewGroup.getContext().getSystemService("accessibility");
 | |
|     }
 | |
| 
 | |
|     @Override // com.google.android.material.snackbar.BaseTransientBottomBar
 | |
|     public void show() {
 | |
|         super.show();
 | |
|     }
 | |
| 
 | |
|     @Override // com.google.android.material.snackbar.BaseTransientBottomBar
 | |
|     public void dismiss() {
 | |
|         super.dismiss();
 | |
|     }
 | |
| 
 | |
|     @Override // com.google.android.material.snackbar.BaseTransientBottomBar
 | |
|     public boolean isShown() {
 | |
|         return super.isShown();
 | |
|     }
 | |
| 
 | |
|     public static Snackbar make(View view, CharSequence charSequence, int i) {
 | |
|         return makeInternal(null, view, charSequence, i);
 | |
|     }
 | |
| 
 | |
|     public static Snackbar make(Context context, View view, CharSequence charSequence, int i) {
 | |
|         return makeInternal(context, view, charSequence, i);
 | |
|     }
 | |
| 
 | |
|     private static Snackbar makeInternal(Context context, View view, CharSequence charSequence, int i) {
 | |
|         int i2;
 | |
|         ViewGroup findSuitableParent = findSuitableParent(view);
 | |
|         if (findSuitableParent == null) {
 | |
|             throw new IllegalArgumentException("No suitable parent found from the given view. Please provide a valid view.");
 | |
|         }
 | |
|         if (context == null) {
 | |
|             context = findSuitableParent.getContext();
 | |
|         }
 | |
|         LayoutInflater from = LayoutInflater.from(context);
 | |
|         if (hasSnackbarContentStyleAttrs(context)) {
 | |
|             i2 = R.layout.mtrl_layout_snackbar_include;
 | |
|         } else {
 | |
|             i2 = R.layout.design_layout_snackbar_include;
 | |
|         }
 | |
|         SnackbarContentLayout snackbarContentLayout = (SnackbarContentLayout) from.inflate(i2, findSuitableParent, false);
 | |
|         Snackbar snackbar = new Snackbar(context, findSuitableParent, snackbarContentLayout, snackbarContentLayout);
 | |
|         snackbar.setText(charSequence);
 | |
|         snackbar.setDuration(i);
 | |
|         return snackbar;
 | |
|     }
 | |
| 
 | |
|     @Deprecated
 | |
|     protected static boolean hasSnackbarButtonStyleAttr(Context context) {
 | |
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(SNACKBAR_BUTTON_STYLE_ATTR);
 | |
|         int resourceId = obtainStyledAttributes.getResourceId(0, -1);
 | |
|         obtainStyledAttributes.recycle();
 | |
|         return resourceId != -1;
 | |
|     }
 | |
| 
 | |
|     private static boolean hasSnackbarContentStyleAttrs(Context context) {
 | |
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(SNACKBAR_CONTENT_STYLE_ATTRS);
 | |
|         int resourceId = obtainStyledAttributes.getResourceId(0, -1);
 | |
|         int resourceId2 = obtainStyledAttributes.getResourceId(1, -1);
 | |
|         obtainStyledAttributes.recycle();
 | |
|         return (resourceId == -1 || resourceId2 == -1) ? false : true;
 | |
|     }
 | |
| 
 | |
|     public static Snackbar make(View view, int i, int i2) {
 | |
|         return make(view, view.getResources().getText(i), i2);
 | |
|     }
 | |
| 
 | |
|     private static ViewGroup findSuitableParent(View view) {
 | |
|         ViewGroup viewGroup = null;
 | |
|         while (!(view instanceof CoordinatorLayout)) {
 | |
|             if (view instanceof FrameLayout) {
 | |
|                 if (view.getId() == 16908290) {
 | |
|                     return (ViewGroup) view;
 | |
|                 }
 | |
|                 viewGroup = (ViewGroup) view;
 | |
|             }
 | |
|             if (view != null) {
 | |
|                 Object parent = view.getParent();
 | |
|                 view = parent instanceof View ? (View) parent : null;
 | |
|             }
 | |
|             if (view == null) {
 | |
|                 return viewGroup;
 | |
|             }
 | |
|         }
 | |
|         return (ViewGroup) view;
 | |
|     }
 | |
| 
 | |
|     public Snackbar setText(CharSequence charSequence) {
 | |
|         getMessageView().setText(charSequence);
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public Snackbar setText(int i) {
 | |
|         return setText(getContext().getText(i));
 | |
|     }
 | |
| 
 | |
|     public Snackbar setAction(int i, View.OnClickListener onClickListener) {
 | |
|         return setAction(getContext().getText(i), onClickListener);
 | |
|     }
 | |
| 
 | |
|     public Snackbar setAction(CharSequence charSequence, final View.OnClickListener onClickListener) {
 | |
|         Button actionView = getActionView();
 | |
|         if (TextUtils.isEmpty(charSequence) || onClickListener == null) {
 | |
|             actionView.setVisibility(8);
 | |
|             actionView.setOnClickListener(null);
 | |
|             this.hasAction = false;
 | |
|         } else {
 | |
|             this.hasAction = true;
 | |
|             actionView.setVisibility(0);
 | |
|             actionView.setText(charSequence);
 | |
|             actionView.setOnClickListener(new View.OnClickListener() { // from class: com.google.android.material.snackbar.Snackbar$$ExternalSyntheticLambda1
 | |
|                 @Override // android.view.View.OnClickListener
 | |
|                 public final void onClick(View view) {
 | |
|                     Snackbar.this.m265lambda$setAction$0$comgoogleandroidmaterialsnackbarSnackbar(onClickListener, view);
 | |
|                 }
 | |
|             });
 | |
|         }
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     /* renamed from: lambda$setAction$0$com-google-android-material-snackbar-Snackbar, reason: not valid java name */
 | |
|     /* synthetic */ void m265lambda$setAction$0$comgoogleandroidmaterialsnackbarSnackbar(View.OnClickListener onClickListener, View view) {
 | |
|         onClickListener.onClick(view);
 | |
|         dispatchDismiss(1);
 | |
|     }
 | |
| 
 | |
|     @Override // com.google.android.material.snackbar.BaseTransientBottomBar
 | |
|     public int getDuration() {
 | |
|         int recommendedTimeoutMillis;
 | |
|         int duration = super.getDuration();
 | |
|         if (duration == -2) {
 | |
|             return -2;
 | |
|         }
 | |
|         if (Build.VERSION.SDK_INT >= 29) {
 | |
|             recommendedTimeoutMillis = this.accessibilityManager.getRecommendedTimeoutMillis(duration, (this.hasAction ? 4 : 0) | 3);
 | |
|             return recommendedTimeoutMillis;
 | |
|         }
 | |
|         if (this.hasAction && this.accessibilityManager.isTouchExplorationEnabled()) {
 | |
|             return -2;
 | |
|         }
 | |
|         return duration;
 | |
|     }
 | |
| 
 | |
|     public Snackbar setTextColor(ColorStateList colorStateList) {
 | |
|         getMessageView().setTextColor(colorStateList);
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public Snackbar setTextColor(int i) {
 | |
|         getMessageView().setTextColor(i);
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public Snackbar setTextMaxLines(int i) {
 | |
|         getMessageView().setMaxLines(i);
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public Snackbar setActionTextColor(ColorStateList colorStateList) {
 | |
|         getActionView().setTextColor(colorStateList);
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public Snackbar setMaxInlineActionWidth(int i) {
 | |
|         getContentLayout().setMaxInlineActionWidth(i);
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public Snackbar setActionTextColor(int i) {
 | |
|         getActionView().setTextColor(i);
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public Snackbar setBackgroundTint(int i) {
 | |
|         return setBackgroundTintList(ColorStateList.valueOf(i));
 | |
|     }
 | |
| 
 | |
|     public Snackbar setBackgroundTintList(ColorStateList colorStateList) {
 | |
|         this.view.setBackgroundTintList(colorStateList);
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public Snackbar setBackgroundTintMode(PorterDuff.Mode mode) {
 | |
|         this.view.setBackgroundTintMode(mode);
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     @Deprecated
 | |
|     public Snackbar setCallback(Callback callback) {
 | |
|         BaseTransientBottomBar.BaseCallback<Snackbar> baseCallback = this.callback;
 | |
|         if (baseCallback != null) {
 | |
|             removeCallback(baseCallback);
 | |
|         }
 | |
|         if (callback != null) {
 | |
|             addCallback(callback);
 | |
|         }
 | |
|         this.callback = callback;
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public static final class SnackbarLayout extends BaseTransientBottomBar.SnackbarBaseLayout {
 | |
|         @Override // com.google.android.material.snackbar.BaseTransientBottomBar.SnackbarBaseLayout, android.view.View
 | |
|         public /* bridge */ /* synthetic */ void setBackground(Drawable drawable) {
 | |
|             super.setBackground(drawable);
 | |
|         }
 | |
| 
 | |
|         @Override // com.google.android.material.snackbar.BaseTransientBottomBar.SnackbarBaseLayout, android.view.View
 | |
|         public /* bridge */ /* synthetic */ void setBackgroundDrawable(Drawable drawable) {
 | |
|             super.setBackgroundDrawable(drawable);
 | |
|         }
 | |
| 
 | |
|         @Override // com.google.android.material.snackbar.BaseTransientBottomBar.SnackbarBaseLayout, android.view.View
 | |
|         public /* bridge */ /* synthetic */ void setBackgroundTintList(ColorStateList colorStateList) {
 | |
|             super.setBackgroundTintList(colorStateList);
 | |
|         }
 | |
| 
 | |
|         @Override // com.google.android.material.snackbar.BaseTransientBottomBar.SnackbarBaseLayout, android.view.View
 | |
|         public /* bridge */ /* synthetic */ void setBackgroundTintMode(PorterDuff.Mode mode) {
 | |
|             super.setBackgroundTintMode(mode);
 | |
|         }
 | |
| 
 | |
|         @Override // com.google.android.material.snackbar.BaseTransientBottomBar.SnackbarBaseLayout, android.view.View
 | |
|         public /* bridge */ /* synthetic */ void setLayoutParams(ViewGroup.LayoutParams layoutParams) {
 | |
|             super.setLayoutParams(layoutParams);
 | |
|         }
 | |
| 
 | |
|         @Override // com.google.android.material.snackbar.BaseTransientBottomBar.SnackbarBaseLayout, android.view.View
 | |
|         public /* bridge */ /* synthetic */ void setOnClickListener(View.OnClickListener onClickListener) {
 | |
|             super.setOnClickListener(onClickListener);
 | |
|         }
 | |
| 
 | |
|         public SnackbarLayout(Context context) {
 | |
|             super(context);
 | |
|         }
 | |
| 
 | |
|         public SnackbarLayout(Context context, AttributeSet attributeSet) {
 | |
|             super(context, attributeSet);
 | |
|         }
 | |
| 
 | |
|         @Override // com.google.android.material.snackbar.BaseTransientBottomBar.SnackbarBaseLayout, android.widget.FrameLayout, android.view.View
 | |
|         protected void onMeasure(int i, int i2) {
 | |
|             super.onMeasure(i, i2);
 | |
|             int childCount = getChildCount();
 | |
|             int measuredWidth = (getMeasuredWidth() - getPaddingLeft()) - getPaddingRight();
 | |
|             for (int i3 = 0; i3 < childCount; i3++) {
 | |
|                 View childAt = getChildAt(i3);
 | |
|                 if (childAt.getLayoutParams().width == -1) {
 | |
|                     childAt.measure(View.MeasureSpec.makeMeasureSpec(measuredWidth, BasicMeasure.EXACTLY), View.MeasureSpec.makeMeasureSpec(childAt.getMeasuredHeight(), BasicMeasure.EXACTLY));
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private TextView getMessageView() {
 | |
|         return getContentLayout().getMessageView();
 | |
|     }
 | |
| 
 | |
|     private Button getActionView() {
 | |
|         return getContentLayout().getActionView();
 | |
|     }
 | |
| 
 | |
|     private SnackbarContentLayout getContentLayout() {
 | |
|         return (SnackbarContentLayout) this.view.getChildAt(0);
 | |
|     }
 | |
| }
 |