300 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			300 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| 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;
 | |
|     }
 | |
| }
 |