161 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.recyclerview.widget;
 | |
| 
 | |
| import android.graphics.PointF;
 | |
| import android.view.View;
 | |
| import androidx.recyclerview.widget.RecyclerView;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class LinearSnapHelper extends SnapHelper {
 | |
|     private static final float INVALID_DISTANCE = 1.0f;
 | |
|     private OrientationHelper mHorizontalHelper;
 | |
|     private OrientationHelper mVerticalHelper;
 | |
| 
 | |
|     @Override // androidx.recyclerview.widget.SnapHelper
 | |
|     public int[] calculateDistanceToFinalSnap(RecyclerView.LayoutManager layoutManager, View view) {
 | |
|         int[] iArr = new int[2];
 | |
|         if (layoutManager.canScrollHorizontally()) {
 | |
|             iArr[0] = distanceToCenter(layoutManager, view, getHorizontalHelper(layoutManager));
 | |
|         } else {
 | |
|             iArr[0] = 0;
 | |
|         }
 | |
|         if (layoutManager.canScrollVertically()) {
 | |
|             iArr[1] = distanceToCenter(layoutManager, view, getVerticalHelper(layoutManager));
 | |
|         } else {
 | |
|             iArr[1] = 0;
 | |
|         }
 | |
|         return iArr;
 | |
|     }
 | |
| 
 | |
|     /* JADX WARN: Multi-variable type inference failed */
 | |
|     @Override // androidx.recyclerview.widget.SnapHelper
 | |
|     public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int i, int i2) {
 | |
|         int itemCount;
 | |
|         View findSnapView;
 | |
|         int position;
 | |
|         int i3;
 | |
|         PointF computeScrollVectorForPosition;
 | |
|         int i4;
 | |
|         int i5;
 | |
|         if (!(layoutManager instanceof RecyclerView.SmoothScroller.ScrollVectorProvider) || (itemCount = layoutManager.getItemCount()) == 0 || (findSnapView = findSnapView(layoutManager)) == null || (position = layoutManager.getPosition(findSnapView)) == -1 || (computeScrollVectorForPosition = ((RecyclerView.SmoothScroller.ScrollVectorProvider) layoutManager).computeScrollVectorForPosition(itemCount - 1)) == null) {
 | |
|             return -1;
 | |
|         }
 | |
|         if (layoutManager.canScrollHorizontally()) {
 | |
|             i4 = estimateNextPositionDiffForFling(layoutManager, getHorizontalHelper(layoutManager), i, 0);
 | |
|             if (computeScrollVectorForPosition.x < 0.0f) {
 | |
|                 i4 = -i4;
 | |
|             }
 | |
|         } else {
 | |
|             i4 = 0;
 | |
|         }
 | |
|         if (layoutManager.canScrollVertically()) {
 | |
|             i5 = estimateNextPositionDiffForFling(layoutManager, getVerticalHelper(layoutManager), 0, i2);
 | |
|             if (computeScrollVectorForPosition.y < 0.0f) {
 | |
|                 i5 = -i5;
 | |
|             }
 | |
|         } else {
 | |
|             i5 = 0;
 | |
|         }
 | |
|         if (layoutManager.canScrollVertically()) {
 | |
|             i4 = i5;
 | |
|         }
 | |
|         if (i4 == 0) {
 | |
|             return -1;
 | |
|         }
 | |
|         int i6 = position + i4;
 | |
|         int i7 = i6 >= 0 ? i6 : 0;
 | |
|         return i7 >= itemCount ? i3 : i7;
 | |
|     }
 | |
| 
 | |
|     @Override // androidx.recyclerview.widget.SnapHelper
 | |
|     public View findSnapView(RecyclerView.LayoutManager layoutManager) {
 | |
|         if (layoutManager.canScrollVertically()) {
 | |
|             return findCenterView(layoutManager, getVerticalHelper(layoutManager));
 | |
|         }
 | |
|         if (layoutManager.canScrollHorizontally()) {
 | |
|             return findCenterView(layoutManager, getHorizontalHelper(layoutManager));
 | |
|         }
 | |
|         return null;
 | |
|     }
 | |
| 
 | |
|     private int distanceToCenter(RecyclerView.LayoutManager layoutManager, View view, OrientationHelper orientationHelper) {
 | |
|         return (orientationHelper.getDecoratedStart(view) + (orientationHelper.getDecoratedMeasurement(view) / 2)) - (orientationHelper.getStartAfterPadding() + (orientationHelper.getTotalSpace() / 2));
 | |
|     }
 | |
