ADD week 5
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,93 @@
|
||||
package com.google.android.material.bottomsheet;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.FrameLayout;
|
||||
import androidx.appcompat.app.AppCompatDialogFragment;
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class BottomSheetDialogFragment extends AppCompatDialogFragment {
|
||||
private boolean waitingForDismissAllowingStateLoss;
|
||||
|
||||
public BottomSheetDialogFragment() {
|
||||
}
|
||||
|
||||
public BottomSheetDialogFragment(int i) {
|
||||
super(i);
|
||||
}
|
||||
|
||||
@Override // androidx.appcompat.app.AppCompatDialogFragment, androidx.fragment.app.DialogFragment
|
||||
public Dialog onCreateDialog(Bundle bundle) {
|
||||
return new BottomSheetDialog(getContext(), getTheme());
|
||||
}
|
||||
|
||||
@Override // androidx.fragment.app.DialogFragment
|
||||
public void dismiss() {
|
||||
if (tryDismissWithAnimation(false)) {
|
||||
return;
|
||||
}
|
||||
super.dismiss();
|
||||
}
|
||||
|
||||
@Override // androidx.fragment.app.DialogFragment
|
||||
public void dismissAllowingStateLoss() {
|
||||
if (tryDismissWithAnimation(true)) {
|
||||
return;
|
||||
}
|
||||
super.dismissAllowingStateLoss();
|
||||
}
|
||||
|
||||
private boolean tryDismissWithAnimation(boolean z) {
|
||||
Dialog dialog = getDialog();
|
||||
if (!(dialog instanceof BottomSheetDialog)) {
|
||||
return false;
|
||||
}
|
||||
BottomSheetDialog bottomSheetDialog = (BottomSheetDialog) dialog;
|
||||
BottomSheetBehavior<FrameLayout> behavior = bottomSheetDialog.getBehavior();
|
||||
if (!behavior.isHideable() || !bottomSheetDialog.getDismissWithAnimation()) {
|
||||
return false;
|
||||
}
|
||||
dismissWithAnimation(behavior, z);
|
||||
return true;
|
||||
}
|
||||
|
||||
private void dismissWithAnimation(BottomSheetBehavior<?> bottomSheetBehavior, boolean z) {
|
||||
this.waitingForDismissAllowingStateLoss = z;
|
||||
if (bottomSheetBehavior.getState() == 5) {
|
||||
dismissAfterAnimation();
|
||||
return;
|
||||
}
|
||||
if (getDialog() instanceof BottomSheetDialog) {
|
||||
((BottomSheetDialog) getDialog()).removeDefaultCallback();
|
||||
}
|
||||
bottomSheetBehavior.addBottomSheetCallback(new BottomSheetDismissCallback());
|
||||
bottomSheetBehavior.setState(5);
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: private */
|
||||
public void dismissAfterAnimation() {
|
||||
if (this.waitingForDismissAllowingStateLoss) {
|
||||
super.dismissAllowingStateLoss();
|
||||
} else {
|
||||
super.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
private class BottomSheetDismissCallback extends BottomSheetBehavior.BottomSheetCallback {
|
||||
@Override // com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
|
||||
public void onSlide(View view, float f) {
|
||||
}
|
||||
|
||||
private BottomSheetDismissCallback() {
|
||||
}
|
||||
|
||||
@Override // com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
|
||||
public void onStateChanged(View view, int i) {
|
||||
if (i == 5) {
|
||||
BottomSheetDialogFragment.this.dismissAfterAnimation();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,194 @@
|
||||
package com.google.android.material.bottomsheet;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
import androidx.appcompat.widget.AppCompatImageView;
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||
import androidx.core.view.AccessibilityDelegateCompat;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
|
||||
import androidx.core.view.accessibility.AccessibilityViewCommand;
|
||||
import com.google.android.material.R;
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior;
|
||||
import com.google.android.material.theme.overlay.MaterialThemeOverlay;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class BottomSheetDragHandleView extends AppCompatImageView implements AccessibilityManager.AccessibilityStateChangeListener {
|
||||
private static final int DEF_STYLE_RES = R.style.Widget_Material3_BottomSheet_DragHandle;
|
||||
private final AccessibilityManager accessibilityManager;
|
||||
private boolean accessibilityServiceEnabled;
|
||||
private BottomSheetBehavior<?> bottomSheetBehavior;
|
||||
private final BottomSheetBehavior.BottomSheetCallback bottomSheetCallback;
|
||||
private final String clickFeedback;
|
||||
private final String clickToCollapseActionLabel;
|
||||
private boolean clickToExpand;
|
||||
private final String clickToExpandActionLabel;
|
||||
private boolean interactable;
|
||||
|
||||
public BottomSheetDragHandleView(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public BottomSheetDragHandleView(Context context, AttributeSet attributeSet) {
|
||||
this(context, attributeSet, R.attr.bottomSheetDragHandleStyle);
|
||||
}
|
||||
|
||||
public BottomSheetDragHandleView(Context context, AttributeSet attributeSet, int i) {
|
||||
super(MaterialThemeOverlay.wrap(context, attributeSet, i, DEF_STYLE_RES), attributeSet, i);
|
||||
this.clickToExpandActionLabel = getResources().getString(R.string.bottomsheet_action_expand);
|
||||
this.clickToCollapseActionLabel = getResources().getString(R.string.bottomsheet_action_collapse);
|
||||
this.clickFeedback = getResources().getString(R.string.bottomsheet_drag_handle_clicked);
|
||||
this.bottomSheetCallback = new BottomSheetBehavior.BottomSheetCallback() { // from class: com.google.android.material.bottomsheet.BottomSheetDragHandleView.1
|
||||
@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) {
|
||||
BottomSheetDragHandleView.this.onBottomSheetStateChanged(i2);
|
||||
}
|
||||
};
|
||||
this.accessibilityManager = (AccessibilityManager) getContext().getSystemService("accessibility");
|
||||
updateInteractableState();
|
||||
ViewCompat.setAccessibilityDelegate(this, new AccessibilityDelegateCompat() { // from class: com.google.android.material.bottomsheet.BottomSheetDragHandleView.2
|
||||
@Override // androidx.core.view.AccessibilityDelegateCompat
|
||||
public void onPopulateAccessibilityEvent(View view, AccessibilityEvent accessibilityEvent) {
|
||||
super.onPopulateAccessibilityEvent(view, accessibilityEvent);
|
||||
if (accessibilityEvent.getEventType() == 1) {
|
||||
BottomSheetDragHandleView.this.expandOrCollapseBottomSheetIfPossible();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override // android.widget.ImageView, android.view.View
|
||||
protected void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
setBottomSheetBehavior(findParentBottomSheetBehavior());
|
||||
AccessibilityManager accessibilityManager = this.accessibilityManager;
|
||||
if (accessibilityManager != null) {
|
||||
accessibilityManager.addAccessibilityStateChangeListener(this);
|
||||
onAccessibilityStateChanged(this.accessibilityManager.isEnabled());
|
||||
}
|
||||
}
|
||||
|
||||
@Override // android.widget.ImageView, android.view.View
|
||||
protected void onDetachedFromWindow() {
|
||||
AccessibilityManager accessibilityManager = this.accessibilityManager;
|
||||
if (accessibilityManager != null) {
|
||||
accessibilityManager.removeAccessibilityStateChangeListener(this);
|
||||
}
|
||||
setBottomSheetBehavior(null);
|
||||
super.onDetachedFromWindow();
|
||||
}
|
||||
|
||||
@Override // android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener
|
||||
public void onAccessibilityStateChanged(boolean z) {
|
||||
this.accessibilityServiceEnabled = z;
|
||||
updateInteractableState();
|
||||
}
|
||||
|
||||
private void setBottomSheetBehavior(BottomSheetBehavior<?> bottomSheetBehavior) {
|
||||
BottomSheetBehavior<?> bottomSheetBehavior2 = this.bottomSheetBehavior;
|
||||
if (bottomSheetBehavior2 != null) {
|
||||
bottomSheetBehavior2.removeBottomSheetCallback(this.bottomSheetCallback);
|
||||
this.bottomSheetBehavior.setAccessibilityDelegateView(null);
|
||||
}
|
||||
this.bottomSheetBehavior = bottomSheetBehavior;
|
||||
if (bottomSheetBehavior != null) {
|
||||
bottomSheetBehavior.setAccessibilityDelegateView(this);
|
||||
onBottomSheetStateChanged(this.bottomSheetBehavior.getState());
|
||||
this.bottomSheetBehavior.addBottomSheetCallback(this.bottomSheetCallback);
|
||||
}
|
||||
updateInteractableState();
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: private */
|
||||
public void onBottomSheetStateChanged(int i) {
|
||||
if (i == 4) {
|
||||
this.clickToExpand = true;
|
||||
} else if (i == 3) {
|
||||
this.clickToExpand = false;
|
||||
}
|
||||
ViewCompat.replaceAccessibilityAction(this, AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK, this.clickToExpand ? this.clickToExpandActionLabel : this.clickToCollapseActionLabel, new AccessibilityViewCommand() { // from class: com.google.android.material.bottomsheet.BottomSheetDragHandleView$$ExternalSyntheticLambda0
|
||||
@Override // androidx.core.view.accessibility.AccessibilityViewCommand
|
||||
public final boolean perform(View view, AccessibilityViewCommand.CommandArguments commandArguments) {
|
||||
return BottomSheetDragHandleView.this.m192xa7b4c95f(view, commandArguments);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* renamed from: lambda$onBottomSheetStateChanged$0$com-google-android-material-bottomsheet-BottomSheetDragHandleView, reason: not valid java name */
|
||||
/* synthetic */ boolean m192xa7b4c95f(View view, AccessibilityViewCommand.CommandArguments commandArguments) {
|
||||
return expandOrCollapseBottomSheetIfPossible();
|
||||
}
|
||||
|
||||
private void updateInteractableState() {
|
||||
this.interactable = this.accessibilityServiceEnabled && this.bottomSheetBehavior != null;
|
||||
ViewCompat.setImportantForAccessibility(this, this.bottomSheetBehavior == null ? 2 : 1);
|
||||
setClickable(this.interactable);
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: private */
|
||||
public boolean expandOrCollapseBottomSheetIfPossible() {
|
||||
boolean z = false;
|
||||
if (!this.interactable) {
|
||||
return false;
|
||||
}
|
||||
announceAccessibilityEvent(this.clickFeedback);
|
||||
if (!this.bottomSheetBehavior.isFitToContents() && !this.bottomSheetBehavior.shouldSkipHalfExpandedStateWhenDragging()) {
|
||||
z = true;
|
||||
}
|
||||
int state = this.bottomSheetBehavior.getState();
|
||||
int i = 6;
|
||||
if (state == 4) {
|
||||
if (!z) {
|
||||
i = 3;
|
||||
}
|
||||
} else if (state != 3) {
|
||||
i = this.clickToExpand ? 3 : 4;
|
||||
} else if (!z) {
|
||||
i = 4;
|
||||
}
|
||||
this.bottomSheetBehavior.setState(i);
|
||||
return true;
|
||||
}
|
||||
|
||||
private void announceAccessibilityEvent(String str) {
|
||||
if (this.accessibilityManager == null) {
|
||||
return;
|
||||
}
|
||||
AccessibilityEvent obtain = AccessibilityEvent.obtain(16384);
|
||||
obtain.getText().add(str);
|
||||
this.accessibilityManager.sendAccessibilityEvent(obtain);
|
||||
}
|
||||
|
||||
private BottomSheetBehavior<?> findParentBottomSheetBehavior() {
|
||||
View view = this;
|
||||
while (true) {
|
||||
view = getParentView(view);
|
||||
if (view == null) {
|
||||
return null;
|
||||
}
|
||||
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
|
||||
if (layoutParams instanceof CoordinatorLayout.LayoutParams) {
|
||||
CoordinatorLayout.Behavior behavior = ((CoordinatorLayout.LayoutParams) layoutParams).getBehavior();
|
||||
if (behavior instanceof BottomSheetBehavior) {
|
||||
return (BottomSheetBehavior) behavior;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static View getParentView(View view) {
|
||||
Object parent = view.getParent();
|
||||
if (parent instanceof View) {
|
||||
return (View) parent;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package com.google.android.material.bottomsheet;
|
||||
|
||||
import android.view.View;
|
||||
import androidx.core.view.WindowInsetsAnimationCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import com.google.android.material.animation.AnimationUtils;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
class InsetsAnimationCallback extends WindowInsetsAnimationCompat.Callback {
|
||||
private int startTranslationY;
|
||||
private int startY;
|
||||
private final int[] tmpLocation;
|
||||
private final View view;
|
||||
|
||||
public InsetsAnimationCallback(View view) {
|
||||
super(0);
|
||||
this.tmpLocation = new int[2];
|
||||
this.view = view;
|
||||
}
|
||||
|
||||
@Override // androidx.core.view.WindowInsetsAnimationCompat.Callback
|
||||
public void onPrepare(WindowInsetsAnimationCompat windowInsetsAnimationCompat) {
|
||||
this.view.getLocationOnScreen(this.tmpLocation);
|
||||
this.startY = this.tmpLocation[1];
|
||||
}
|
||||
|
||||
@Override // androidx.core.view.WindowInsetsAnimationCompat.Callback
|
||||
public WindowInsetsAnimationCompat.BoundsCompat onStart(WindowInsetsAnimationCompat windowInsetsAnimationCompat, WindowInsetsAnimationCompat.BoundsCompat boundsCompat) {
|
||||
this.view.getLocationOnScreen(this.tmpLocation);
|
||||
int i = this.startY - this.tmpLocation[1];
|
||||
this.startTranslationY = i;
|
||||
this.view.setTranslationY(i);
|
||||
return boundsCompat;
|
||||
}
|
||||
|
||||
@Override // androidx.core.view.WindowInsetsAnimationCompat.Callback
|
||||
public WindowInsetsCompat onProgress(WindowInsetsCompat windowInsetsCompat, List<WindowInsetsAnimationCompat> list) {
|
||||
Iterator<WindowInsetsAnimationCompat> it = list.iterator();
|
||||
while (true) {
|
||||
if (!it.hasNext()) {
|
||||
break;
|
||||
}
|
||||
if ((it.next().getTypeMask() & WindowInsetsCompat.Type.ime()) != 0) {
|
||||
this.view.setTranslationY(AnimationUtils.lerp(this.startTranslationY, 0, r0.getInterpolatedFraction()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
return windowInsetsCompat;
|
||||
}
|
||||
|
||||
@Override // androidx.core.view.WindowInsetsAnimationCompat.Callback
|
||||
public void onEnd(WindowInsetsAnimationCompat windowInsetsAnimationCompat) {
|
||||
this.view.setTranslationY(0.0f);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user