jimu-decompiled/sources/com/google/android/material/bottomsheet/BottomSheetBehavior.java
2025-05-13 19:24:51 +02:00

754 lines
28 KiB
Java

package com.google.android.material.bottomsheet;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.view.ViewParent;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.core.math.MathUtils;
import androidx.core.view.ViewCompat;
import androidx.customview.view.AbsSavedState;
import androidx.customview.widget.ViewDragHelper;
import com.google.android.material.R$dimen;
import com.google.android.material.R$styleable;
import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.Map;
/* loaded from: classes.dex */
public class BottomSheetBehavior<V extends View> extends CoordinatorLayout.Behavior<V> {
private boolean a;
private float b;
private int c;
private boolean d;
private int e;
private int f;
int g;
int h;
int i;
boolean j;
private boolean k;
int l;
ViewDragHelper m;
private boolean n;
private int o;
private boolean p;
int q;
WeakReference<V> r;
WeakReference<View> s;
private BottomSheetCallback t;
private VelocityTracker u;
int v;
private int w;
boolean x;
private Map<View, Integer> y;
private final ViewDragHelper.Callback z;
public static abstract class BottomSheetCallback {
public abstract void a(View view, float f);
public abstract void a(View view, int i);
}
protected static class SavedState extends AbsSavedState {
public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.ClassLoaderCreator<SavedState>() { // from class: com.google.android.material.bottomsheet.BottomSheetBehavior.SavedState.1
@Override // android.os.Parcelable.Creator
public SavedState[] newArray(int i) {
return new SavedState[i];
}
/* JADX WARN: Can't rename method to resolve collision */
@Override // android.os.Parcelable.ClassLoaderCreator
public SavedState createFromParcel(Parcel parcel, ClassLoader classLoader) {
return new SavedState(parcel, classLoader);
}
@Override // android.os.Parcelable.Creator
public SavedState createFromParcel(Parcel parcel) {
return new SavedState(parcel, (ClassLoader) null);
}
};
final int state;
public SavedState(Parcel parcel) {
this(parcel, (ClassLoader) null);
}
@Override // androidx.customview.view.AbsSavedState, android.os.Parcelable
public void writeToParcel(Parcel parcel, int i) {
super.writeToParcel(parcel, i);
parcel.writeInt(this.state);
}
public SavedState(Parcel parcel, ClassLoader classLoader) {
super(parcel, classLoader);
this.state = parcel.readInt();
}
public SavedState(Parcelable parcelable, int i) {
super(parcelable);
this.state = i;
}
}
private class SettleRunnable implements Runnable {
private final View a;
private final int b;
SettleRunnable(View view, int i) {
this.a = view;
this.b = i;
}
@Override // java.lang.Runnable
public void run() {
ViewDragHelper viewDragHelper = BottomSheetBehavior.this.m;
if (viewDragHelper == null || !viewDragHelper.a(true)) {
BottomSheetBehavior.this.c(this.b);
} else {
ViewCompat.a(this.a, this);
}
}
}
public BottomSheetBehavior() {
this.a = true;
this.l = 4;
this.z = new ViewDragHelper.Callback() { // from class: com.google.android.material.bottomsheet.BottomSheetBehavior.2
@Override // androidx.customview.widget.ViewDragHelper.Callback
public void a(View view, int i, int i2, int i3, int i4) {
BottomSheetBehavior.this.a(i2);
}
@Override // androidx.customview.widget.ViewDragHelper.Callback
public boolean b(View view, int i) {
WeakReference<V> weakReference;
View view2;
BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.this;
int i2 = bottomSheetBehavior.l;
if (i2 == 1 || bottomSheetBehavior.x) {
return false;
}
return ((i2 == 3 && bottomSheetBehavior.v == i && (view2 = bottomSheetBehavior.s.get()) != null && view2.canScrollVertically(-1)) || (weakReference = BottomSheetBehavior.this.r) == null || weakReference.get() != view) ? false : true;
}
@Override // androidx.customview.widget.ViewDragHelper.Callback
public void c(int i) {
if (i == 1) {
BottomSheetBehavior.this.c(1);
}
}
@Override // androidx.customview.widget.ViewDragHelper.Callback
public void a(View view, float f, float f2) {
int i;
int i2;
int i3;
int i4 = 4;
if (f2 >= 0.0f) {
BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.this;
if (bottomSheetBehavior.j && bottomSheetBehavior.a(view, f2) && (view.getTop() > BottomSheetBehavior.this.i || Math.abs(f) < Math.abs(f2))) {
i3 = BottomSheetBehavior.this.q;
i4 = 5;
} else if (f2 == 0.0f || Math.abs(f) > Math.abs(f2)) {
int top = view.getTop();
if (!BottomSheetBehavior.this.a) {
BottomSheetBehavior bottomSheetBehavior2 = BottomSheetBehavior.this;
int i5 = bottomSheetBehavior2.h;
if (top < i5) {
if (top >= Math.abs(top - bottomSheetBehavior2.i)) {
i2 = BottomSheetBehavior.this.h;
}
i3 = 0;
i4 = 3;
} else if (Math.abs(top - i5) < Math.abs(top - BottomSheetBehavior.this.i)) {
i2 = BottomSheetBehavior.this.h;
} else {
i = BottomSheetBehavior.this.i;
}
i3 = i2;
i4 = 6;
} else if (Math.abs(top - BottomSheetBehavior.this.g) < Math.abs(top - BottomSheetBehavior.this.i)) {
i3 = BottomSheetBehavior.this.g;
i4 = 3;
} else {
i = BottomSheetBehavior.this.i;
}
i3 = i;
} else {
i3 = BottomSheetBehavior.this.i;
}
} else if (BottomSheetBehavior.this.a) {
i3 = BottomSheetBehavior.this.g;
i4 = 3;
} else {
int top2 = view.getTop();
int i6 = BottomSheetBehavior.this.h;
if (top2 > i6) {
i3 = i6;
i4 = 6;
}
i3 = 0;
i4 = 3;
}
if (!BottomSheetBehavior.this.m.c(view.getLeft(), i3)) {
BottomSheetBehavior.this.c(i4);
} else {
BottomSheetBehavior.this.c(2);
ViewCompat.a(view, new SettleRunnable(view, i4));
}
}
@Override // androidx.customview.widget.ViewDragHelper.Callback
public int b(View view, int i, int i2) {
int c = BottomSheetBehavior.this.c();
BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.this;
return MathUtils.a(i, c, bottomSheetBehavior.j ? bottomSheetBehavior.q : bottomSheetBehavior.i);
}
@Override // androidx.customview.widget.ViewDragHelper.Callback
public int b(View view) {
BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.this;
if (bottomSheetBehavior.j) {
return bottomSheetBehavior.q;
}
return bottomSheetBehavior.i;
}
@Override // androidx.customview.widget.ViewDragHelper.Callback
public int a(View view, int i, int i2) {
return view.getLeft();
}
};
}
private void e() {
this.v = -1;
VelocityTracker velocityTracker = this.u;
if (velocityTracker != null) {
velocityTracker.recycle();
this.u = null;
}
}
public void c(boolean z) {
this.k = z;
}
@Override // androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior
public Parcelable d(CoordinatorLayout coordinatorLayout, V v) {
return new SavedState(super.d(coordinatorLayout, v), this.l);
}
private float d() {
VelocityTracker velocityTracker = this.u;
if (velocityTracker == null) {
return 0.0f;
}
velocityTracker.computeCurrentVelocity(1000, this.b);
return this.u.getYVelocity(this.v);
}
@Override // androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior
public void a(CoordinatorLayout coordinatorLayout, V v, Parcelable parcelable) {
SavedState savedState = (SavedState) parcelable;
super.a(coordinatorLayout, (CoordinatorLayout) v, savedState.getSuperState());
int i = savedState.state;
if (i == 1 || i == 2) {
this.l = 4;
} else {
this.l = i;
}
}
@Override // androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior
public boolean b(CoordinatorLayout coordinatorLayout, V v, MotionEvent motionEvent) {
if (!v.isShown()) {
return false;
}
int actionMasked = motionEvent.getActionMasked();
if (this.l == 1 && actionMasked == 0) {
return true;
}
ViewDragHelper viewDragHelper = this.m;
if (viewDragHelper != null) {
viewDragHelper.a(motionEvent);
}
if (actionMasked == 0) {
e();
}
if (this.u == null) {
this.u = VelocityTracker.obtain();
}
this.u.addMovement(motionEvent);
if (actionMasked == 2 && !this.n && Math.abs(this.w - motionEvent.getY()) > this.m.c()) {
this.m.a(v, motionEvent.getPointerId(motionEvent.getActionIndex()));
}
return !this.n;
}
void c(int i) {
BottomSheetCallback bottomSheetCallback;
if (this.l == i) {
return;
}
this.l = i;
if (i == 6 || i == 3) {
d(true);
} else if (i == 5 || i == 4) {
d(false);
}
V v = this.r.get();
if (v == null || (bottomSheetCallback = this.t) == null) {
return;
}
bottomSheetCallback.a((View) v, i);
}
public BottomSheetBehavior(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
int i;
this.a = true;
this.l = 4;
this.z = new ViewDragHelper.Callback() { // from class: com.google.android.material.bottomsheet.BottomSheetBehavior.2
@Override // androidx.customview.widget.ViewDragHelper.Callback
public void a(View view, int i2, int i22, int i3, int i4) {
BottomSheetBehavior.this.a(i22);
}
@Override // androidx.customview.widget.ViewDragHelper.Callback
public boolean b(View view, int i2) {
WeakReference<V> weakReference;
View view2;
BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.this;
int i22 = bottomSheetBehavior.l;
if (i22 == 1 || bottomSheetBehavior.x) {
return false;
}
return ((i22 == 3 && bottomSheetBehavior.v == i2 && (view2 = bottomSheetBehavior.s.get()) != null && view2.canScrollVertically(-1)) || (weakReference = BottomSheetBehavior.this.r) == null || weakReference.get() != view) ? false : true;
}
@Override // androidx.customview.widget.ViewDragHelper.Callback
public void c(int i2) {
if (i2 == 1) {
BottomSheetBehavior.this.c(1);
}
}
@Override // androidx.customview.widget.ViewDragHelper.Callback
public void a(View view, float f, float f2) {
int i2;
int i22;
int i3;
int i4 = 4;
if (f2 >= 0.0f) {
BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.this;
if (bottomSheetBehavior.j && bottomSheetBehavior.a(view, f2) && (view.getTop() > BottomSheetBehavior.this.i || Math.abs(f) < Math.abs(f2))) {
i3 = BottomSheetBehavior.this.q;
i4 = 5;
} else if (f2 == 0.0f || Math.abs(f) > Math.abs(f2)) {
int top = view.getTop();
if (!BottomSheetBehavior.this.a) {
BottomSheetBehavior bottomSheetBehavior2 = BottomSheetBehavior.this;
int i5 = bottomSheetBehavior2.h;
if (top < i5) {
if (top >= Math.abs(top - bottomSheetBehavior2.i)) {
i22 = BottomSheetBehavior.this.h;
}
i3 = 0;
i4 = 3;
} else if (Math.abs(top - i5) < Math.abs(top - BottomSheetBehavior.this.i)) {
i22 = BottomSheetBehavior.this.h;
} else {
i2 = BottomSheetBehavior.this.i;
}
i3 = i22;
i4 = 6;
} else if (Math.abs(top - BottomSheetBehavior.this.g) < Math.abs(top - BottomSheetBehavior.this.i)) {
i3 = BottomSheetBehavior.this.g;
i4 = 3;
} else {
i2 = BottomSheetBehavior.this.i;
}
i3 = i2;
} else {
i3 = BottomSheetBehavior.this.i;
}
} else if (BottomSheetBehavior.this.a) {
i3 = BottomSheetBehavior.this.g;
i4 = 3;
} else {
int top2 = view.getTop();
int i6 = BottomSheetBehavior.this.h;
if (top2 > i6) {
i3 = i6;
i4 = 6;
}
i3 = 0;
i4 = 3;
}
if (!BottomSheetBehavior.this.m.c(view.getLeft(), i3)) {
BottomSheetBehavior.this.c(i4);
} else {
BottomSheetBehavior.this.c(2);
ViewCompat.a(view, new SettleRunnable(view, i4));
}
}
@Override // androidx.customview.widget.ViewDragHelper.Callback
public int b(View view, int i2, int i22) {
int c = BottomSheetBehavior.this.c();
BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.this;
return MathUtils.a(i2, c, bottomSheetBehavior.j ? bottomSheetBehavior.q : bottomSheetBehavior.i);
}
@Override // androidx.customview.widget.ViewDragHelper.Callback
public int b(View view) {
BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.this;
if (bottomSheetBehavior.j) {
return bottomSheetBehavior.q;
}
return bottomSheetBehavior.i;
}
@Override // androidx.customview.widget.ViewDragHelper.Callback
public int a(View view, int i2, int i22) {
return view.getLeft();
}
};
TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, R$styleable.BottomSheetBehavior_Layout);
TypedValue peekValue = obtainStyledAttributes.peekValue(R$styleable.BottomSheetBehavior_Layout_behavior_peekHeight);
if (peekValue != null && (i = peekValue.data) == -1) {
b(i);
} else {
b(obtainStyledAttributes.getDimensionPixelSize(R$styleable.BottomSheetBehavior_Layout_behavior_peekHeight, -1));
}
b(obtainStyledAttributes.getBoolean(R$styleable.BottomSheetBehavior_Layout_behavior_hideable, false));
a(obtainStyledAttributes.getBoolean(R$styleable.BottomSheetBehavior_Layout_behavior_fitToContents, true));
c(obtainStyledAttributes.getBoolean(R$styleable.BottomSheetBehavior_Layout_behavior_skipCollapsed, false));
obtainStyledAttributes.recycle();
this.b = ViewConfiguration.get(context).getScaledMaximumFlingVelocity();
}
private void d(boolean z) {
WeakReference<V> weakReference = this.r;
if (weakReference == null) {
return;
}
ViewParent parent = weakReference.get().getParent();
if (parent instanceof CoordinatorLayout) {
CoordinatorLayout coordinatorLayout = (CoordinatorLayout) parent;
int childCount = coordinatorLayout.getChildCount();
if (Build.VERSION.SDK_INT >= 16 && z) {
if (this.y != null) {
return;
} else {
this.y = new HashMap(childCount);
}
}
for (int i = 0; i < childCount; i++) {
View childAt = coordinatorLayout.getChildAt(i);
if (childAt != this.r.get()) {
if (!z) {
Map<View, Integer> map = this.y;
if (map != null && map.containsKey(childAt)) {
ViewCompat.f(childAt, this.y.get(childAt).intValue());
}
} else {
if (Build.VERSION.SDK_INT >= 16) {
this.y.put(childAt, Integer.valueOf(childAt.getImportantForAccessibility()));
}
ViewCompat.f(childAt, 4);
}
}
}
if (z) {
return;
}
this.y = null;
}
}
@Override // androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior
public boolean a(CoordinatorLayout coordinatorLayout, V v, int i) {
if (ViewCompat.h(coordinatorLayout) && !ViewCompat.h(v)) {
v.setFitsSystemWindows(true);
}
int top = v.getTop();
coordinatorLayout.c(v, i);
this.q = coordinatorLayout.getHeight();
if (this.d) {
if (this.e == 0) {
this.e = coordinatorLayout.getResources().getDimensionPixelSize(R$dimen.design_bottom_sheet_peek_height_min);
}
this.f = Math.max(this.e, this.q - ((coordinatorLayout.getWidth() * 9) / 16));
} else {
this.f = this.c;
}
this.g = Math.max(0, this.q - v.getHeight());
this.h = this.q / 2;
b();
int i2 = this.l;
if (i2 == 3) {
ViewCompat.d((View) v, c());
} else if (i2 == 6) {
ViewCompat.d((View) v, this.h);
} else if (this.j && i2 == 5) {
ViewCompat.d((View) v, this.q);
} else {
int i3 = this.l;
if (i3 == 4) {
ViewCompat.d((View) v, this.i);
} else if (i3 == 1 || i3 == 2) {
ViewCompat.d((View) v, top - v.getTop());
}
}
if (this.m == null) {
this.m = ViewDragHelper.a(coordinatorLayout, this.z);
}
this.r = new WeakReference<>(v);
this.s = new WeakReference<>(a(v));
return true;
}
/* JADX INFO: Access modifiers changed from: private */
public int c() {
if (this.a) {
return this.g;
}
return 0;
}
@Override // androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior
public boolean b(CoordinatorLayout coordinatorLayout, V v, View view, View view2, int i, int i2) {
this.o = 0;
this.p = false;
return (i & 2) != 0;
}
public final void b(int i) {
WeakReference<V> weakReference;
V v;
boolean z = true;
if (i == -1) {
if (!this.d) {
this.d = true;
}
z = false;
} else {
if (this.d || this.c != i) {
this.d = false;
this.c = Math.max(0, i);
this.i = this.q - i;
}
z = false;
}
if (!z || this.l != 4 || (weakReference = this.r) == null || (v = weakReference.get()) == null) {
return;
}
v.requestLayout();
}
public void b(boolean z) {
this.j = z;
}
private void b() {
if (this.a) {
this.i = Math.max(this.q - this.f, this.g);
} else {
this.i = this.q - this.f;
}
}
@Override // androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior
public boolean a(CoordinatorLayout coordinatorLayout, V v, MotionEvent motionEvent) {
ViewDragHelper viewDragHelper;
if (!v.isShown()) {
this.n = true;
return false;
}
int actionMasked = motionEvent.getActionMasked();
if (actionMasked == 0) {
e();
}
if (this.u == null) {
this.u = VelocityTracker.obtain();
}
this.u.addMovement(motionEvent);
if (actionMasked == 0) {
int x = (int) motionEvent.getX();
this.w = (int) motionEvent.getY();
WeakReference<View> weakReference = this.s;
View view = weakReference != null ? weakReference.get() : null;
if (view != null && coordinatorLayout.a(view, x, this.w)) {
this.v = motionEvent.getPointerId(motionEvent.getActionIndex());
this.x = true;
}
this.n = this.v == -1 && !coordinatorLayout.a(v, x, this.w);
} else if (actionMasked == 1 || actionMasked == 3) {
this.x = false;
this.v = -1;
if (this.n) {
this.n = false;
return false;
}
}
if (!this.n && (viewDragHelper = this.m) != null && viewDragHelper.b(motionEvent)) {
return true;
}
WeakReference<View> weakReference2 = this.s;
View view2 = weakReference2 != null ? weakReference2.get() : null;
return (actionMasked != 2 || view2 == null || this.n || this.l == 1 || coordinatorLayout.a(view2, (int) motionEvent.getX(), (int) motionEvent.getY()) || this.m == null || Math.abs(((float) this.w) - motionEvent.getY()) <= ((float) this.m.c())) ? false : true;
}
@Override // androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior
public void a(CoordinatorLayout coordinatorLayout, V v, View view, int i, int i2, int[] iArr, int i3) {
if (i3 != 1 && view == this.s.get()) {
int top = v.getTop();
int i4 = top - i2;
if (i2 > 0) {
if (i4 < c()) {
iArr[1] = top - c();
ViewCompat.d((View) v, -iArr[1]);
c(3);
} else {
iArr[1] = i2;
ViewCompat.d((View) v, -i2);
c(1);
}
} else if (i2 < 0 && !view.canScrollVertically(-1)) {
int i5 = this.i;
if (i4 > i5 && !this.j) {
iArr[1] = top - i5;
ViewCompat.d((View) v, -iArr[1]);
c(4);
} else {
iArr[1] = i2;
ViewCompat.d((View) v, -i2);
c(1);
}
}
a(v.getTop());
this.o = i2;
this.p = true;
}
}
@Override // androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior
public void a(CoordinatorLayout coordinatorLayout, V v, View view, int i) {
int i2;
int i3 = 3;
if (v.getTop() == c()) {
c(3);
return;
}
if (view == this.s.get() && this.p) {
if (this.o > 0) {
i2 = c();
} else if (this.j && a(v, d())) {
i2 = this.q;
i3 = 5;
} else {
if (this.o == 0) {
int top = v.getTop();
if (this.a) {
if (Math.abs(top - this.g) < Math.abs(top - this.i)) {
i2 = this.g;
} else {
i2 = this.i;
}
} else {
int i4 = this.h;
if (top < i4) {
if (top < Math.abs(top - this.i)) {
i2 = 0;
} else {
i2 = this.h;
}
} else if (Math.abs(top - i4) < Math.abs(top - this.i)) {
i2 = this.h;
} else {
i2 = this.i;
}
i3 = 6;
}
} else {
i2 = this.i;
}
i3 = 4;
}
if (this.m.b(v, v.getLeft(), i2)) {
c(2);
ViewCompat.a(v, new SettleRunnable(v, i3));
} else {
c(i3);
}
this.p = false;
}
}
@Override // androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior
public boolean a(CoordinatorLayout coordinatorLayout, V v, View view, float f, float f2) {
return view == this.s.get() && (this.l != 3 || super.a(coordinatorLayout, (CoordinatorLayout) v, view, f, f2));
}
public void a(boolean z) {
if (this.a == z) {
return;
}
this.a = z;
if (this.r != null) {
b();
}
c((this.a && this.l == 6) ? 3 : this.l);
}
boolean a(View view, float f) {
if (this.k) {
return true;
}
return view.getTop() >= this.i && Math.abs((((float) view.getTop()) + (f * 0.1f)) - ((float) this.i)) / ((float) this.c) > 0.5f;
}
View a(View view) {
if (ViewCompat.y(view)) {
return view;
}
if (!(view instanceof ViewGroup)) {
return null;
}
ViewGroup viewGroup = (ViewGroup) view;
int childCount = viewGroup.getChildCount();
for (int i = 0; i < childCount; i++) {
View a = a(viewGroup.getChildAt(i));
if (a != null) {
return a;
}
}
return null;
}
void a(int i) {
BottomSheetCallback bottomSheetCallback;
V v = this.r.get();
if (v == null || (bottomSheetCallback = this.t) == null) {
return;
}
if (i > this.i) {
bottomSheetCallback.a(v, (r2 - i) / (this.q - r2));
} else {
bottomSheetCallback.a(v, (r2 - i) / (r2 - c()));
}
}
}