discord-jadx/app/src/main/java/androidx/recyclerview/widget/SnapHelper.java

157 lines
6.9 KiB
Java

package androidx.recyclerview.widget;
import android.content.Context;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.animation.DecelerateInterpolator;
import android.widget.Scroller;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
public abstract class SnapHelper extends RecyclerView.OnFlingListener {
public static final float MILLISECONDS_PER_INCH = 100.0f;
private Scroller mGravityScroller;
public RecyclerView mRecyclerView;
private final RecyclerView.OnScrollListener mScrollListener = new AnonymousClass1();
/* renamed from: androidx.recyclerview.widget.SnapHelper$1 reason: invalid class name */
public class AnonymousClass1 extends RecyclerView.OnScrollListener {
public boolean mScrolled = false;
public AnonymousClass1() {
}
@Override // androidx.recyclerview.widget.RecyclerView.OnScrollListener
public void onScrollStateChanged(RecyclerView recyclerView, int i) {
super.onScrollStateChanged(recyclerView, i);
if (i == 0 && this.mScrolled) {
this.mScrolled = false;
SnapHelper.this.snapToTargetExistingView();
}
}
@Override // androidx.recyclerview.widget.RecyclerView.OnScrollListener
public void onScrolled(RecyclerView recyclerView, int i, int i2) {
if (i != 0 || i2 != 0) {
this.mScrolled = true;
}
}
}
/* renamed from: androidx.recyclerview.widget.SnapHelper$2 reason: invalid class name */
public class AnonymousClass2 extends LinearSmoothScroller {
public AnonymousClass2(Context context) {
super(context);
}
@Override // androidx.recyclerview.widget.LinearSmoothScroller
public float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
return 100.0f / ((float) displayMetrics.densityDpi);
}
@Override // androidx.recyclerview.widget.LinearSmoothScroller, androidx.recyclerview.widget.RecyclerView.SmoothScroller
public void onTargetFound(View view, RecyclerView.State state, RecyclerView.SmoothScroller.Action action) {
SnapHelper snapHelper = SnapHelper.this;
RecyclerView recyclerView = snapHelper.mRecyclerView;
if (recyclerView != null) {
int[] calculateDistanceToFinalSnap = snapHelper.calculateDistanceToFinalSnap(recyclerView.getLayoutManager(), view);
int i = calculateDistanceToFinalSnap[0];
int i2 = calculateDistanceToFinalSnap[1];
int calculateTimeForDeceleration = calculateTimeForDeceleration(Math.max(Math.abs(i), Math.abs(i2)));
if (calculateTimeForDeceleration > 0) {
action.update(i, i2, calculateTimeForDeceleration, this.mDecelerateInterpolator);
}
}
}
}
private void destroyCallbacks() {
this.mRecyclerView.removeOnScrollListener(this.mScrollListener);
this.mRecyclerView.setOnFlingListener(null);
}
private void setupCallbacks() throws IllegalStateException {
if (this.mRecyclerView.getOnFlingListener() == null) {
this.mRecyclerView.addOnScrollListener(this.mScrollListener);
this.mRecyclerView.setOnFlingListener(this);
return;
}
throw new IllegalStateException("An instance of OnFlingListener already set.");
}
private boolean snapFromFling(@NonNull RecyclerView.LayoutManager layoutManager, int i, int i2) {
RecyclerView.SmoothScroller createScroller;
int findTargetSnapPosition;
if (!(layoutManager instanceof RecyclerView.SmoothScroller.ScrollVectorProvider) || (createScroller = createScroller(layoutManager)) == null || (findTargetSnapPosition = findTargetSnapPosition(layoutManager, i, i2)) == -1) {
return false;
}
createScroller.setTargetPosition(findTargetSnapPosition);
layoutManager.startSmoothScroll(createScroller);
return true;
}
public void attachToRecyclerView(@Nullable RecyclerView recyclerView) throws IllegalStateException {
RecyclerView recyclerView2 = this.mRecyclerView;
if (recyclerView2 != recyclerView) {
if (recyclerView2 != null) {
destroyCallbacks();
}
this.mRecyclerView = recyclerView;
if (recyclerView != null) {
setupCallbacks();
this.mGravityScroller = new Scroller(this.mRecyclerView.getContext(), new DecelerateInterpolator());
snapToTargetExistingView();
}
}
}
@Nullable
public abstract int[] calculateDistanceToFinalSnap(@NonNull RecyclerView.LayoutManager layoutManager, @NonNull View view);
public int[] calculateScrollDistance(int i, int i2) {
this.mGravityScroller.fling(0, 0, i, i2, Integer.MIN_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE);
return new int[]{this.mGravityScroller.getFinalX(), this.mGravityScroller.getFinalY()};
}
@Nullable
public RecyclerView.SmoothScroller createScroller(RecyclerView.LayoutManager layoutManager) {
return createSnapScroller(layoutManager);
}
@Nullable
@Deprecated
public LinearSmoothScroller createSnapScroller(RecyclerView.LayoutManager layoutManager) {
if (!(layoutManager instanceof RecyclerView.SmoothScroller.ScrollVectorProvider)) {
return null;
}
return new AnonymousClass2(this.mRecyclerView.getContext());
}
@Nullable
public abstract View findSnapView(RecyclerView.LayoutManager layoutManager);
public abstract int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int i, int i2);
@Override // androidx.recyclerview.widget.RecyclerView.OnFlingListener
public boolean onFling(int i, int i2) {
RecyclerView.LayoutManager layoutManager = this.mRecyclerView.getLayoutManager();
if (layoutManager == null || this.mRecyclerView.getAdapter() == null) {
return false;
}
int minFlingVelocity = this.mRecyclerView.getMinFlingVelocity();
return (Math.abs(i2) > minFlingVelocity || Math.abs(i) > minFlingVelocity) && snapFromFling(layoutManager, i, i2);
}
public void snapToTargetExistingView() {
RecyclerView.LayoutManager layoutManager;
View findSnapView;
RecyclerView recyclerView = this.mRecyclerView;
if (recyclerView != null && (layoutManager = recyclerView.getLayoutManager()) != null && (findSnapView = findSnapView(layoutManager)) != null) {
int[] calculateDistanceToFinalSnap = calculateDistanceToFinalSnap(layoutManager, findSnapView);
if (calculateDistanceToFinalSnap[0] != 0 || calculateDistanceToFinalSnap[1] != 0) {
this.mRecyclerView.smoothScrollBy(calculateDistanceToFinalSnap[0], calculateDistanceToFinalSnap[1]);
}
}
}
}