ADD week 5
This commit is contained in:
@@ -0,0 +1,420 @@
|
||||
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.Build;
|
||||
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: classes.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));
|
||||
}
|
||||
|
||||
@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 // 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override // androidx.activity.ComponentDialog, android.app.Dialog
|
||||
protected 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 bottomSheetDialog = BottomSheetDialog.this;
|
||||
bottomSheetDialog.edgeToEdgeCallback = new EdgeToEdgeCallback(bottomSheetDialog.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;
|
||||
}
|
||||
|
||||
void removeDefaultCallback() {
|
||||
this.behavior.removeBottomSheetCallback(this.bottomSheetCallback);
|
||||
}
|
||||
|
||||
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) {
|
||||
if (Build.VERSION.SDK_INT >= 23) {
|
||||
int systemUiVisibility = view.getSystemUiVisibility();
|
||||
view.setSystemUiVisibility(z ? systemUiVisibility | 8192 : systemUiVisibility & (-8193));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user