2025-03-31 16:33:42 +02:00

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;
}
}