290 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			290 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package com.google.android.material.sidesheet;
 | |
| 
 | |
| import android.content.Context;
 | |
| import android.content.res.TypedArray;
 | |
| import android.os.Build;
 | |
| import android.os.Bundle;
 | |
| import android.util.TypedValue;
 | |
| import android.view.View;
 | |
| import android.view.ViewGroup;
 | |
| import android.view.Window;
 | |
| import android.widget.FrameLayout;
 | |
| import androidx.appcompat.app.AppCompatDialog;
 | |
| import androidx.coordinatorlayout.widget.CoordinatorLayout;
 | |
| import androidx.core.view.AccessibilityDelegateCompat;
 | |
| import androidx.core.view.GravityCompat;
 | |
| import androidx.core.view.ViewCompat;
 | |
| import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
 | |
| import com.google.android.material.R;
 | |
| import com.google.android.material.motion.MaterialBackOrchestrator;
 | |
| import com.google.android.material.sidesheet.SheetCallback;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| abstract class SheetDialog<C extends SheetCallback> extends AppCompatDialog {
 | |
|     private static final int COORDINATOR_LAYOUT_ID = R.id.coordinator;
 | |
|     private static final int TOUCH_OUTSIDE_ID = R.id.touch_outside;
 | |
|     private MaterialBackOrchestrator backOrchestrator;
 | |
|     private Sheet<C> behavior;
 | |
|     boolean cancelable;
 | |
|     private boolean canceledOnTouchOutside;
 | |
|     private boolean canceledOnTouchOutsideSet;
 | |
|     private FrameLayout container;
 | |
|     boolean dismissWithAnimation;
 | |
|     private FrameLayout sheet;
 | |
| 
 | |
|     abstract void addSheetCancelOnHideCallback(Sheet<C> sheet);
 | |
| 
 | |
|     abstract Sheet<C> getBehaviorFromSheet(FrameLayout frameLayout);
 | |
| 
 | |
|     abstract int getDialogId();
 | |
| 
 | |
|     abstract int getLayoutResId();
 | |
| 
 | |
|     abstract int getStateOnStart();
 | |
| 
 | |
|     public boolean isDismissWithSheetAnimationEnabled() {
 | |
|         return this.dismissWithAnimation;
 | |
|     }
 | |
| 
 | |
|     public void setDismissWithSheetAnimationEnabled(boolean z) {
 | |
|         this.dismissWithAnimation = z;
 | |
|     }
 | |
| 
 | |
|     SheetDialog(Context context, int i, int i2, int i3) {
 | |
|         super(context, getThemeResId(context, i, i2, i3));
 | |
|         this.cancelable = true;
 | |
|         this.canceledOnTouchOutside = true;
 | |
|         supportRequestWindowFeature(1);
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.app.AppCompatDialog, androidx.activity.ComponentDialog, android.app.Dialog
 | |
|     public void setContentView(int i) {
 | |
|         super.setContentView(wrapInSheet(i, null, null));
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.app.AppCompatDialog, androidx.activity.ComponentDialog, android.app.Dialog
 | |
|     public void setContentView(View view) {
 | |
|         super.setContentView(wrapInSheet(0, view, null));
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.app.AppCompatDialog, androidx.activity.ComponentDialog, android.app.Dialog
 | |
|     public void setContentView(View view, ViewGroup.LayoutParams layoutParams) {
 | |
|         super.setContentView(wrapInSheet(0, view, layoutParams));
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.appcompat.app.AppCompatDialog, androidx.activity.ComponentDialog, android.app.Dialog
 | |
|     protected void onCreate(Bundle bundle) {
 | |
|         super.onCreate(bundle);
 | |
|         Window window = getWindow();
 | |
|         if (window != null) {
 | |
|             window.setStatusBarColor(0);
 | |
|             window.addFlags(Integer.MIN_VALUE);
 | |
|             if (Build.VERSION.SDK_INT < 23) {
 | |
|                 window.addFlags(67108864);
 | |
|             }
 | |
|             window.setLayout(-1, -1);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.app.Dialog
 | |
|     public void setCancelable(boolean z) {
 | |
|         super.setCancelable(z);
 | |
|         if (this.cancelable != z) {
 | |
|             this.cancelable = z;
 | |
|         }
 | |
|         if (getWindow() != null) {
 | |
|             updateListeningForBackCallbacks();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void updateListeningForBackCallbacks() {
 | |
|         MaterialBackOrchestrator materialBackOrchestrator = this.backOrchestrator;
 | |
|         if (materialBackOrchestrator == null) {
 | |
|             return;
 | |
|         }
 | |
|         if (this.cancelable) {
 | |
|             materialBackOrchestrator.startListeningForBackCallbacks();
 | |
|         } else {
 | |
|             materialBackOrchestrator.stopListeningForBackCallbacks();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.activity.ComponentDialog, android.app.Dialog
 | |
|     protected void onStart() {
 | |
|         super.onStart();
 | |
|         Sheet<C> sheet = this.behavior;
 | |
|         if (sheet == null || sheet.getState() != 5) {
 | |
|             return;
 | |
|         }
 | |
|         this.behavior.setState(getStateOnStart());
 | |
|     }
 | |
| 
 | |
|     @Override // android.app.Dialog, android.view.Window.Callback
 | |
|     public void onAttachedToWindow() {
 | |
|         super.onAttachedToWindow();
 | |
|         maybeUpdateWindowAnimationsBasedOnLayoutDirection();
 | |
|         updateListeningForBackCallbacks();
 | |
|     }
 | |
| 
 | |
|     @Override // android.app.Dialog, android.view.Window.Callback
 | |
|     public void onDetachedFromWindow() {
 | |
|         super.onDetachedFromWindow();
 | |
|         MaterialBackOrchestrator materialBackOrchestrator = this.backOrchestrator;
 | |
|         if (materialBackOrchestrator != null) {
 | |
|             materialBackOrchestrator.stopListeningForBackCallbacks();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.app.Dialog, android.content.DialogInterface
 | |
|     public void cancel() {
 | |
|         Sheet<C> behavior = getBehavior();
 | |
|         if (!this.dismissWithAnimation || behavior.getState() == 5) {
 | |
|             super.cancel();
 | |
|         } else {
 | |
|             behavior.setState(5);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.app.Dialog
 | |
|     public void setCanceledOnTouchOutside(boolean z) {
 | |
|         super.setCanceledOnTouchOutside(z);
 | |
|         if (z && !this.cancelable) {
 | |
|             this.cancelable = true;
 | |
|         }
 | |
|         this.canceledOnTouchOutside = z;
 | |
|         this.canceledOnTouchOutsideSet = true;
 | |
|     }
 | |
| 
 | |
|     private void ensureContainerAndBehavior() {
 | |
|         if (this.container == null) {
 | |
|             FrameLayout frameLayout = (FrameLayout) View.inflate(getContext(), getLayoutResId(), null);
 | |
|             this.container = frameLayout;
 | |
|             FrameLayout frameLayout2 = (FrameLayout) frameLayout.findViewById(getDialogId());
 | |
|             this.sheet = frameLayout2;
 | |
|             Sheet<C> behaviorFromSheet = getBehaviorFromSheet(frameLayout2);
 | |
|             this.behavior = behaviorFromSheet;
 | |
|             addSheetCancelOnHideCallback(behaviorFromSheet);
 | |
|             this.backOrchestrator = new MaterialBackOrchestrator(this.behavior, this.sheet);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private FrameLayout getContainer() {
 | |
|         if (this.container == null) {
 | |
|             ensureContainerAndBehavior();
 | |
|         }
 | |
|         return this.container;
 | |
|     }
 | |
| 
 | |
|     private FrameLayout getSheet() {
 | |
|         if (this.sheet == null) {
 | |
|             ensureContainerAndBehavior();
 | |
|         }
 | |
|         return this.sheet;
 | |
|     }
 | |
| 
 | |
|     Sheet<C> getBehavior() {
 | |
|         if (this.behavior == null) {
 | |
|             ensureContainerAndBehavior();
 | |
|         }
 | |
|         return this.behavior;
 | |
|     }
 | |
| 
 | |
|     private View wrapInSheet(int i, View view, ViewGroup.LayoutParams layoutParams) {
 | |
|         ensureContainerAndBehavior();
 | |
|         CoordinatorLayout coordinatorLayout = (CoordinatorLayout) getContainer().findViewById(COORDINATOR_LAYOUT_ID);
 | |
|         if (i != 0 && view == null) {
 | |
|             view = getLayoutInflater().inflate(i, (ViewGroup) coordinatorLayout, false);
 | |
|         }
 | |
|         FrameLayout sheet = getSheet();
 | |
|         sheet.removeAllViews();
 | |
|         if (layoutParams == null) {
 | |
|             sheet.addView(view);
 | |
|         } else {
 | |
|             sheet.addView(view, layoutParams);
 | |
|         }
 | |
|         coordinatorLayout.findViewById(TOUCH_OUTSIDE_ID).setOnClickListener(new View.OnClickListener() { // from class: com.google.android.material.sidesheet.SheetDialog$$ExternalSyntheticLambda0
 | |
|             @Override // android.view.View.OnClickListener
 | |
|             public final void onClick(View view2) {
 | |
|                 SheetDialog.this.m260x401f75dd(view2);
 | |
|             }
 | |
|         });
 | |
|         ViewCompat.setAccessibilityDelegate(getSheet(), new AccessibilityDelegateCompat() { // from class: com.google.android.material.sidesheet.SheetDialog.1
 | |
|             @Override // androidx.core.view.AccessibilityDelegateCompat
 | |
|             public void onInitializeAccessibilityNodeInfo(View view2, AccessibilityNodeInfoCompat accessibilityNodeInfoCompat) {
 | |
|                 super.onInitializeAccessibilityNodeInfo(view2, accessibilityNodeInfoCompat);
 | |
|                 if (SheetDialog.this.cancelable) {
 | |
|                     accessibilityNodeInfoCompat.addAction(1048576);
 | |
|                     accessibilityNodeInfoCompat.setDismissable(true);
 | |
|                 } else {
 | |
|                     accessibilityNodeInfoCompat.setDismissable(false);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             @Override // androidx.core.view.AccessibilityDelegateCompat
 | |
|             public boolean performAccessibilityAction(View view2, int i2, Bundle bundle) {
 | |
|                 if (i2 == 1048576 && SheetDialog.this.cancelable) {
 | |
|                     SheetDialog.this.cancel();
 | |
|                     return true;
 | |
|                 }
 | |
|                 return super.performAccessibilityAction(view2, i2, bundle);
 | |
|             }
 | |
|         });
 | |
|         return this.container;
 | |
|     }
 | |
| 
 | |
|     /* renamed from: lambda$wrapInSheet$0$com-google-android-material-sidesheet-SheetDialog, reason: not valid java name */
 | |
|     /* synthetic */ void m260x401f75dd(View view) {
 | |
|         if (this.cancelable && isShowing() && shouldWindowCloseOnTouchOutside()) {
 | |
|             cancel();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setSheetEdge(int i) {
 | |
|         FrameLayout frameLayout = this.sheet;
 | |
|         if (frameLayout == null) {
 | |
|             throw new IllegalStateException("Sheet view reference is null; sheet edge cannot be changed if the sheet view is null.");
 | |
|         }
 | |
|         if (ViewCompat.isLaidOut(frameLayout)) {
 | |
|             throw new IllegalStateException("Sheet view has been laid out; sheet edge cannot be changed once the sheet has been laid out.");
 | |
|         }
 | |
|         ViewGroup.LayoutParams layoutParams = this.sheet.getLayoutParams();
 | |
|         if (layoutParams instanceof CoordinatorLayout.LayoutParams) {
 | |
|             ((CoordinatorLayout.LayoutParams) layoutParams).gravity = i;
 | |
|             maybeUpdateWindowAnimationsBasedOnLayoutDirection();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void maybeUpdateWindowAnimationsBasedOnLayoutDirection() {
 | |
|         FrameLayout frameLayout;
 | |
|         int i;
 | |
|         Window window = getWindow();
 | |
|         if (window == null || (frameLayout = this.sheet) == null || !(frameLayout.getLayoutParams() instanceof CoordinatorLayout.LayoutParams)) {
 | |
|             return;
 | |
|         }
 | |
|         if (GravityCompat.getAbsoluteGravity(((CoordinatorLayout.LayoutParams) this.sheet.getLayoutParams()).gravity, ViewCompat.getLayoutDirection(this.sheet)) == 3) {
 | |
|             i = R.style.Animation_Material3_SideSheetDialog_Left;
 | |
|         } else {
 | |
|             i = R.style.Animation_Material3_SideSheetDialog_Right;
 | |
|         }
 | |
|         window.setWindowAnimations(i);
 | |
|     }
 | |
| 
 | |
|     private boolean shouldWindowCloseOnTouchOutside() {
 | |
|         if (!this.canceledOnTouchOutsideSet) {
 | |
|             TypedArray obtainStyledAttributes = getContext().obtainStyledAttributes(new int[]{android.R.attr.windowCloseOnTouchOutside});
 | |
|             this.canceledOnTouchOutside = obtainStyledAttributes.getBoolean(0, true);
 | |
|             obtainStyledAttributes.recycle();
 | |
|             this.canceledOnTouchOutsideSet = true;
 | |
|         }
 | |
|         return this.canceledOnTouchOutside;
 | |
|     }
 | |
| 
 | |
|     private static int getThemeResId(Context context, int i, int i2, int i3) {
 | |
|         if (i != 0) {
 | |
|             return i;
 | |
|         }
 | |
|         TypedValue typedValue = new TypedValue();
 | |
|         return context.getTheme().resolveAttribute(i2, typedValue, true) ? typedValue.resourceId : i3;
 | |
|     }
 | |
| }
 |