mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2025-01-09 13:43:22 +00:00
417 lines
18 KiB
Java
417 lines
18 KiB
Java
package com.google.android.material.bottomsheet;
|
|
|
|
import android.content.Context;
|
|
import android.content.DialogInterface;
|
|
import android.content.res.ColorStateList;
|
|
import android.content.res.TypedArray;
|
|
import android.graphics.Color;
|
|
import android.os.Bundle;
|
|
import android.util.TypedValue;
|
|
import android.view.MotionEvent;
|
|
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.OnApplyWindowInsetsListener;
|
|
import androidx.core.view.ViewCompat;
|
|
import androidx.core.view.WindowCompat;
|
|
import androidx.core.view.WindowInsetsCompat;
|
|
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
|
|
import com.google.android.material.R;
|
|
import com.google.android.material.bottomsheet.BottomSheetBehavior;
|
|
import com.google.android.material.color.MaterialColors;
|
|
import com.google.android.material.internal.EdgeToEdgeUtils;
|
|
import com.google.android.material.internal.ViewUtils;
|
|
import com.google.android.material.motion.MaterialBackOrchestrator;
|
|
import com.google.android.material.shape.MaterialShapeDrawable;
|
|
|
|
/* loaded from: classes2.dex */
|
|
public class BottomSheetDialog extends AppCompatDialog {
|
|
private MaterialBackOrchestrator backOrchestrator;
|
|
private BottomSheetBehavior<FrameLayout> behavior;
|
|
private FrameLayout bottomSheet;
|
|
private BottomSheetBehavior.BottomSheetCallback bottomSheetCallback;
|
|
boolean cancelable;
|
|
private boolean canceledOnTouchOutside;
|
|
private boolean canceledOnTouchOutsideSet;
|
|
private FrameLayout container;
|
|
private CoordinatorLayout coordinator;
|
|
boolean dismissWithAnimation;
|
|
private EdgeToEdgeCallback edgeToEdgeCallback;
|
|
private boolean edgeToEdgeEnabled;
|
|
|
|
public boolean getDismissWithAnimation() {
|
|
return this.dismissWithAnimation;
|
|
}
|
|
|
|
public boolean getEdgeToEdgeEnabled() {
|
|
return this.edgeToEdgeEnabled;
|
|
}
|
|
|
|
public void setDismissWithAnimation(boolean z) {
|
|
this.dismissWithAnimation = z;
|
|
}
|
|
|
|
public BottomSheetDialog(Context context) {
|
|
this(context, 0);
|
|
this.edgeToEdgeEnabled = getContext().getTheme().obtainStyledAttributes(new int[]{R.attr.enableEdgeToEdge}).getBoolean(0, false);
|
|
}
|
|
|
|
public BottomSheetDialog(Context context, int i) {
|
|
super(context, getThemeResId(context, i));
|
|
this.cancelable = true;
|
|
this.canceledOnTouchOutside = true;
|
|
this.bottomSheetCallback = new BottomSheetBehavior.BottomSheetCallback() { // from class: com.google.android.material.bottomsheet.BottomSheetDialog.5
|
|
@Override // com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
|
|
public void onSlide(View view, float f) {
|
|
}
|
|
|
|
@Override // com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
|
|
public void onStateChanged(View view, int i2) {
|
|
if (i2 == 5) {
|
|
BottomSheetDialog.this.cancel();
|
|
}
|
|
}
|
|
};
|
|
supportRequestWindowFeature(1);
|
|
this.edgeToEdgeEnabled = getContext().getTheme().obtainStyledAttributes(new int[]{R.attr.enableEdgeToEdge}).getBoolean(0, false);
|
|
}
|
|
|
|
protected BottomSheetDialog(Context context, boolean z, DialogInterface.OnCancelListener onCancelListener) {
|
|
super(context, z, onCancelListener);
|
|
this.cancelable = true;
|
|
this.canceledOnTouchOutside = true;
|
|
this.bottomSheetCallback = new BottomSheetBehavior.BottomSheetCallback() { // from class: com.google.android.material.bottomsheet.BottomSheetDialog.5
|
|
@Override // com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
|
|
public void onSlide(View view, float f) {
|
|
}
|
|
|
|
@Override // com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
|
|
public void onStateChanged(View view, int i2) {
|
|
if (i2 == 5) {
|
|
BottomSheetDialog.this.cancel();
|
|
}
|
|
}
|
|
};
|
|
supportRequestWindowFeature(1);
|
|
this.cancelable = z;
|
|
this.edgeToEdgeEnabled = getContext().getTheme().obtainStyledAttributes(new int[]{R.attr.enableEdgeToEdge}).getBoolean(0, false);
|
|
}
|
|
|
|
@Override // androidx.appcompat.app.AppCompatDialog, androidx.activity.ComponentDialog, android.app.Dialog
|
|
public void setContentView(int i) {
|
|
super.setContentView(wrapInBottomSheet(i, null, null));
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
@Override // androidx.appcompat.app.AppCompatDialog, androidx.activity.ComponentDialog, android.app.Dialog
|
|
public void onCreate(Bundle bundle) {
|
|
super.onCreate(bundle);
|
|
Window window = getWindow();
|
|
if (window != null) {
|
|
window.setStatusBarColor(0);
|
|
window.addFlags(Integer.MIN_VALUE);
|
|
window.setLayout(-1, -1);
|
|
}
|
|
}
|
|
|
|
@Override // androidx.appcompat.app.AppCompatDialog, androidx.activity.ComponentDialog, android.app.Dialog
|
|
public void setContentView(View view) {
|
|
super.setContentView(wrapInBottomSheet(0, view, null));
|
|
}
|
|
|
|
@Override // androidx.appcompat.app.AppCompatDialog, androidx.activity.ComponentDialog, android.app.Dialog
|
|
public void setContentView(View view, ViewGroup.LayoutParams layoutParams) {
|
|
super.setContentView(wrapInBottomSheet(0, view, layoutParams));
|
|
}
|
|
|
|
@Override // android.app.Dialog
|
|
public void setCancelable(boolean z) {
|
|
super.setCancelable(z);
|
|
if (this.cancelable != z) {
|
|
this.cancelable = z;
|
|
BottomSheetBehavior<FrameLayout> bottomSheetBehavior = this.behavior;
|
|
if (bottomSheetBehavior != null) {
|
|
bottomSheetBehavior.setHideable(z);
|
|
}
|
|
if (getWindow() != null) {
|
|
updateListeningForBackCallbacks();
|
|
}
|
|
}
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
@Override // androidx.activity.ComponentDialog, android.app.Dialog
|
|
public void onStart() {
|
|
super.onStart();
|
|
BottomSheetBehavior<FrameLayout> bottomSheetBehavior = this.behavior;
|
|
if (bottomSheetBehavior == null || bottomSheetBehavior.getState() != 5) {
|
|
return;
|
|
}
|
|
this.behavior.setState(4);
|
|
}
|
|
|
|
@Override // android.app.Dialog, android.view.Window.Callback
|
|
public void onAttachedToWindow() {
|
|
super.onAttachedToWindow();
|
|
Window window = getWindow();
|
|
if (window != null) {
|
|
boolean z = this.edgeToEdgeEnabled && Color.alpha(window.getNavigationBarColor()) < 255;
|
|
FrameLayout frameLayout = this.container;
|
|
if (frameLayout != null) {
|
|
frameLayout.setFitsSystemWindows(!z);
|
|
}
|
|
CoordinatorLayout coordinatorLayout = this.coordinator;
|
|
if (coordinatorLayout != null) {
|
|
coordinatorLayout.setFitsSystemWindows(!z);
|
|
}
|
|
WindowCompat.setDecorFitsSystemWindows(window, !z);
|
|
EdgeToEdgeCallback edgeToEdgeCallback = this.edgeToEdgeCallback;
|
|
if (edgeToEdgeCallback != null) {
|
|
edgeToEdgeCallback.setWindow(window);
|
|
}
|
|
}
|
|
updateListeningForBackCallbacks();
|
|
}
|
|
|
|
@Override // android.app.Dialog, android.view.Window.Callback
|
|
public void onDetachedFromWindow() {
|
|
EdgeToEdgeCallback edgeToEdgeCallback = this.edgeToEdgeCallback;
|
|
if (edgeToEdgeCallback != null) {
|
|
edgeToEdgeCallback.setWindow(null);
|
|
}
|
|
MaterialBackOrchestrator materialBackOrchestrator = this.backOrchestrator;
|
|
if (materialBackOrchestrator != null) {
|
|
materialBackOrchestrator.stopListeningForBackCallbacks();
|
|
}
|
|
}
|
|
|
|
@Override // android.app.Dialog, android.content.DialogInterface
|
|
public void cancel() {
|
|
BottomSheetBehavior<FrameLayout> 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;
|
|
}
|
|
|
|
public BottomSheetBehavior<FrameLayout> getBehavior() {
|
|
if (this.behavior == null) {
|
|
ensureContainerAndBehavior();
|
|
}
|
|
return this.behavior;
|
|
}
|
|
|
|
private FrameLayout ensureContainerAndBehavior() {
|
|
if (this.container == null) {
|
|
FrameLayout frameLayout = (FrameLayout) View.inflate(getContext(), R.layout.design_bottom_sheet_dialog, null);
|
|
this.container = frameLayout;
|
|
this.coordinator = (CoordinatorLayout) frameLayout.findViewById(R.id.coordinator);
|
|
FrameLayout frameLayout2 = (FrameLayout) this.container.findViewById(R.id.design_bottom_sheet);
|
|
this.bottomSheet = frameLayout2;
|
|
BottomSheetBehavior<FrameLayout> from = BottomSheetBehavior.from(frameLayout2);
|
|
this.behavior = from;
|
|
from.addBottomSheetCallback(this.bottomSheetCallback);
|
|
this.behavior.setHideable(this.cancelable);
|
|
this.backOrchestrator = new MaterialBackOrchestrator(this.behavior, this.bottomSheet);
|
|
}
|
|
return this.container;
|
|
}
|
|
|
|
private View wrapInBottomSheet(int i, View view, ViewGroup.LayoutParams layoutParams) {
|
|
ensureContainerAndBehavior();
|
|
CoordinatorLayout coordinatorLayout = (CoordinatorLayout) this.container.findViewById(R.id.coordinator);
|
|
if (i != 0 && view == null) {
|
|
view = getLayoutInflater().inflate(i, (ViewGroup) coordinatorLayout, false);
|
|
}
|
|
if (this.edgeToEdgeEnabled) {
|
|
ViewCompat.setOnApplyWindowInsetsListener(this.bottomSheet, new OnApplyWindowInsetsListener() { // from class: com.google.android.material.bottomsheet.BottomSheetDialog.1
|
|
@Override // androidx.core.view.OnApplyWindowInsetsListener
|
|
public WindowInsetsCompat onApplyWindowInsets(View view2, WindowInsetsCompat windowInsetsCompat) {
|
|
if (BottomSheetDialog.this.edgeToEdgeCallback != null) {
|
|
BottomSheetDialog.this.behavior.removeBottomSheetCallback(BottomSheetDialog.this.edgeToEdgeCallback);
|
|
}
|
|
if (windowInsetsCompat != null) {
|
|
BottomSheetDialog.this.edgeToEdgeCallback = new EdgeToEdgeCallback(BottomSheetDialog.this.bottomSheet, windowInsetsCompat);
|
|
BottomSheetDialog.this.edgeToEdgeCallback.setWindow(BottomSheetDialog.this.getWindow());
|
|
BottomSheetDialog.this.behavior.addBottomSheetCallback(BottomSheetDialog.this.edgeToEdgeCallback);
|
|
}
|
|
return windowInsetsCompat;
|
|
}
|
|
});
|
|
}
|
|
this.bottomSheet.removeAllViews();
|
|
if (layoutParams == null) {
|
|
this.bottomSheet.addView(view);
|
|
} else {
|
|
this.bottomSheet.addView(view, layoutParams);
|
|
}
|
|
coordinatorLayout.findViewById(R.id.touch_outside).setOnClickListener(new View.OnClickListener() { // from class: com.google.android.material.bottomsheet.BottomSheetDialog.2
|
|
@Override // android.view.View.OnClickListener
|
|
public void onClick(View view2) {
|
|
if (BottomSheetDialog.this.cancelable && BottomSheetDialog.this.isShowing() && BottomSheetDialog.this.shouldWindowCloseOnTouchOutside()) {
|
|
BottomSheetDialog.this.cancel();
|
|
}
|
|
}
|
|
});
|
|
ViewCompat.setAccessibilityDelegate(this.bottomSheet, new AccessibilityDelegateCompat() { // from class: com.google.android.material.bottomsheet.BottomSheetDialog.3
|
|
@Override // androidx.core.view.AccessibilityDelegateCompat
|
|
public void onInitializeAccessibilityNodeInfo(View view2, AccessibilityNodeInfoCompat accessibilityNodeInfoCompat) {
|
|
super.onInitializeAccessibilityNodeInfo(view2, accessibilityNodeInfoCompat);
|
|
if (BottomSheetDialog.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 && BottomSheetDialog.this.cancelable) {
|
|
BottomSheetDialog.this.cancel();
|
|
return true;
|
|
}
|
|
return super.performAccessibilityAction(view2, i2, bundle);
|
|
}
|
|
});
|
|
this.bottomSheet.setOnTouchListener(new View.OnTouchListener() { // from class: com.google.android.material.bottomsheet.BottomSheetDialog.4
|
|
@Override // android.view.View.OnTouchListener
|
|
public boolean onTouch(View view2, MotionEvent motionEvent) {
|
|
return true;
|
|
}
|
|
});
|
|
return this.container;
|
|
}
|
|
|
|
private void updateListeningForBackCallbacks() {
|
|
MaterialBackOrchestrator materialBackOrchestrator = this.backOrchestrator;
|
|
if (materialBackOrchestrator == null) {
|
|
return;
|
|
}
|
|
if (this.cancelable) {
|
|
materialBackOrchestrator.startListeningForBackCallbacks();
|
|
} else {
|
|
materialBackOrchestrator.stopListeningForBackCallbacks();
|
|
}
|
|
}
|
|
|
|
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) {
|
|
if (i != 0) {
|
|
return i;
|
|
}
|
|
TypedValue typedValue = new TypedValue();
|
|
if (context.getTheme().resolveAttribute(R.attr.bottomSheetDialogTheme, typedValue, true)) {
|
|
return typedValue.resourceId;
|
|
}
|
|
return R.style.Theme_Design_Light_BottomSheetDialog;
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
public void removeDefaultCallback() {
|
|
this.behavior.removeBottomSheetCallback(this.bottomSheetCallback);
|
|
}
|
|
|
|
/* loaded from: classes2.dex */
|
|
private static class EdgeToEdgeCallback extends BottomSheetBehavior.BottomSheetCallback {
|
|
private final WindowInsetsCompat insetsCompat;
|
|
private final Boolean lightBottomSheet;
|
|
private boolean lightStatusBar;
|
|
private Window window;
|
|
|
|
private EdgeToEdgeCallback(View view, WindowInsetsCompat windowInsetsCompat) {
|
|
ColorStateList backgroundTintList;
|
|
this.insetsCompat = windowInsetsCompat;
|
|
MaterialShapeDrawable materialShapeDrawable = BottomSheetBehavior.from(view).getMaterialShapeDrawable();
|
|
if (materialShapeDrawable != null) {
|
|
backgroundTintList = materialShapeDrawable.getFillColor();
|
|
} else {
|
|
backgroundTintList = ViewCompat.getBackgroundTintList(view);
|
|
}
|
|
if (backgroundTintList != null) {
|
|
this.lightBottomSheet = Boolean.valueOf(MaterialColors.isColorLight(backgroundTintList.getDefaultColor()));
|
|
return;
|
|
}
|
|
Integer backgroundColor = ViewUtils.getBackgroundColor(view);
|
|
if (backgroundColor != null) {
|
|
this.lightBottomSheet = Boolean.valueOf(MaterialColors.isColorLight(backgroundColor.intValue()));
|
|
} else {
|
|
this.lightBottomSheet = null;
|
|
}
|
|
}
|
|
|
|
@Override // com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
|
|
public void onStateChanged(View view, int i) {
|
|
setPaddingForPosition(view);
|
|
}
|
|
|
|
@Override // com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
|
|
public void onSlide(View view, float f) {
|
|
setPaddingForPosition(view);
|
|
}
|
|
|
|
@Override // com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
|
|
void onLayout(View view) {
|
|
setPaddingForPosition(view);
|
|
}
|
|
|
|
void setWindow(Window window) {
|
|
if (this.window == window) {
|
|
return;
|
|
}
|
|
this.window = window;
|
|
if (window != null) {
|
|
this.lightStatusBar = WindowCompat.getInsetsController(window, window.getDecorView()).isAppearanceLightStatusBars();
|
|
}
|
|
}
|
|
|
|
private void setPaddingForPosition(View view) {
|
|
if (view.getTop() < this.insetsCompat.getSystemWindowInsetTop()) {
|
|
Window window = this.window;
|
|
if (window != null) {
|
|
Boolean bool = this.lightBottomSheet;
|
|
EdgeToEdgeUtils.setLightStatusBar(window, bool == null ? this.lightStatusBar : bool.booleanValue());
|
|
}
|
|
view.setPadding(view.getPaddingLeft(), this.insetsCompat.getSystemWindowInsetTop() - view.getTop(), view.getPaddingRight(), view.getPaddingBottom());
|
|
return;
|
|
}
|
|
if (view.getTop() != 0) {
|
|
Window window2 = this.window;
|
|
if (window2 != null) {
|
|
EdgeToEdgeUtils.setLightStatusBar(window2, this.lightStatusBar);
|
|
}
|
|
view.setPadding(view.getPaddingLeft(), 0, view.getPaddingRight(), view.getPaddingBottom());
|
|
}
|
|
}
|
|
}
|
|
|
|
@Deprecated
|
|
public static void setLightStatusBar(View view, boolean z) {
|
|
int systemUiVisibility = view.getSystemUiVisibility();
|
|
view.setSystemUiVisibility(z ? systemUiVisibility | 8192 : systemUiVisibility & (-8193));
|
|
}
|
|
}
|