| 
 | |
|     private int estimateNextPositionDiffForFling(RecyclerView.LayoutManager layoutManager, OrientationHelper orientationHelper, int i, int i2) {
 | |
|         int[] calculateScrollDistance = calculateScrollDistance(i, i2);
 | |
|         float computeDistancePerChild = computeDistancePerChild(layoutManager, orientationHelper);
 | |
|         if (computeDistancePerChild <= 0.0f) {
 | |
|             return 0;
 | |
|         }
 | |
|         return Math.round((Math.abs(calculateScrollDistance[0]) > Math.abs(calculateScrollDistance[1]) ? calculateScrollDistance[0] : calculateScrollDistance[1]) / computeDistancePerChild);
 | |
|     }
 | |
| 
 | |
|     private View findCenterView(RecyclerView.LayoutManager layoutManager, OrientationHelper orientationHelper) {
 | |
|         int childCount = layoutManager.getChildCount();
 | |
|         View view = null;
 | |
|         if (childCount == 0) {
 | |
|             return null;
 | |
|         }
 | |
|         int startAfterPadding = orientationHelper.getStartAfterPadding() + (orientationHelper.getTotalSpace() / 2);
 | |
|         int i = Integer.MAX_VALUE;
 | |
|         for (int i2 = 0; i2 < childCount; i2++) {
 | |
|             View childAt = layoutManager.getChildAt(i2);
 | |
|             int abs = Math.abs((orientationHelper.getDecoratedStart(childAt) + (orientationHelper.getDecoratedMeasurement(childAt) / 2)) - startAfterPadding);
 | |
|             if (abs < i) {
 | |
|                 view = childAt;
 | |
|                 i = abs;
 | |
|             }
 | |
|         }
 | |
|         return view;
 | |
|     }
 | |
| 
 | |
|     private float computeDistancePerChild(RecyclerView.LayoutManager layoutManager, OrientationHelper orientationHelper) {
 | |
|         int childCount = layoutManager.getChildCount();
 | |
|         if (childCount == 0) {
 | |
|             return 1.0f;
 | |
|         }
 | |
|         View view = null;
 | |
|         View view2 = null;
 | |
|         int i = Integer.MAX_VALUE;
 | |
|         int i2 = Integer.MIN_VALUE;
 | |
|         for (int i3 = 0; i3 < childCount; i3++) {
 | |
|             View childAt = layoutManager.getChildAt(i3);
 | |
|             int position = layoutManager.getPosition(childAt);
 | |
|             if (position != -1) {
 | |
|                 if (position < i) {
 | |
|                     view = childAt;
 | |
|                     i = position;
 | |
|                 }
 | |
|                 if (position > i2) {
 | |
|                     view2 = childAt;
 | |
|                     i2 = position;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         if (view == null || view2 == null) {
 | |
|             return 1.0f;
 | |
|         }
 | |
|         int max = Math.max(orientationHelper.getDecoratedEnd(view), orientationHelper.getDecoratedEnd(view2)) - Math.min(orientationHelper.getDecoratedStart(view), orientationHelper.getDecoratedStart(view2));
 | |
|         if (max == 0) {
 | |
|             return 1.0f;
 | |
|         }
 | |
|         return (max * 1.0f) / ((i2 - i) + 1);
 | |
|     }
 | |
| 
 | |
|     private OrientationHelper getVerticalHelper(RecyclerView.LayoutManager layoutManager) {
 | |
|         OrientationHelper orientationHelper = this.mVerticalHelper;
 | |
|         if (orientationHelper == null || orientationHelper.mLayoutManager != layoutManager) {
 | |
|             this.mVerticalHelper = OrientationHelper.createVerticalHelper(layoutManager);
 | |
|         }
 | |
|         return this.mVerticalHelper;
 | |
|     }
 | |
| 
 | |
|     private OrientationHelper getHorizontalHelper(RecyclerView.LayoutManager layoutManager) {
 | |
|         OrientationHelper orientationHelper = this.mHorizontalHelper;
 | |
|         if (orientationHelper == null || orientationHelper.mLayoutManager != layoutManager) {
 | |
|             this.mHorizontalHelper = OrientationHelper.createHorizontalHelper(layoutManager);
 | |
|         }
 | |
|         return this.mHorizontalHelper;
 | |
|     }
 | |
| }
 |