ADD week 5
This commit is contained in:
		| @@ -0,0 +1,110 @@ | ||||
| package androidx.viewpager2.widget; | ||||
|  | ||||
| import android.animation.LayoutTransition; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import androidx.recyclerview.widget.LinearLayoutManager; | ||||
| import java.lang.reflect.Array; | ||||
| import java.util.Arrays; | ||||
| import java.util.Comparator; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| final class AnimateLayoutChangeDetector { | ||||
|     private static final ViewGroup.MarginLayoutParams ZERO_MARGIN_LAYOUT_PARAMS; | ||||
|     private LinearLayoutManager mLayoutManager; | ||||
|  | ||||
|     static { | ||||
|         ViewGroup.MarginLayoutParams marginLayoutParams = new ViewGroup.MarginLayoutParams(-1, -1); | ||||
|         ZERO_MARGIN_LAYOUT_PARAMS = marginLayoutParams; | ||||
|         marginLayoutParams.setMargins(0, 0, 0, 0); | ||||
|     } | ||||
|  | ||||
|     AnimateLayoutChangeDetector(LinearLayoutManager linearLayoutManager) { | ||||
|         this.mLayoutManager = linearLayoutManager; | ||||
|     } | ||||
|  | ||||
|     boolean mayHaveInterferingAnimations() { | ||||
|         return (!arePagesLaidOutContiguously() || this.mLayoutManager.getChildCount() <= 1) && hasRunningChangingLayoutTransition(); | ||||
|     } | ||||
|  | ||||
|     private boolean arePagesLaidOutContiguously() { | ||||
|         int top; | ||||
|         int i; | ||||
|         int bottom; | ||||
|         int i2; | ||||
|         int childCount = this.mLayoutManager.getChildCount(); | ||||
|         if (childCount == 0) { | ||||
|             return true; | ||||
|         } | ||||
|         boolean z = this.mLayoutManager.getOrientation() == 0; | ||||
|         int[][] iArr = (int[][]) Array.newInstance((Class<?>) Integer.TYPE, childCount, 2); | ||||
|         for (int i3 = 0; i3 < childCount; i3++) { | ||||
|             View childAt = this.mLayoutManager.getChildAt(i3); | ||||
|             if (childAt == null) { | ||||
|                 throw new IllegalStateException("null view contained in the view hierarchy"); | ||||
|             } | ||||
|             ViewGroup.LayoutParams layoutParams = childAt.getLayoutParams(); | ||||
|             ViewGroup.MarginLayoutParams marginLayoutParams = layoutParams instanceof ViewGroup.MarginLayoutParams ? (ViewGroup.MarginLayoutParams) layoutParams : ZERO_MARGIN_LAYOUT_PARAMS; | ||||
|             int[] iArr2 = iArr[i3]; | ||||
|             if (z) { | ||||
|                 top = childAt.getLeft(); | ||||
|                 i = marginLayoutParams.leftMargin; | ||||
|             } else { | ||||
|                 top = childAt.getTop(); | ||||
|                 i = marginLayoutParams.topMargin; | ||||
|             } | ||||
|             iArr2[0] = top - i; | ||||
|             int[] iArr3 = iArr[i3]; | ||||
|             if (z) { | ||||
|                 bottom = childAt.getRight(); | ||||
|                 i2 = marginLayoutParams.rightMargin; | ||||
|             } else { | ||||
|                 bottom = childAt.getBottom(); | ||||
|                 i2 = marginLayoutParams.bottomMargin; | ||||
|             } | ||||
|             iArr3[1] = bottom + i2; | ||||
|         } | ||||
|         Arrays.sort(iArr, new Comparator<int[]>() { // from class: androidx.viewpager2.widget.AnimateLayoutChangeDetector.1 | ||||
|             @Override // java.util.Comparator | ||||
|             public int compare(int[] iArr4, int[] iArr5) { | ||||
|                 return iArr4[0] - iArr5[0]; | ||||
|             } | ||||
|         }); | ||||
|         for (int i4 = 1; i4 < childCount; i4++) { | ||||
|             if (iArr[i4 - 1][1] != iArr[i4][0]) { | ||||
|                 return false; | ||||
|             } | ||||
|         } | ||||
|         int[] iArr4 = iArr[0]; | ||||
|         int i5 = iArr4[1]; | ||||
|         int i6 = iArr4[0]; | ||||
|         return i6 <= 0 && iArr[childCount - 1][1] >= i5 - i6; | ||||
|     } | ||||
|  | ||||
|     private boolean hasRunningChangingLayoutTransition() { | ||||
|         int childCount = this.mLayoutManager.getChildCount(); | ||||
|         for (int i = 0; i < childCount; i++) { | ||||
|             if (hasRunningChangingLayoutTransition(this.mLayoutManager.getChildAt(i))) { | ||||
|                 return true; | ||||
|             } | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     private static boolean hasRunningChangingLayoutTransition(View view) { | ||||
|         if (view instanceof ViewGroup) { | ||||
|             ViewGroup viewGroup = (ViewGroup) view; | ||||
|             LayoutTransition layoutTransition = viewGroup.getLayoutTransition(); | ||||
|             if (layoutTransition != null && layoutTransition.isChangingLayout()) { | ||||
|                 return true; | ||||
|             } | ||||
|             int childCount = viewGroup.getChildCount(); | ||||
|             for (int i = 0; i < childCount; i++) { | ||||
|                 if (hasRunningChangingLayoutTransition(viewGroup.getChildAt(i))) { | ||||
|                     return true; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,64 @@ | ||||
| package androidx.viewpager2.widget; | ||||
|  | ||||
| import androidx.viewpager2.widget.ViewPager2; | ||||
| import java.util.ArrayList; | ||||
| import java.util.ConcurrentModificationException; | ||||
| import java.util.Iterator; | ||||
| import java.util.List; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| final class CompositeOnPageChangeCallback extends ViewPager2.OnPageChangeCallback { | ||||
|     private final List<ViewPager2.OnPageChangeCallback> mCallbacks; | ||||
|  | ||||
|     CompositeOnPageChangeCallback(int i) { | ||||
|         this.mCallbacks = new ArrayList(i); | ||||
|     } | ||||
|  | ||||
|     void addOnPageChangeCallback(ViewPager2.OnPageChangeCallback onPageChangeCallback) { | ||||
|         this.mCallbacks.add(onPageChangeCallback); | ||||
|     } | ||||
|  | ||||
|     void removeOnPageChangeCallback(ViewPager2.OnPageChangeCallback onPageChangeCallback) { | ||||
|         this.mCallbacks.remove(onPageChangeCallback); | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback | ||||
|     public void onPageScrolled(int i, float f, int i2) { | ||||
|         try { | ||||
|             Iterator<ViewPager2.OnPageChangeCallback> it = this.mCallbacks.iterator(); | ||||
|             while (it.hasNext()) { | ||||
|                 it.next().onPageScrolled(i, f, i2); | ||||
|             } | ||||
|         } catch (ConcurrentModificationException e) { | ||||
|             throwCallbackListModifiedWhileInUse(e); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback | ||||
|     public void onPageSelected(int i) { | ||||
|         try { | ||||
|             Iterator<ViewPager2.OnPageChangeCallback> it = this.mCallbacks.iterator(); | ||||
|             while (it.hasNext()) { | ||||
|                 it.next().onPageSelected(i); | ||||
|             } | ||||
|         } catch (ConcurrentModificationException e) { | ||||
|             throwCallbackListModifiedWhileInUse(e); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback | ||||
|     public void onPageScrollStateChanged(int i) { | ||||
|         try { | ||||
|             Iterator<ViewPager2.OnPageChangeCallback> it = this.mCallbacks.iterator(); | ||||
|             while (it.hasNext()) { | ||||
|                 it.next().onPageScrollStateChanged(i); | ||||
|             } | ||||
|         } catch (ConcurrentModificationException e) { | ||||
|             throwCallbackListModifiedWhileInUse(e); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void throwCallbackListModifiedWhileInUse(ConcurrentModificationException concurrentModificationException) { | ||||
|         throw new IllegalStateException("Adding and removing callbacks during dispatch to callbacks is not supported", concurrentModificationException); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,28 @@ | ||||
| package androidx.viewpager2.widget; | ||||
|  | ||||
| import android.view.View; | ||||
| import androidx.viewpager2.widget.ViewPager2; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Iterator; | ||||
| import java.util.List; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public final class CompositePageTransformer implements ViewPager2.PageTransformer { | ||||
|     private final List<ViewPager2.PageTransformer> mTransformers = new ArrayList(); | ||||
|  | ||||
|     public void addTransformer(ViewPager2.PageTransformer pageTransformer) { | ||||
|         this.mTransformers.add(pageTransformer); | ||||
|     } | ||||
|  | ||||
|     public void removeTransformer(ViewPager2.PageTransformer pageTransformer) { | ||||
|         this.mTransformers.remove(pageTransformer); | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.viewpager2.widget.ViewPager2.PageTransformer | ||||
|     public void transformPage(View view, float f) { | ||||
|         Iterator<ViewPager2.PageTransformer> it = this.mTransformers.iterator(); | ||||
|         while (it.hasNext()) { | ||||
|             it.next().transformPage(view, f); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										94
									
								
								02-Easy5/E5/sources/androidx/viewpager2/widget/FakeDrag.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								02-Easy5/E5/sources/androidx/viewpager2/widget/FakeDrag.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | ||||
| package androidx.viewpager2.widget; | ||||
|  | ||||
| import android.os.SystemClock; | ||||
| import android.view.MotionEvent; | ||||
| import android.view.VelocityTracker; | ||||
| import android.view.ViewConfiguration; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| final class FakeDrag { | ||||
|     private int mActualDraggedDistance; | ||||
|     private long mFakeDragBeginTime; | ||||
|     private int mMaximumVelocity; | ||||
|     private final RecyclerView mRecyclerView; | ||||
|     private float mRequestedDragDistance; | ||||
|     private final ScrollEventAdapter mScrollEventAdapter; | ||||
|     private VelocityTracker mVelocityTracker; | ||||
|     private final ViewPager2 mViewPager; | ||||
|  | ||||
|     FakeDrag(ViewPager2 viewPager2, ScrollEventAdapter scrollEventAdapter, RecyclerView recyclerView) { | ||||
|         this.mViewPager = viewPager2; | ||||
|         this.mScrollEventAdapter = scrollEventAdapter; | ||||
|         this.mRecyclerView = recyclerView; | ||||
|     } | ||||
|  | ||||
|     boolean isFakeDragging() { | ||||
|         return this.mScrollEventAdapter.isFakeDragging(); | ||||
|     } | ||||
|  | ||||
|     boolean beginFakeDrag() { | ||||
|         if (this.mScrollEventAdapter.isDragging()) { | ||||
|             return false; | ||||
|         } | ||||
|         this.mActualDraggedDistance = 0; | ||||
|         this.mRequestedDragDistance = 0; | ||||
|         this.mFakeDragBeginTime = SystemClock.uptimeMillis(); | ||||
|         beginFakeVelocityTracker(); | ||||
|         this.mScrollEventAdapter.notifyBeginFakeDrag(); | ||||
|         if (!this.mScrollEventAdapter.isIdle()) { | ||||
|             this.mRecyclerView.stopScroll(); | ||||
|         } | ||||
|         addFakeMotionEvent(this.mFakeDragBeginTime, 0, 0.0f, 0.0f); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     boolean fakeDragBy(float f) { | ||||
|         if (!this.mScrollEventAdapter.isFakeDragging()) { | ||||
|             return false; | ||||
|         } | ||||
|         float f2 = this.mRequestedDragDistance - f; | ||||
|         this.mRequestedDragDistance = f2; | ||||
|         int round = Math.round(f2 - this.mActualDraggedDistance); | ||||
|         this.mActualDraggedDistance += round; | ||||
|         long uptimeMillis = SystemClock.uptimeMillis(); | ||||
|         boolean z = this.mViewPager.getOrientation() == 0; | ||||
|         int i = z ? round : 0; | ||||
|         int i2 = z ? 0 : round; | ||||
|         float f3 = z ? this.mRequestedDragDistance : 0.0f; | ||||
|         float f4 = z ? 0.0f : this.mRequestedDragDistance; | ||||
|         this.mRecyclerView.scrollBy(i, i2); | ||||
|         addFakeMotionEvent(uptimeMillis, 2, f3, f4); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     boolean endFakeDrag() { | ||||
|         if (!this.mScrollEventAdapter.isFakeDragging()) { | ||||
|             return false; | ||||
|         } | ||||
|         this.mScrollEventAdapter.notifyEndFakeDrag(); | ||||
|         VelocityTracker velocityTracker = this.mVelocityTracker; | ||||
|         velocityTracker.computeCurrentVelocity(1000, this.mMaximumVelocity); | ||||
|         if (this.mRecyclerView.fling((int) velocityTracker.getXVelocity(), (int) velocityTracker.getYVelocity())) { | ||||
|             return true; | ||||
|         } | ||||
|         this.mViewPager.snapToPage(); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     private void beginFakeVelocityTracker() { | ||||
|         VelocityTracker velocityTracker = this.mVelocityTracker; | ||||
|         if (velocityTracker == null) { | ||||
|             this.mVelocityTracker = VelocityTracker.obtain(); | ||||
|             this.mMaximumVelocity = ViewConfiguration.get(this.mViewPager.getContext()).getScaledMaximumFlingVelocity(); | ||||
|         } else { | ||||
|             velocityTracker.clear(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void addFakeMotionEvent(long j, int i, float f, float f2) { | ||||
|         MotionEvent obtain = MotionEvent.obtain(this.mFakeDragBeginTime, j, i, f, f2, 0); | ||||
|         this.mVelocityTracker.addMovement(obtain); | ||||
|         obtain.recycle(); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,40 @@ | ||||
| package androidx.viewpager2.widget; | ||||
|  | ||||
| import android.view.View; | ||||
| import android.view.ViewParent; | ||||
| import androidx.core.util.Preconditions; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
| import androidx.viewpager2.widget.ViewPager2; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public final class MarginPageTransformer implements ViewPager2.PageTransformer { | ||||
|     private final int mMarginPx; | ||||
|  | ||||
|     public MarginPageTransformer(int i) { | ||||
|         Preconditions.checkArgumentNonnegative(i, "Margin must be non-negative"); | ||||
|         this.mMarginPx = i; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.viewpager2.widget.ViewPager2.PageTransformer | ||||
|     public void transformPage(View view, float f) { | ||||
|         ViewPager2 requireViewPager = requireViewPager(view); | ||||
|         float f2 = this.mMarginPx * f; | ||||
|         if (requireViewPager.getOrientation() == 0) { | ||||
|             if (requireViewPager.isRtl()) { | ||||
|                 f2 = -f2; | ||||
|             } | ||||
|             view.setTranslationX(f2); | ||||
|             return; | ||||
|         } | ||||
|         view.setTranslationY(f2); | ||||
|     } | ||||
|  | ||||
|     private ViewPager2 requireViewPager(View view) { | ||||
|         ViewParent parent = view.getParent(); | ||||
|         ViewParent parent2 = parent.getParent(); | ||||
|         if ((parent instanceof RecyclerView) && (parent2 instanceof ViewPager2)) { | ||||
|             return (ViewPager2) parent2; | ||||
|         } | ||||
|         throw new IllegalStateException("Expected the page view to be managed by a ViewPager2 instance."); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,47 @@ | ||||
| package androidx.viewpager2.widget; | ||||
|  | ||||
| import android.view.View; | ||||
| import androidx.recyclerview.widget.LinearLayoutManager; | ||||
| import androidx.viewpager2.widget.ViewPager2; | ||||
| import java.util.Locale; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| final class PageTransformerAdapter extends ViewPager2.OnPageChangeCallback { | ||||
|     private final LinearLayoutManager mLayoutManager; | ||||
|     private ViewPager2.PageTransformer mPageTransformer; | ||||
|  | ||||
|     ViewPager2.PageTransformer getPageTransformer() { | ||||
|         return this.mPageTransformer; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback | ||||
|     public void onPageScrollStateChanged(int i) { | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback | ||||
|     public void onPageSelected(int i) { | ||||
|     } | ||||
|  | ||||
|     void setPageTransformer(ViewPager2.PageTransformer pageTransformer) { | ||||
|         this.mPageTransformer = pageTransformer; | ||||
|     } | ||||
|  | ||||
|     PageTransformerAdapter(LinearLayoutManager linearLayoutManager) { | ||||
|         this.mLayoutManager = linearLayoutManager; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback | ||||
|     public void onPageScrolled(int i, float f, int i2) { | ||||
|         if (this.mPageTransformer == null) { | ||||
|             return; | ||||
|         } | ||||
|         float f2 = -f; | ||||
|         for (int i3 = 0; i3 < this.mLayoutManager.getChildCount(); i3++) { | ||||
|             View childAt = this.mLayoutManager.getChildAt(i3); | ||||
|             if (childAt == null) { | ||||
|                 throw new IllegalStateException(String.format(Locale.US, "LayoutManager returned a null child at pos %d/%d while transforming pages", Integer.valueOf(i3), Integer.valueOf(this.mLayoutManager.getChildCount()))); | ||||
|             } | ||||
|             this.mPageTransformer.transformPage(childAt, (this.mLayoutManager.getPosition(childAt) - i) + f2); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,353 @@ | ||||
| package androidx.viewpager2.widget; | ||||
|  | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import androidx.recyclerview.widget.LinearLayoutManager; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
| import androidx.viewpager2.widget.ViewPager2; | ||||
| import java.util.Locale; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| final class ScrollEventAdapter extends RecyclerView.OnScrollListener { | ||||
|     private static final int NO_POSITION = -1; | ||||
|     private static final int STATE_IDLE = 0; | ||||
|     private static final int STATE_IN_PROGRESS_FAKE_DRAG = 4; | ||||
|     private static final int STATE_IN_PROGRESS_IMMEDIATE_SCROLL = 3; | ||||
|     private static final int STATE_IN_PROGRESS_MANUAL_DRAG = 1; | ||||
|     private static final int STATE_IN_PROGRESS_SMOOTH_SCROLL = 2; | ||||
|     private int mAdapterState; | ||||
|     private ViewPager2.OnPageChangeCallback mCallback; | ||||
|     private boolean mDataSetChangeHappened; | ||||
|     private boolean mDispatchSelected; | ||||
|     private int mDragStartPosition; | ||||
|     private boolean mFakeDragging; | ||||
|     private final LinearLayoutManager mLayoutManager; | ||||
|     private final RecyclerView mRecyclerView; | ||||
|     private boolean mScrollHappened; | ||||
|     private int mScrollState; | ||||
|     private ScrollEventValues mScrollValues; | ||||
|     private int mTarget; | ||||
|     private final ViewPager2 mViewPager; | ||||
|  | ||||
|     private boolean isInAnyDraggingState() { | ||||
|         int i = this.mAdapterState; | ||||
|         return i == 1 || i == 4; | ||||
|     } | ||||
|  | ||||
|     int getScrollState() { | ||||
|         return this.mScrollState; | ||||
|     } | ||||
|  | ||||
|     boolean isDragging() { | ||||
|         return this.mScrollState == 1; | ||||
|     } | ||||
|  | ||||
|     boolean isFakeDragging() { | ||||
|         return this.mFakeDragging; | ||||
|     } | ||||
|  | ||||
|     boolean isIdle() { | ||||
|         return this.mScrollState == 0; | ||||
|     } | ||||
|  | ||||
|     void notifyDataSetChangeHappened() { | ||||
|         this.mDataSetChangeHappened = true; | ||||
|     } | ||||
|  | ||||
|     void setOnPageChangeCallback(ViewPager2.OnPageChangeCallback onPageChangeCallback) { | ||||
|         this.mCallback = onPageChangeCallback; | ||||
|     } | ||||
|  | ||||
|     ScrollEventAdapter(ViewPager2 viewPager2) { | ||||
|         this.mViewPager = viewPager2; | ||||
|         RecyclerView recyclerView = viewPager2.mRecyclerView; | ||||
|         this.mRecyclerView = recyclerView; | ||||
|         this.mLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); | ||||
|         this.mScrollValues = new ScrollEventValues(); | ||||
|         resetState(); | ||||
|     } | ||||
|  | ||||
|     private void resetState() { | ||||
|         this.mAdapterState = 0; | ||||
|         this.mScrollState = 0; | ||||
|         this.mScrollValues.reset(); | ||||
|         this.mDragStartPosition = -1; | ||||
|         this.mTarget = -1; | ||||
|         this.mDispatchSelected = false; | ||||
|         this.mScrollHappened = false; | ||||
|         this.mFakeDragging = false; | ||||
|         this.mDataSetChangeHappened = false; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.recyclerview.widget.RecyclerView.OnScrollListener | ||||
|     public void onScrollStateChanged(RecyclerView recyclerView, int i) { | ||||
|         if ((this.mAdapterState != 1 || this.mScrollState != 1) && i == 1) { | ||||
|             startDrag(false); | ||||
|             return; | ||||
|         } | ||||
|         if (isInAnyDraggingState() && i == 2) { | ||||
|             if (this.mScrollHappened) { | ||||
|                 dispatchStateChanged(2); | ||||
|                 this.mDispatchSelected = true; | ||||
|                 return; | ||||
|             } | ||||
|             return; | ||||
|         } | ||||
|         if (isInAnyDraggingState() && i == 0) { | ||||
|             updateScrollEventValues(); | ||||
|             if (!this.mScrollHappened) { | ||||
|                 if (this.mScrollValues.mPosition != -1) { | ||||
|                     dispatchScrolled(this.mScrollValues.mPosition, 0.0f, 0); | ||||
|                 } | ||||
|             } else if (this.mScrollValues.mOffsetPx == 0) { | ||||
|                 if (this.mDragStartPosition != this.mScrollValues.mPosition) { | ||||
|                     dispatchSelected(this.mScrollValues.mPosition); | ||||
|                 } | ||||
|             } | ||||
|             dispatchStateChanged(0); | ||||
|             resetState(); | ||||
|         } | ||||
|         if (this.mAdapterState == 2 && i == 0 && this.mDataSetChangeHappened) { | ||||
|             updateScrollEventValues(); | ||||
|             if (this.mScrollValues.mOffsetPx == 0) { | ||||
|                 if (this.mTarget != this.mScrollValues.mPosition) { | ||||
|                     dispatchSelected(this.mScrollValues.mPosition == -1 ? 0 : this.mScrollValues.mPosition); | ||||
|                 } | ||||
|                 dispatchStateChanged(0); | ||||
|                 resetState(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Code restructure failed: missing block: B:9:0x001d, code lost: | ||||
|      | ||||
|         if ((r5 < 0) == r3.mViewPager.isRtl()) goto L12; | ||||
|      */ | ||||
|     /* JADX WARN: Removed duplicated region for block: B:14:0x0035  */ | ||||
|     @Override // androidx.recyclerview.widget.RecyclerView.OnScrollListener | ||||
|     /* | ||||
|         Code decompiled incorrectly, please refer to instructions dump. | ||||
|         To view partially-correct add '--show-bad-code' argument | ||||
|     */ | ||||
|     public void onScrolled(androidx.recyclerview.widget.RecyclerView r4, int r5, int r6) { | ||||
|         /* | ||||
|             r3 = this; | ||||
|             r4 = 1 | ||||
|             r3.mScrollHappened = r4 | ||||
|             r3.updateScrollEventValues() | ||||
|             boolean r0 = r3.mDispatchSelected | ||||
|             r1 = -1 | ||||
|             r2 = 0 | ||||
|             if (r0 == 0) goto L39 | ||||
|             r3.mDispatchSelected = r2 | ||||
|             if (r6 > 0) goto L1f | ||||
|             if (r6 != 0) goto L2b | ||||
|             if (r5 >= 0) goto L16 | ||||
|             r5 = 1 | ||||
|             goto L17 | ||||
|         L16: | ||||
|             r5 = 0 | ||||
|         L17: | ||||
|             androidx.viewpager2.widget.ViewPager2 r6 = r3.mViewPager | ||||
|             boolean r6 = r6.isRtl() | ||||
|             if (r5 != r6) goto L2b | ||||
|         L1f: | ||||
|             androidx.viewpager2.widget.ScrollEventAdapter$ScrollEventValues r5 = r3.mScrollValues | ||||
|             int r5 = r5.mOffsetPx | ||||
|             if (r5 == 0) goto L2b | ||||
|             androidx.viewpager2.widget.ScrollEventAdapter$ScrollEventValues r5 = r3.mScrollValues | ||||
|             int r5 = r5.mPosition | ||||
|             int r5 = r5 + r4 | ||||
|             goto L2f | ||||
|         L2b: | ||||
|             androidx.viewpager2.widget.ScrollEventAdapter$ScrollEventValues r5 = r3.mScrollValues | ||||
|             int r5 = r5.mPosition | ||||
|         L2f: | ||||
|             r3.mTarget = r5 | ||||
|             int r6 = r3.mDragStartPosition | ||||
|             if (r6 == r5) goto L47 | ||||
|             r3.dispatchSelected(r5) | ||||
|             goto L47 | ||||
|         L39: | ||||
|             int r5 = r3.mAdapterState | ||||
|             if (r5 != 0) goto L47 | ||||
|             androidx.viewpager2.widget.ScrollEventAdapter$ScrollEventValues r5 = r3.mScrollValues | ||||
|             int r5 = r5.mPosition | ||||
|             if (r5 != r1) goto L44 | ||||
|             r5 = 0 | ||||
|         L44: | ||||
|             r3.dispatchSelected(r5) | ||||
|         L47: | ||||
|             androidx.viewpager2.widget.ScrollEventAdapter$ScrollEventValues r5 = r3.mScrollValues | ||||
|             int r5 = r5.mPosition | ||||
|             if (r5 != r1) goto L4f | ||||
|             r5 = 0 | ||||
|             goto L53 | ||||
|         L4f: | ||||
|             androidx.viewpager2.widget.ScrollEventAdapter$ScrollEventValues r5 = r3.mScrollValues | ||||
|             int r5 = r5.mPosition | ||||
|         L53: | ||||
|             androidx.viewpager2.widget.ScrollEventAdapter$ScrollEventValues r6 = r3.mScrollValues | ||||
|             float r6 = r6.mOffset | ||||
|             androidx.viewpager2.widget.ScrollEventAdapter$ScrollEventValues r0 = r3.mScrollValues | ||||
|             int r0 = r0.mOffsetPx | ||||
|             r3.dispatchScrolled(r5, r6, r0) | ||||
|             androidx.viewpager2.widget.ScrollEventAdapter$ScrollEventValues r5 = r3.mScrollValues | ||||
|             int r5 = r5.mPosition | ||||
|             int r6 = r3.mTarget | ||||
|             if (r5 == r6) goto L68 | ||||
|             if (r6 != r1) goto L78 | ||||
|         L68: | ||||
|             androidx.viewpager2.widget.ScrollEventAdapter$ScrollEventValues r5 = r3.mScrollValues | ||||
|             int r5 = r5.mOffsetPx | ||||
|             if (r5 != 0) goto L78 | ||||
|             int r5 = r3.mScrollState | ||||
|             if (r5 == r4) goto L78 | ||||
|             r3.dispatchStateChanged(r2) | ||||
|             r3.resetState() | ||||
|         L78: | ||||
|             return | ||||
|         */ | ||||
|         throw new UnsupportedOperationException("Method not decompiled: androidx.viewpager2.widget.ScrollEventAdapter.onScrolled(androidx.recyclerview.widget.RecyclerView, int, int):void"); | ||||
|     } | ||||
|  | ||||
|     private void updateScrollEventValues() { | ||||
|         int top; | ||||
|         ScrollEventValues scrollEventValues = this.mScrollValues; | ||||
|         scrollEventValues.mPosition = this.mLayoutManager.findFirstVisibleItemPosition(); | ||||
|         if (scrollEventValues.mPosition == -1) { | ||||
|             scrollEventValues.reset(); | ||||
|             return; | ||||
|         } | ||||
|         View findViewByPosition = this.mLayoutManager.findViewByPosition(scrollEventValues.mPosition); | ||||
|         if (findViewByPosition == null) { | ||||
|             scrollEventValues.reset(); | ||||
|             return; | ||||
|         } | ||||
|         int leftDecorationWidth = this.mLayoutManager.getLeftDecorationWidth(findViewByPosition); | ||||
|         int rightDecorationWidth = this.mLayoutManager.getRightDecorationWidth(findViewByPosition); | ||||
|         int topDecorationHeight = this.mLayoutManager.getTopDecorationHeight(findViewByPosition); | ||||
|         int bottomDecorationHeight = this.mLayoutManager.getBottomDecorationHeight(findViewByPosition); | ||||
|         ViewGroup.LayoutParams layoutParams = findViewByPosition.getLayoutParams(); | ||||
|         if (layoutParams instanceof ViewGroup.MarginLayoutParams) { | ||||
|             ViewGroup.MarginLayoutParams marginLayoutParams = (ViewGroup.MarginLayoutParams) layoutParams; | ||||
|             leftDecorationWidth += marginLayoutParams.leftMargin; | ||||
|             rightDecorationWidth += marginLayoutParams.rightMargin; | ||||
|             topDecorationHeight += marginLayoutParams.topMargin; | ||||
|             bottomDecorationHeight += marginLayoutParams.bottomMargin; | ||||
|         } | ||||
|         int height = findViewByPosition.getHeight() + topDecorationHeight + bottomDecorationHeight; | ||||
|         int width = findViewByPosition.getWidth() + leftDecorationWidth + rightDecorationWidth; | ||||
|         if (this.mLayoutManager.getOrientation() == 0) { | ||||
|             top = (findViewByPosition.getLeft() - leftDecorationWidth) - this.mRecyclerView.getPaddingLeft(); | ||||
|             if (this.mViewPager.isRtl()) { | ||||
|                 top = -top; | ||||
|             } | ||||
|             height = width; | ||||
|         } else { | ||||
|             top = (findViewByPosition.getTop() - topDecorationHeight) - this.mRecyclerView.getPaddingTop(); | ||||
|         } | ||||
|         scrollEventValues.mOffsetPx = -top; | ||||
|         if (scrollEventValues.mOffsetPx < 0) { | ||||
|             if (new AnimateLayoutChangeDetector(this.mLayoutManager).mayHaveInterferingAnimations()) { | ||||
|                 throw new IllegalStateException("Page(s) contain a ViewGroup with a LayoutTransition (or animateLayoutChanges=\"true\"), which interferes with the scrolling animation. Make sure to call getLayoutTransition().setAnimateParentHierarchy(false) on all ViewGroups with a LayoutTransition before an animation is started."); | ||||
|             } | ||||
|             throw new IllegalStateException(String.format(Locale.US, "Page can only be offset by a positive amount, not by %d", Integer.valueOf(scrollEventValues.mOffsetPx))); | ||||
|         } | ||||
|         scrollEventValues.mOffset = height == 0 ? 0.0f : scrollEventValues.mOffsetPx / height; | ||||
|     } | ||||
|  | ||||
|     private void startDrag(boolean z) { | ||||
|         this.mFakeDragging = z; | ||||
|         this.mAdapterState = z ? 4 : 1; | ||||
|         int i = this.mTarget; | ||||
|         if (i != -1) { | ||||
|             this.mDragStartPosition = i; | ||||
|             this.mTarget = -1; | ||||
|         } else if (this.mDragStartPosition == -1) { | ||||
|             this.mDragStartPosition = getPosition(); | ||||
|         } | ||||
|         dispatchStateChanged(1); | ||||
|     } | ||||
|  | ||||
|     void notifyProgrammaticScroll(int i, boolean z) { | ||||
|         this.mAdapterState = z ? 2 : 3; | ||||
|         this.mFakeDragging = false; | ||||
|         boolean z2 = this.mTarget != i; | ||||
|         this.mTarget = i; | ||||
|         dispatchStateChanged(2); | ||||
|         if (z2) { | ||||
|             dispatchSelected(i); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     void notifyBeginFakeDrag() { | ||||
|         this.mAdapterState = 4; | ||||
|         startDrag(true); | ||||
|     } | ||||
|  | ||||
|     void notifyEndFakeDrag() { | ||||
|         if (!isDragging() || this.mFakeDragging) { | ||||
|             this.mFakeDragging = false; | ||||
|             updateScrollEventValues(); | ||||
|             if (this.mScrollValues.mOffsetPx == 0) { | ||||
|                 if (this.mScrollValues.mPosition != this.mDragStartPosition) { | ||||
|                     dispatchSelected(this.mScrollValues.mPosition); | ||||
|                 } | ||||
|                 dispatchStateChanged(0); | ||||
|                 resetState(); | ||||
|                 return; | ||||
|             } | ||||
|             dispatchStateChanged(2); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     double getRelativeScrollPosition() { | ||||
|         updateScrollEventValues(); | ||||
|         return this.mScrollValues.mPosition + this.mScrollValues.mOffset; | ||||
|     } | ||||
|  | ||||
|     private void dispatchStateChanged(int i) { | ||||
|         if ((this.mAdapterState == 3 && this.mScrollState == 0) || this.mScrollState == i) { | ||||
|             return; | ||||
|         } | ||||
|         this.mScrollState = i; | ||||
|         ViewPager2.OnPageChangeCallback onPageChangeCallback = this.mCallback; | ||||
|         if (onPageChangeCallback != null) { | ||||
|             onPageChangeCallback.onPageScrollStateChanged(i); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void dispatchSelected(int i) { | ||||
|         ViewPager2.OnPageChangeCallback onPageChangeCallback = this.mCallback; | ||||
|         if (onPageChangeCallback != null) { | ||||
|             onPageChangeCallback.onPageSelected(i); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void dispatchScrolled(int i, float f, int i2) { | ||||
|         ViewPager2.OnPageChangeCallback onPageChangeCallback = this.mCallback; | ||||
|         if (onPageChangeCallback != null) { | ||||
|             onPageChangeCallback.onPageScrolled(i, f, i2); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private int getPosition() { | ||||
|         return this.mLayoutManager.findFirstVisibleItemPosition(); | ||||
|     } | ||||
|  | ||||
|     private static final class ScrollEventValues { | ||||
|         float mOffset; | ||||
|         int mOffsetPx; | ||||
|         int mPosition; | ||||
|  | ||||
|         void reset() { | ||||
|             this.mPosition = -1; | ||||
|             this.mOffset = 0.0f; | ||||
|             this.mOffsetPx = 0; | ||||
|         } | ||||
|  | ||||
|         ScrollEventValues() { | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										1122
									
								
								02-Easy5/E5/sources/androidx/viewpager2/widget/ViewPager2.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1122
									
								
								02-Easy5/E5/sources/androidx/viewpager2/widget/ViewPager2.java
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user