1111 lines
46 KiB
Java
1111 lines
46 KiB
Java
package androidx.viewpager2.widget;
|
|
|
|
import android.annotation.SuppressLint;
|
|
import android.content.Context;
|
|
import android.content.res.TypedArray;
|
|
import android.graphics.Rect;
|
|
import android.os.Build;
|
|
import android.os.Bundle;
|
|
import android.os.Parcel;
|
|
import android.os.Parcelable;
|
|
import android.util.AttributeSet;
|
|
import android.util.SparseArray;
|
|
import android.view.Gravity;
|
|
import android.view.MotionEvent;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.view.accessibility.AccessibilityEvent;
|
|
import android.view.accessibility.AccessibilityNodeInfo;
|
|
import androidx.annotation.IntRange;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.annotation.Px;
|
|
import androidx.annotation.RequiresApi;
|
|
import androidx.annotation.RestrictTo;
|
|
import androidx.core.view.ViewCompat;
|
|
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
|
|
import androidx.core.view.accessibility.AccessibilityViewCommand;
|
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
|
import androidx.recyclerview.widget.PagerSnapHelper;
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
import androidx.viewpager2.R;
|
|
import androidx.viewpager2.adapter.StatefulAdapter;
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
public final class ViewPager2 extends ViewGroup {
|
|
public static final int OFFSCREEN_PAGE_LIMIT_DEFAULT = -1;
|
|
public static final int ORIENTATION_HORIZONTAL = 0;
|
|
public static final int ORIENTATION_VERTICAL = 1;
|
|
public static final int SCROLL_STATE_DRAGGING = 1;
|
|
public static final int SCROLL_STATE_IDLE = 0;
|
|
public static final int SCROLL_STATE_SETTLING = 2;
|
|
public static boolean sFeatureEnhancedA11yEnabled = true;
|
|
public AccessibilityProvider mAccessibilityProvider;
|
|
public int mCurrentItem;
|
|
private RecyclerView.AdapterDataObserver mCurrentItemDataSetChangeObserver = new AnonymousClass1();
|
|
public boolean mCurrentItemDirty = false;
|
|
private CompositeOnPageChangeCallback mExternalPageChangeCallbacks = new CompositeOnPageChangeCallback(3);
|
|
private FakeDrag mFakeDragger;
|
|
private LinearLayoutManager mLayoutManager;
|
|
private int mOffscreenPageLimit = -1;
|
|
private CompositeOnPageChangeCallback mPageChangeEventDispatcher;
|
|
private PageTransformerAdapter mPageTransformerAdapter;
|
|
private PagerSnapHelper mPagerSnapHelper;
|
|
private Parcelable mPendingAdapterState;
|
|
private int mPendingCurrentItem = -1;
|
|
public RecyclerView mRecyclerView;
|
|
private RecyclerView.ItemAnimator mSavedItemAnimator = null;
|
|
private boolean mSavedItemAnimatorPresent = false;
|
|
public ScrollEventAdapter mScrollEventAdapter;
|
|
private final Rect mTmpChildRect = new Rect();
|
|
private final Rect mTmpContainerRect = new Rect();
|
|
private boolean mUserInputEnabled = true;
|
|
|
|
/* renamed from: androidx.viewpager2.widget.ViewPager2$1 reason: invalid class name */
|
|
public class AnonymousClass1 extends DataSetChangeObserver {
|
|
public AnonymousClass1() {
|
|
super(null);
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.DataSetChangeObserver, androidx.recyclerview.widget.RecyclerView.AdapterDataObserver
|
|
public void onChanged() {
|
|
ViewPager2 viewPager2 = ViewPager2.this;
|
|
viewPager2.mCurrentItemDirty = true;
|
|
viewPager2.mScrollEventAdapter.notifyDataSetChangeHappened();
|
|
}
|
|
}
|
|
|
|
/* renamed from: androidx.viewpager2.widget.ViewPager2$2 reason: invalid class name */
|
|
public class AnonymousClass2 extends OnPageChangeCallback {
|
|
public AnonymousClass2() {
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
|
|
public void onPageScrollStateChanged(int i) {
|
|
if (i == 0) {
|
|
ViewPager2.this.updateCurrentItem();
|
|
}
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
|
|
public void onPageSelected(int i) {
|
|
ViewPager2 viewPager2 = ViewPager2.this;
|
|
if (viewPager2.mCurrentItem != i) {
|
|
viewPager2.mCurrentItem = i;
|
|
viewPager2.mAccessibilityProvider.onSetNewCurrentItem();
|
|
}
|
|
}
|
|
}
|
|
|
|
/* renamed from: androidx.viewpager2.widget.ViewPager2$3 reason: invalid class name */
|
|
public class AnonymousClass3 extends OnPageChangeCallback {
|
|
public AnonymousClass3() {
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
|
|
public void onPageSelected(int i) {
|
|
ViewPager2.this.clearFocus();
|
|
if (ViewPager2.this.hasFocus()) {
|
|
ViewPager2.this.mRecyclerView.requestFocus(2);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* renamed from: androidx.viewpager2.widget.ViewPager2$4 reason: invalid class name */
|
|
public class AnonymousClass4 implements RecyclerView.OnChildAttachStateChangeListener {
|
|
public AnonymousClass4() {
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener
|
|
public void onChildViewAttachedToWindow(@NonNull View view) {
|
|
RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) view.getLayoutParams();
|
|
if (((ViewGroup.MarginLayoutParams) layoutParams).width != -1 || ((ViewGroup.MarginLayoutParams) layoutParams).height != -1) {
|
|
throw new IllegalStateException("Pages must fill the whole ViewPager2 (use match_parent)");
|
|
}
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener
|
|
public void onChildViewDetachedFromWindow(@NonNull View view) {
|
|
}
|
|
}
|
|
|
|
public abstract class AccessibilityProvider {
|
|
private AccessibilityProvider() {
|
|
}
|
|
|
|
public /* synthetic */ AccessibilityProvider(ViewPager2 viewPager2, AnonymousClass1 r2) {
|
|
this();
|
|
}
|
|
|
|
public boolean handlesGetAccessibilityClassName() {
|
|
return false;
|
|
}
|
|
|
|
public boolean handlesLmPerformAccessibilityAction(int i) {
|
|
return false;
|
|
}
|
|
|
|
public boolean handlesPerformAccessibilityAction(int i, Bundle bundle) {
|
|
return false;
|
|
}
|
|
|
|
public boolean handlesRvGetAccessibilityClassName() {
|
|
return false;
|
|
}
|
|
|
|
public void onAttachAdapter(@Nullable RecyclerView.Adapter<?> adapter) {
|
|
}
|
|
|
|
public void onDetachAdapter(@Nullable RecyclerView.Adapter<?> adapter) {
|
|
}
|
|
|
|
public String onGetAccessibilityClassName() {
|
|
throw new IllegalStateException("Not implemented.");
|
|
}
|
|
|
|
public void onInitialize(@NonNull CompositeOnPageChangeCallback compositeOnPageChangeCallback, @NonNull RecyclerView recyclerView) {
|
|
}
|
|
|
|
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo accessibilityNodeInfo) {
|
|
}
|
|
|
|
public void onLmInitializeAccessibilityNodeInfo(@NonNull AccessibilityNodeInfoCompat accessibilityNodeInfoCompat) {
|
|
}
|
|
|
|
public boolean onLmPerformAccessibilityAction(int i) {
|
|
throw new IllegalStateException("Not implemented.");
|
|
}
|
|
|
|
public boolean onPerformAccessibilityAction(int i, Bundle bundle) {
|
|
throw new IllegalStateException("Not implemented.");
|
|
}
|
|
|
|
public void onRestorePendingState() {
|
|
}
|
|
|
|
public CharSequence onRvGetAccessibilityClassName() {
|
|
throw new IllegalStateException("Not implemented.");
|
|
}
|
|
|
|
public void onRvInitializeAccessibilityEvent(@NonNull AccessibilityEvent accessibilityEvent) {
|
|
}
|
|
|
|
public void onSetLayoutDirection() {
|
|
}
|
|
|
|
public void onSetNewCurrentItem() {
|
|
}
|
|
|
|
public void onSetOrientation() {
|
|
}
|
|
|
|
public void onSetUserInputEnabled() {
|
|
}
|
|
}
|
|
|
|
public class BasicAccessibilityProvider extends AccessibilityProvider {
|
|
public BasicAccessibilityProvider() {
|
|
super(ViewPager2.this, null);
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.AccessibilityProvider
|
|
public boolean handlesLmPerformAccessibilityAction(int i) {
|
|
return (i == 8192 || i == 4096) && !ViewPager2.this.isUserInputEnabled();
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.AccessibilityProvider
|
|
public boolean handlesRvGetAccessibilityClassName() {
|
|
return true;
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.AccessibilityProvider
|
|
public void onLmInitializeAccessibilityNodeInfo(@NonNull AccessibilityNodeInfoCompat accessibilityNodeInfoCompat) {
|
|
if (!ViewPager2.this.isUserInputEnabled()) {
|
|
accessibilityNodeInfoCompat.removeAction(AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_BACKWARD);
|
|
accessibilityNodeInfoCompat.removeAction(AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_FORWARD);
|
|
accessibilityNodeInfoCompat.setScrollable(false);
|
|
}
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.AccessibilityProvider
|
|
public boolean onLmPerformAccessibilityAction(int i) {
|
|
if (handlesLmPerformAccessibilityAction(i)) {
|
|
return false;
|
|
}
|
|
throw new IllegalStateException();
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.AccessibilityProvider
|
|
public CharSequence onRvGetAccessibilityClassName() {
|
|
if (handlesRvGetAccessibilityClassName()) {
|
|
return "androidx.viewpager.widget.ViewPager";
|
|
}
|
|
throw new IllegalStateException();
|
|
}
|
|
}
|
|
|
|
public static abstract class DataSetChangeObserver extends RecyclerView.AdapterDataObserver {
|
|
private DataSetChangeObserver() {
|
|
}
|
|
|
|
public /* synthetic */ DataSetChangeObserver(AnonymousClass1 r1) {
|
|
this();
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.RecyclerView.AdapterDataObserver
|
|
public abstract void onChanged();
|
|
|
|
@Override // androidx.recyclerview.widget.RecyclerView.AdapterDataObserver
|
|
public final void onItemRangeChanged(int i, int i2) {
|
|
onChanged();
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.RecyclerView.AdapterDataObserver
|
|
public final void onItemRangeChanged(int i, int i2, @Nullable Object obj) {
|
|
onChanged();
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.RecyclerView.AdapterDataObserver
|
|
public final void onItemRangeInserted(int i, int i2) {
|
|
onChanged();
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.RecyclerView.AdapterDataObserver
|
|
public final void onItemRangeMoved(int i, int i2, int i3) {
|
|
onChanged();
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.RecyclerView.AdapterDataObserver
|
|
public final void onItemRangeRemoved(int i, int i2) {
|
|
onChanged();
|
|
}
|
|
}
|
|
|
|
public class LinearLayoutManagerImpl extends LinearLayoutManager {
|
|
public LinearLayoutManagerImpl(Context context) {
|
|
super(context);
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.LinearLayoutManager
|
|
public void calculateExtraLayoutSpace(@NonNull RecyclerView.State state, @NonNull int[] iArr) {
|
|
int offscreenPageLimit = ViewPager2.this.getOffscreenPageLimit();
|
|
if (offscreenPageLimit == -1) {
|
|
super.calculateExtraLayoutSpace(state, iArr);
|
|
return;
|
|
}
|
|
int pageSize = ViewPager2.this.getPageSize() * offscreenPageLimit;
|
|
iArr[0] = pageSize;
|
|
iArr[1] = pageSize;
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.RecyclerView.LayoutManager
|
|
public void onInitializeAccessibilityNodeInfo(@NonNull RecyclerView.Recycler recycler, @NonNull RecyclerView.State state, @NonNull AccessibilityNodeInfoCompat accessibilityNodeInfoCompat) {
|
|
super.onInitializeAccessibilityNodeInfo(recycler, state, accessibilityNodeInfoCompat);
|
|
ViewPager2.this.mAccessibilityProvider.onLmInitializeAccessibilityNodeInfo(accessibilityNodeInfoCompat);
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.RecyclerView.LayoutManager
|
|
public boolean performAccessibilityAction(@NonNull RecyclerView.Recycler recycler, @NonNull RecyclerView.State state, int i, @Nullable Bundle bundle) {
|
|
return ViewPager2.this.mAccessibilityProvider.handlesLmPerformAccessibilityAction(i) ? ViewPager2.this.mAccessibilityProvider.onLmPerformAccessibilityAction(i) : super.performAccessibilityAction(recycler, state, i, bundle);
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.RecyclerView.LayoutManager
|
|
public boolean requestChildRectangleOnScreen(@NonNull RecyclerView recyclerView, @NonNull View view, @NonNull Rect rect, boolean z2, boolean z3) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
@IntRange(from = 1)
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public @interface OffscreenPageLimit {
|
|
}
|
|
|
|
public static abstract class OnPageChangeCallback {
|
|
public void onPageScrollStateChanged(int i) {
|
|
}
|
|
|
|
public void onPageScrolled(int i, float f, @Px int i2) {
|
|
}
|
|
|
|
public void onPageSelected(int i) {
|
|
}
|
|
}
|
|
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public @interface Orientation {
|
|
}
|
|
|
|
public class PageAwareAccessibilityProvider extends AccessibilityProvider {
|
|
private final AccessibilityViewCommand mActionPageBackward = new AnonymousClass2();
|
|
private final AccessibilityViewCommand mActionPageForward = new AnonymousClass1();
|
|
private RecyclerView.AdapterDataObserver mAdapterDataObserver;
|
|
|
|
/* renamed from: androidx.viewpager2.widget.ViewPager2$PageAwareAccessibilityProvider$1 reason: invalid class name */
|
|
public class AnonymousClass1 implements AccessibilityViewCommand {
|
|
public AnonymousClass1() {
|
|
}
|
|
|
|
@Override // androidx.core.view.accessibility.AccessibilityViewCommand
|
|
public boolean perform(@NonNull View view, @Nullable AccessibilityViewCommand.CommandArguments commandArguments) {
|
|
PageAwareAccessibilityProvider.this.setCurrentItemFromAccessibilityCommand(((ViewPager2) view).getCurrentItem() + 1);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
/* renamed from: androidx.viewpager2.widget.ViewPager2$PageAwareAccessibilityProvider$2 reason: invalid class name */
|
|
public class AnonymousClass2 implements AccessibilityViewCommand {
|
|
public AnonymousClass2() {
|
|
}
|
|
|
|
@Override // androidx.core.view.accessibility.AccessibilityViewCommand
|
|
public boolean perform(@NonNull View view, @Nullable AccessibilityViewCommand.CommandArguments commandArguments) {
|
|
PageAwareAccessibilityProvider.this.setCurrentItemFromAccessibilityCommand(((ViewPager2) view).getCurrentItem() - 1);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
/* renamed from: androidx.viewpager2.widget.ViewPager2$PageAwareAccessibilityProvider$3 reason: invalid class name */
|
|
public class AnonymousClass3 extends DataSetChangeObserver {
|
|
public AnonymousClass3() {
|
|
super(null);
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.DataSetChangeObserver, androidx.recyclerview.widget.RecyclerView.AdapterDataObserver
|
|
public void onChanged() {
|
|
PageAwareAccessibilityProvider.this.updatePageAccessibilityActions();
|
|
}
|
|
}
|
|
|
|
public PageAwareAccessibilityProvider() {
|
|
super(ViewPager2.this, null);
|
|
}
|
|
|
|
private void addCollectionInfo(AccessibilityNodeInfo accessibilityNodeInfo) {
|
|
int i;
|
|
int i2;
|
|
if (ViewPager2.this.getAdapter() == null) {
|
|
i2 = 0;
|
|
} else if (ViewPager2.this.getOrientation() == 1) {
|
|
i2 = ViewPager2.this.getAdapter().getItemCount();
|
|
} else {
|
|
i = ViewPager2.this.getAdapter().getItemCount();
|
|
i2 = 0;
|
|
AccessibilityNodeInfoCompat.wrap(accessibilityNodeInfo).setCollectionInfo(AccessibilityNodeInfoCompat.CollectionInfoCompat.obtain(i2, i, false, 0));
|
|
}
|
|
i = 0;
|
|
AccessibilityNodeInfoCompat.wrap(accessibilityNodeInfo).setCollectionInfo(AccessibilityNodeInfoCompat.CollectionInfoCompat.obtain(i2, i, false, 0));
|
|
}
|
|
|
|
private void addScrollActions(AccessibilityNodeInfo accessibilityNodeInfo) {
|
|
int itemCount;
|
|
RecyclerView.Adapter adapter = ViewPager2.this.getAdapter();
|
|
if (adapter != null && (itemCount = adapter.getItemCount()) != 0 && ViewPager2.this.isUserInputEnabled()) {
|
|
if (ViewPager2.this.mCurrentItem > 0) {
|
|
accessibilityNodeInfo.addAction(8192);
|
|
}
|
|
if (ViewPager2.this.mCurrentItem < itemCount - 1) {
|
|
accessibilityNodeInfo.addAction(4096);
|
|
}
|
|
accessibilityNodeInfo.setScrollable(true);
|
|
}
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.AccessibilityProvider
|
|
public boolean handlesGetAccessibilityClassName() {
|
|
return true;
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.AccessibilityProvider
|
|
public boolean handlesPerformAccessibilityAction(int i, Bundle bundle) {
|
|
return i == 8192 || i == 4096;
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.AccessibilityProvider
|
|
public void onAttachAdapter(@Nullable RecyclerView.Adapter<?> adapter) {
|
|
updatePageAccessibilityActions();
|
|
if (adapter != null) {
|
|
adapter.registerAdapterDataObserver(this.mAdapterDataObserver);
|
|
}
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.AccessibilityProvider
|
|
public void onDetachAdapter(@Nullable RecyclerView.Adapter<?> adapter) {
|
|
if (adapter != null) {
|
|
adapter.unregisterAdapterDataObserver(this.mAdapterDataObserver);
|
|
}
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.AccessibilityProvider
|
|
public String onGetAccessibilityClassName() {
|
|
if (handlesGetAccessibilityClassName()) {
|
|
return "androidx.viewpager.widget.ViewPager";
|
|
}
|
|
throw new IllegalStateException();
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.AccessibilityProvider
|
|
public void onInitialize(@NonNull CompositeOnPageChangeCallback compositeOnPageChangeCallback, @NonNull RecyclerView recyclerView) {
|
|
ViewCompat.setImportantForAccessibility(recyclerView, 2);
|
|
this.mAdapterDataObserver = new AnonymousClass3();
|
|
if (ViewCompat.getImportantForAccessibility(ViewPager2.this) == 0) {
|
|
ViewCompat.setImportantForAccessibility(ViewPager2.this, 1);
|
|
}
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.AccessibilityProvider
|
|
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo accessibilityNodeInfo) {
|
|
addCollectionInfo(accessibilityNodeInfo);
|
|
addScrollActions(accessibilityNodeInfo);
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.AccessibilityProvider
|
|
public boolean onPerformAccessibilityAction(int i, Bundle bundle) {
|
|
if (handlesPerformAccessibilityAction(i, bundle)) {
|
|
setCurrentItemFromAccessibilityCommand(i == 8192 ? ViewPager2.this.getCurrentItem() - 1 : ViewPager2.this.getCurrentItem() + 1);
|
|
return true;
|
|
}
|
|
throw new IllegalStateException();
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.AccessibilityProvider
|
|
public void onRestorePendingState() {
|
|
updatePageAccessibilityActions();
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.AccessibilityProvider
|
|
public void onRvInitializeAccessibilityEvent(@NonNull AccessibilityEvent accessibilityEvent) {
|
|
accessibilityEvent.setSource(ViewPager2.this);
|
|
accessibilityEvent.setClassName(onGetAccessibilityClassName());
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.AccessibilityProvider
|
|
public void onSetLayoutDirection() {
|
|
updatePageAccessibilityActions();
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.AccessibilityProvider
|
|
public void onSetNewCurrentItem() {
|
|
updatePageAccessibilityActions();
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.AccessibilityProvider
|
|
public void onSetOrientation() {
|
|
updatePageAccessibilityActions();
|
|
}
|
|
|
|
@Override // androidx.viewpager2.widget.ViewPager2.AccessibilityProvider
|
|
public void onSetUserInputEnabled() {
|
|
updatePageAccessibilityActions();
|
|
}
|
|
|
|
public void setCurrentItemFromAccessibilityCommand(int i) {
|
|
if (ViewPager2.this.isUserInputEnabled()) {
|
|
ViewPager2.this.setCurrentItemInternal(i, true);
|
|
}
|
|
}
|
|
|
|
public void updatePageAccessibilityActions() {
|
|
int itemCount;
|
|
ViewPager2 viewPager2 = ViewPager2.this;
|
|
int i = 16908360;
|
|
ViewCompat.removeAccessibilityAction(viewPager2, 16908360);
|
|
ViewCompat.removeAccessibilityAction(viewPager2, 16908361);
|
|
ViewCompat.removeAccessibilityAction(viewPager2, 16908358);
|
|
ViewCompat.removeAccessibilityAction(viewPager2, 16908359);
|
|
if (ViewPager2.this.getAdapter() != null && (itemCount = ViewPager2.this.getAdapter().getItemCount()) != 0 && ViewPager2.this.isUserInputEnabled()) {
|
|
if (ViewPager2.this.getOrientation() == 0) {
|
|
boolean isRtl = ViewPager2.this.isRtl();
|
|
int i2 = isRtl ? 16908360 : 16908361;
|
|
if (isRtl) {
|
|
i = 16908361;
|
|
}
|
|
if (ViewPager2.this.mCurrentItem < itemCount - 1) {
|
|
ViewCompat.replaceAccessibilityAction(viewPager2, new AccessibilityNodeInfoCompat.AccessibilityActionCompat(i2, null), null, this.mActionPageForward);
|
|
}
|
|
if (ViewPager2.this.mCurrentItem > 0) {
|
|
ViewCompat.replaceAccessibilityAction(viewPager2, new AccessibilityNodeInfoCompat.AccessibilityActionCompat(i, null), null, this.mActionPageBackward);
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
if (ViewPager2.this.mCurrentItem < itemCount - 1) {
|
|
ViewCompat.replaceAccessibilityAction(viewPager2, new AccessibilityNodeInfoCompat.AccessibilityActionCompat(16908359, null), null, this.mActionPageForward);
|
|
}
|
|
if (ViewPager2.this.mCurrentItem > 0) {
|
|
ViewCompat.replaceAccessibilityAction(viewPager2, new AccessibilityNodeInfoCompat.AccessibilityActionCompat(16908358, null), null, this.mActionPageBackward);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public interface PageTransformer {
|
|
void transformPage(@NonNull View view, float f);
|
|
}
|
|
|
|
public class PagerSnapHelperImpl extends PagerSnapHelper {
|
|
public PagerSnapHelperImpl() {
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.PagerSnapHelper, androidx.recyclerview.widget.SnapHelper
|
|
@Nullable
|
|
public View findSnapView(RecyclerView.LayoutManager layoutManager) {
|
|
if (ViewPager2.this.isFakeDragging()) {
|
|
return null;
|
|
}
|
|
return super.findSnapView(layoutManager);
|
|
}
|
|
}
|
|
|
|
public class RecyclerViewImpl extends RecyclerView {
|
|
public RecyclerViewImpl(@NonNull Context context) {
|
|
super(context);
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.RecyclerView, android.view.ViewGroup, android.view.View
|
|
@RequiresApi(23)
|
|
public CharSequence getAccessibilityClassName() {
|
|
return ViewPager2.this.mAccessibilityProvider.handlesRvGetAccessibilityClassName() ? ViewPager2.this.mAccessibilityProvider.onRvGetAccessibilityClassName() : super.getAccessibilityClassName();
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public void onInitializeAccessibilityEvent(@NonNull AccessibilityEvent accessibilityEvent) {
|
|
super.onInitializeAccessibilityEvent(accessibilityEvent);
|
|
accessibilityEvent.setFromIndex(ViewPager2.this.mCurrentItem);
|
|
accessibilityEvent.setToIndex(ViewPager2.this.mCurrentItem);
|
|
ViewPager2.this.mAccessibilityProvider.onRvInitializeAccessibilityEvent(accessibilityEvent);
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.RecyclerView, android.view.ViewGroup
|
|
public boolean onInterceptTouchEvent(MotionEvent motionEvent) {
|
|
return ViewPager2.this.isUserInputEnabled() && super.onInterceptTouchEvent(motionEvent);
|
|
}
|
|
|
|
@Override // androidx.recyclerview.widget.RecyclerView, android.view.View
|
|
@SuppressLint({"ClickableViewAccessibility"})
|
|
public boolean onTouchEvent(MotionEvent motionEvent) {
|
|
return ViewPager2.this.isUserInputEnabled() && super.onTouchEvent(motionEvent);
|
|
}
|
|
}
|
|
|
|
public static class SavedState extends View.BaseSavedState {
|
|
public static final Parcelable.Creator<SavedState> CREATOR = new AnonymousClass1();
|
|
public Parcelable mAdapterState;
|
|
public int mCurrentItem;
|
|
public int mRecyclerViewId;
|
|
|
|
/* renamed from: androidx.viewpager2.widget.ViewPager2$SavedState$1 reason: invalid class name */
|
|
public static class AnonymousClass1 implements Parcelable.ClassLoaderCreator<SavedState> {
|
|
@Override // android.os.Parcelable.Creator
|
|
public SavedState createFromParcel(Parcel parcel) {
|
|
return createFromParcel(parcel, (ClassLoader) null);
|
|
}
|
|
|
|
@Override // android.os.Parcelable.ClassLoaderCreator
|
|
public SavedState createFromParcel(Parcel parcel, ClassLoader classLoader) {
|
|
return Build.VERSION.SDK_INT >= 24 ? new SavedState(parcel, classLoader) : new SavedState(parcel);
|
|
}
|
|
|
|
@Override // android.os.Parcelable.Creator
|
|
public SavedState[] newArray(int i) {
|
|
return new SavedState[i];
|
|
}
|
|
}
|
|
|
|
public SavedState(Parcel parcel) {
|
|
super(parcel);
|
|
readValues(parcel, null);
|
|
}
|
|
|
|
@RequiresApi(24)
|
|
public SavedState(Parcel parcel, ClassLoader classLoader) {
|
|
super(parcel, classLoader);
|
|
readValues(parcel, classLoader);
|
|
}
|
|
|
|
public SavedState(Parcelable parcelable) {
|
|
super(parcelable);
|
|
}
|
|
|
|
private void readValues(Parcel parcel, ClassLoader classLoader) {
|
|
this.mRecyclerViewId = parcel.readInt();
|
|
this.mCurrentItem = parcel.readInt();
|
|
this.mAdapterState = parcel.readParcelable(classLoader);
|
|
}
|
|
|
|
@Override // android.view.View.BaseSavedState, android.os.Parcelable, android.view.AbsSavedState
|
|
public void writeToParcel(Parcel parcel, int i) {
|
|
super.writeToParcel(parcel, i);
|
|
parcel.writeInt(this.mRecyclerViewId);
|
|
parcel.writeInt(this.mCurrentItem);
|
|
parcel.writeParcelable(this.mAdapterState, i);
|
|
}
|
|
}
|
|
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public @interface ScrollState {
|
|
}
|
|
|
|
public static class SmoothScrollToPosition implements Runnable {
|
|
private final int mPosition;
|
|
private final RecyclerView mRecyclerView;
|
|
|
|
public SmoothScrollToPosition(int i, RecyclerView recyclerView) {
|
|
this.mPosition = i;
|
|
this.mRecyclerView = recyclerView;
|
|
}
|
|
|
|
@Override // java.lang.Runnable
|
|
public void run() {
|
|
this.mRecyclerView.smoothScrollToPosition(this.mPosition);
|
|
}
|
|
}
|
|
|
|
public ViewPager2(@NonNull Context context) {
|
|
super(context);
|
|
initialize(context, null);
|
|
}
|
|
|
|
public ViewPager2(@NonNull Context context, @Nullable AttributeSet attributeSet) {
|
|
super(context, attributeSet);
|
|
initialize(context, attributeSet);
|
|
}
|
|
|
|
public ViewPager2(@NonNull Context context, @Nullable AttributeSet attributeSet, int i) {
|
|
super(context, attributeSet, i);
|
|
initialize(context, attributeSet);
|
|
}
|
|
|
|
@RequiresApi(21)
|
|
public ViewPager2(@NonNull Context context, @Nullable AttributeSet attributeSet, int i, int i2) {
|
|
super(context, attributeSet, i, i2);
|
|
initialize(context, attributeSet);
|
|
}
|
|
|
|
private RecyclerView.OnChildAttachStateChangeListener enforceChildFillListener() {
|
|
return new AnonymousClass4();
|
|
}
|
|
|
|
private void initialize(Context context, AttributeSet attributeSet) {
|
|
this.mAccessibilityProvider = sFeatureEnhancedA11yEnabled ? new PageAwareAccessibilityProvider() : new BasicAccessibilityProvider();
|
|
RecyclerViewImpl recyclerViewImpl = new RecyclerViewImpl(context);
|
|
this.mRecyclerView = recyclerViewImpl;
|
|
recyclerViewImpl.setId(ViewCompat.generateViewId());
|
|
this.mRecyclerView.setDescendantFocusability(131072);
|
|
LinearLayoutManagerImpl linearLayoutManagerImpl = new LinearLayoutManagerImpl(context);
|
|
this.mLayoutManager = linearLayoutManagerImpl;
|
|
this.mRecyclerView.setLayoutManager(linearLayoutManagerImpl);
|
|
this.mRecyclerView.setScrollingTouchSlop(1);
|
|
setOrientation(context, attributeSet);
|
|
this.mRecyclerView.setLayoutParams(new ViewGroup.LayoutParams(-1, -1));
|
|
this.mRecyclerView.addOnChildAttachStateChangeListener(enforceChildFillListener());
|
|
ScrollEventAdapter scrollEventAdapter = new ScrollEventAdapter(this);
|
|
this.mScrollEventAdapter = scrollEventAdapter;
|
|
this.mFakeDragger = new FakeDrag(this, scrollEventAdapter, this.mRecyclerView);
|
|
PagerSnapHelperImpl pagerSnapHelperImpl = new PagerSnapHelperImpl();
|
|
this.mPagerSnapHelper = pagerSnapHelperImpl;
|
|
pagerSnapHelperImpl.attachToRecyclerView(this.mRecyclerView);
|
|
this.mRecyclerView.addOnScrollListener(this.mScrollEventAdapter);
|
|
CompositeOnPageChangeCallback compositeOnPageChangeCallback = new CompositeOnPageChangeCallback(3);
|
|
this.mPageChangeEventDispatcher = compositeOnPageChangeCallback;
|
|
this.mScrollEventAdapter.setOnPageChangeCallback(compositeOnPageChangeCallback);
|
|
AnonymousClass2 r3 = new AnonymousClass2();
|
|
AnonymousClass3 r4 = new AnonymousClass3();
|
|
this.mPageChangeEventDispatcher.addOnPageChangeCallback(r3);
|
|
this.mPageChangeEventDispatcher.addOnPageChangeCallback(r4);
|
|
this.mAccessibilityProvider.onInitialize(this.mPageChangeEventDispatcher, this.mRecyclerView);
|
|
this.mPageChangeEventDispatcher.addOnPageChangeCallback(this.mExternalPageChangeCallbacks);
|
|
PageTransformerAdapter pageTransformerAdapter = new PageTransformerAdapter(this.mLayoutManager);
|
|
this.mPageTransformerAdapter = pageTransformerAdapter;
|
|
this.mPageChangeEventDispatcher.addOnPageChangeCallback(pageTransformerAdapter);
|
|
RecyclerView recyclerView = this.mRecyclerView;
|
|
attachViewToParent(recyclerView, 0, recyclerView.getLayoutParams());
|
|
}
|
|
|
|
private void registerCurrentItemDataSetTracker(@Nullable RecyclerView.Adapter<?> adapter) {
|
|
if (adapter != null) {
|
|
adapter.registerAdapterDataObserver(this.mCurrentItemDataSetChangeObserver);
|
|
}
|
|
}
|
|
|
|
private void restorePendingState() {
|
|
RecyclerView.Adapter adapter;
|
|
if (this.mPendingCurrentItem != -1 && (adapter = getAdapter()) != null) {
|
|
Parcelable parcelable = this.mPendingAdapterState;
|
|
if (parcelable != null) {
|
|
if (adapter instanceof StatefulAdapter) {
|
|
((StatefulAdapter) adapter).restoreState(parcelable);
|
|
}
|
|
this.mPendingAdapterState = null;
|
|
}
|
|
int max = Math.max(0, Math.min(this.mPendingCurrentItem, adapter.getItemCount() - 1));
|
|
this.mCurrentItem = max;
|
|
this.mPendingCurrentItem = -1;
|
|
this.mRecyclerView.scrollToPosition(max);
|
|
this.mAccessibilityProvider.onRestorePendingState();
|
|
}
|
|
}
|
|
|
|
private void setOrientation(Context context, AttributeSet attributeSet) {
|
|
int[] iArr = R.styleable.ViewPager2;
|
|
TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, iArr);
|
|
if (Build.VERSION.SDK_INT >= 29) {
|
|
saveAttributeDataForStyleable(context, iArr, attributeSet, obtainStyledAttributes, 0, 0);
|
|
}
|
|
try {
|
|
setOrientation(obtainStyledAttributes.getInt(R.styleable.ViewPager2_android_orientation, 0));
|
|
} finally {
|
|
obtainStyledAttributes.recycle();
|
|
}
|
|
}
|
|
|
|
private void unregisterCurrentItemDataSetTracker(@Nullable RecyclerView.Adapter<?> adapter) {
|
|
if (adapter != null) {
|
|
adapter.unregisterAdapterDataObserver(this.mCurrentItemDataSetChangeObserver);
|
|
}
|
|
}
|
|
|
|
public void addItemDecoration(@NonNull RecyclerView.ItemDecoration itemDecoration) {
|
|
this.mRecyclerView.addItemDecoration(itemDecoration);
|
|
}
|
|
|
|
public void addItemDecoration(@NonNull RecyclerView.ItemDecoration itemDecoration, int i) {
|
|
this.mRecyclerView.addItemDecoration(itemDecoration, i);
|
|
}
|
|
|
|
public boolean beginFakeDrag() {
|
|
return this.mFakeDragger.beginFakeDrag();
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public boolean canScrollHorizontally(int i) {
|
|
return this.mRecyclerView.canScrollHorizontally(i);
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public boolean canScrollVertically(int i) {
|
|
return this.mRecyclerView.canScrollVertically(i);
|
|
}
|
|
|
|
@Override // android.view.ViewGroup, android.view.View
|
|
public void dispatchRestoreInstanceState(SparseArray<Parcelable> sparseArray) {
|
|
Parcelable parcelable = sparseArray.get(getId());
|
|
if (parcelable instanceof SavedState) {
|
|
int i = ((SavedState) parcelable).mRecyclerViewId;
|
|
sparseArray.put(this.mRecyclerView.getId(), sparseArray.get(i));
|
|
sparseArray.remove(i);
|
|
}
|
|
super.dispatchRestoreInstanceState(sparseArray);
|
|
restorePendingState();
|
|
}
|
|
|
|
public boolean endFakeDrag() {
|
|
return this.mFakeDragger.endFakeDrag();
|
|
}
|
|
|
|
public boolean fakeDragBy(@Px @SuppressLint({"SupportAnnotationUsage"}) float f) {
|
|
return this.mFakeDragger.fakeDragBy(f);
|
|
}
|
|
|
|
@Override // android.view.ViewGroup, android.view.View
|
|
@RequiresApi(23)
|
|
public CharSequence getAccessibilityClassName() {
|
|
return this.mAccessibilityProvider.handlesGetAccessibilityClassName() ? this.mAccessibilityProvider.onGetAccessibilityClassName() : super.getAccessibilityClassName();
|
|
}
|
|
|
|
@Nullable
|
|
public RecyclerView.Adapter getAdapter() {
|
|
return this.mRecyclerView.getAdapter();
|
|
}
|
|
|
|
public int getCurrentItem() {
|
|
return this.mCurrentItem;
|
|
}
|
|
|
|
@NonNull
|
|
public RecyclerView.ItemDecoration getItemDecorationAt(int i) {
|
|
return this.mRecyclerView.getItemDecorationAt(i);
|
|
}
|
|
|
|
public int getItemDecorationCount() {
|
|
return this.mRecyclerView.getItemDecorationCount();
|
|
}
|
|
|
|
public int getOffscreenPageLimit() {
|
|
return this.mOffscreenPageLimit;
|
|
}
|
|
|
|
public int getOrientation() {
|
|
return this.mLayoutManager.getOrientation();
|
|
}
|
|
|
|
public int getPageSize() {
|
|
int i;
|
|
int i2;
|
|
RecyclerView recyclerView = this.mRecyclerView;
|
|
if (getOrientation() == 0) {
|
|
i = recyclerView.getWidth() - recyclerView.getPaddingLeft();
|
|
i2 = recyclerView.getPaddingRight();
|
|
} else {
|
|
i = recyclerView.getHeight() - recyclerView.getPaddingTop();
|
|
i2 = recyclerView.getPaddingBottom();
|
|
}
|
|
return i - i2;
|
|
}
|
|
|
|
public int getScrollState() {
|
|
return this.mScrollEventAdapter.getScrollState();
|
|
}
|
|
|
|
public void invalidateItemDecorations() {
|
|
this.mRecyclerView.invalidateItemDecorations();
|
|
}
|
|
|
|
public boolean isFakeDragging() {
|
|
return this.mFakeDragger.isFakeDragging();
|
|
}
|
|
|
|
public boolean isRtl() {
|
|
return this.mLayoutManager.getLayoutDirection() == 1;
|
|
}
|
|
|
|
public boolean isUserInputEnabled() {
|
|
return this.mUserInputEnabled;
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo accessibilityNodeInfo) {
|
|
super.onInitializeAccessibilityNodeInfo(accessibilityNodeInfo);
|
|
this.mAccessibilityProvider.onInitializeAccessibilityNodeInfo(accessibilityNodeInfo);
|
|
}
|
|
|
|
@Override // android.view.ViewGroup, android.view.View
|
|
public void onLayout(boolean z2, int i, int i2, int i3, int i4) {
|
|
int measuredWidth = this.mRecyclerView.getMeasuredWidth();
|
|
int measuredHeight = this.mRecyclerView.getMeasuredHeight();
|
|
this.mTmpContainerRect.left = getPaddingLeft();
|
|
this.mTmpContainerRect.right = (i3 - i) - getPaddingRight();
|
|
this.mTmpContainerRect.top = getPaddingTop();
|
|
this.mTmpContainerRect.bottom = (i4 - i2) - getPaddingBottom();
|
|
Gravity.apply(8388659, measuredWidth, measuredHeight, this.mTmpContainerRect, this.mTmpChildRect);
|
|
RecyclerView recyclerView = this.mRecyclerView;
|
|
Rect rect = this.mTmpChildRect;
|
|
recyclerView.layout(rect.left, rect.top, rect.right, rect.bottom);
|
|
if (this.mCurrentItemDirty) {
|
|
updateCurrentItem();
|
|
}
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public void onMeasure(int i, int i2) {
|
|
measureChild(this.mRecyclerView, i, i2);
|
|
int measuredWidth = this.mRecyclerView.getMeasuredWidth();
|
|
int measuredHeight = this.mRecyclerView.getMeasuredHeight();
|
|
int measuredState = this.mRecyclerView.getMeasuredState();
|
|
int paddingRight = getPaddingRight() + getPaddingLeft() + measuredWidth;
|
|
int paddingTop = getPaddingTop();
|
|
setMeasuredDimension(ViewGroup.resolveSizeAndState(Math.max(paddingRight, getSuggestedMinimumWidth()), i, measuredState), ViewGroup.resolveSizeAndState(Math.max(getPaddingBottom() + paddingTop + measuredHeight, getSuggestedMinimumHeight()), i2, measuredState << 16));
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public void onRestoreInstanceState(Parcelable parcelable) {
|
|
if (!(parcelable instanceof SavedState)) {
|
|
super.onRestoreInstanceState(parcelable);
|
|
return;
|
|
}
|
|
SavedState savedState = (SavedState) parcelable;
|
|
super.onRestoreInstanceState(savedState.getSuperState());
|
|
this.mPendingCurrentItem = savedState.mCurrentItem;
|
|
this.mPendingAdapterState = savedState.mAdapterState;
|
|
}
|
|
|
|
@Override // android.view.View
|
|
@Nullable
|
|
public Parcelable onSaveInstanceState() {
|
|
SavedState savedState = new SavedState(super.onSaveInstanceState());
|
|
savedState.mRecyclerViewId = this.mRecyclerView.getId();
|
|
int i = this.mPendingCurrentItem;
|
|
if (i == -1) {
|
|
i = this.mCurrentItem;
|
|
}
|
|
savedState.mCurrentItem = i;
|
|
Parcelable parcelable = this.mPendingAdapterState;
|
|
if (parcelable != null) {
|
|
savedState.mAdapterState = parcelable;
|
|
} else {
|
|
RecyclerView.Adapter adapter = this.mRecyclerView.getAdapter();
|
|
if (adapter instanceof StatefulAdapter) {
|
|
savedState.mAdapterState = ((StatefulAdapter) adapter).saveState();
|
|
}
|
|
}
|
|
return savedState;
|
|
}
|
|
|
|
@Override // android.view.ViewGroup
|
|
public void onViewAdded(View view) {
|
|
throw new IllegalStateException(ViewPager2.class.getSimpleName() + " does not support direct child views");
|
|
}
|
|
|
|
@Override // android.view.View
|
|
@RequiresApi(16)
|
|
public boolean performAccessibilityAction(int i, Bundle bundle) {
|
|
return this.mAccessibilityProvider.handlesPerformAccessibilityAction(i, bundle) ? this.mAccessibilityProvider.onPerformAccessibilityAction(i, bundle) : super.performAccessibilityAction(i, bundle);
|
|
}
|
|
|
|
public void registerOnPageChangeCallback(@NonNull OnPageChangeCallback onPageChangeCallback) {
|
|
this.mExternalPageChangeCallbacks.addOnPageChangeCallback(onPageChangeCallback);
|
|
}
|
|
|
|
public void removeItemDecoration(@NonNull RecyclerView.ItemDecoration itemDecoration) {
|
|
this.mRecyclerView.removeItemDecoration(itemDecoration);
|
|
}
|
|
|
|
public void removeItemDecorationAt(int i) {
|
|
this.mRecyclerView.removeItemDecorationAt(i);
|
|
}
|
|
|
|
public void requestTransform() {
|
|
if (this.mPageTransformerAdapter.getPageTransformer() != null) {
|
|
double relativeScrollPosition = this.mScrollEventAdapter.getRelativeScrollPosition();
|
|
int i = (int) relativeScrollPosition;
|
|
float f = (float) (relativeScrollPosition - ((double) i));
|
|
this.mPageTransformerAdapter.onPageScrolled(i, f, Math.round(((float) getPageSize()) * f));
|
|
}
|
|
}
|
|
|
|
public void setAdapter(@Nullable RecyclerView.Adapter adapter) {
|
|
RecyclerView.Adapter adapter2 = this.mRecyclerView.getAdapter();
|
|
this.mAccessibilityProvider.onDetachAdapter(adapter2);
|
|
unregisterCurrentItemDataSetTracker(adapter2);
|
|
this.mRecyclerView.setAdapter(adapter);
|
|
this.mCurrentItem = 0;
|
|
restorePendingState();
|
|
this.mAccessibilityProvider.onAttachAdapter(adapter);
|
|
registerCurrentItemDataSetTracker(adapter);
|
|
}
|
|
|
|
public void setCurrentItem(int i) {
|
|
setCurrentItem(i, true);
|
|
}
|
|
|
|
public void setCurrentItem(int i, boolean z2) {
|
|
if (!isFakeDragging()) {
|
|
setCurrentItemInternal(i, z2);
|
|
return;
|
|
}
|
|
throw new IllegalStateException("Cannot change current item when ViewPager2 is fake dragging");
|
|
}
|
|
|
|
public void setCurrentItemInternal(int i, boolean z2) {
|
|
RecyclerView.Adapter adapter = getAdapter();
|
|
if (adapter == null) {
|
|
if (this.mPendingCurrentItem != -1) {
|
|
this.mPendingCurrentItem = Math.max(i, 0);
|
|
}
|
|
} else if (adapter.getItemCount() > 0) {
|
|
int min = Math.min(Math.max(i, 0), adapter.getItemCount() - 1);
|
|
if (min != this.mCurrentItem || !this.mScrollEventAdapter.isIdle()) {
|
|
int i2 = this.mCurrentItem;
|
|
if (min != i2 || !z2) {
|
|
double d = (double) i2;
|
|
this.mCurrentItem = min;
|
|
this.mAccessibilityProvider.onSetNewCurrentItem();
|
|
if (!this.mScrollEventAdapter.isIdle()) {
|
|
d = this.mScrollEventAdapter.getRelativeScrollPosition();
|
|
}
|
|
this.mScrollEventAdapter.notifyProgrammaticScroll(min, z2);
|
|
if (!z2) {
|
|
this.mRecyclerView.scrollToPosition(min);
|
|
return;
|
|
}
|
|
double d2 = (double) min;
|
|
if (Math.abs(d2 - d) > 3.0d) {
|
|
this.mRecyclerView.scrollToPosition(d2 > d ? min - 3 : min + 3);
|
|
RecyclerView recyclerView = this.mRecyclerView;
|
|
recyclerView.post(new SmoothScrollToPosition(min, recyclerView));
|
|
return;
|
|
}
|
|
this.mRecyclerView.smoothScrollToPosition(min);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override // android.view.View
|
|
@RequiresApi(17)
|
|
public void setLayoutDirection(int i) {
|
|
super.setLayoutDirection(i);
|
|
this.mAccessibilityProvider.onSetLayoutDirection();
|
|
}
|
|
|
|
public void setOffscreenPageLimit(int i) {
|
|
if (i >= 1 || i == -1) {
|
|
this.mOffscreenPageLimit = i;
|
|
this.mRecyclerView.requestLayout();
|
|
return;
|
|
}
|
|
throw new IllegalArgumentException("Offscreen page limit must be OFFSCREEN_PAGE_LIMIT_DEFAULT or a number > 0");
|
|
}
|
|
|
|
public void setOrientation(int i) {
|
|
this.mLayoutManager.setOrientation(i);
|
|
this.mAccessibilityProvider.onSetOrientation();
|
|
}
|
|
|
|
public void setPageTransformer(@Nullable PageTransformer pageTransformer) {
|
|
if (pageTransformer != null) {
|
|
if (!this.mSavedItemAnimatorPresent) {
|
|
this.mSavedItemAnimator = this.mRecyclerView.getItemAnimator();
|
|
this.mSavedItemAnimatorPresent = true;
|
|
}
|
|
this.mRecyclerView.setItemAnimator(null);
|
|
} else if (this.mSavedItemAnimatorPresent) {
|
|
this.mRecyclerView.setItemAnimator(this.mSavedItemAnimator);
|
|
this.mSavedItemAnimator = null;
|
|
this.mSavedItemAnimatorPresent = false;
|
|
}
|
|
if (pageTransformer != this.mPageTransformerAdapter.getPageTransformer()) {
|
|
this.mPageTransformerAdapter.setPageTransformer(pageTransformer);
|
|
requestTransform();
|
|
}
|
|
}
|
|
|
|
public void setUserInputEnabled(boolean z2) {
|
|
this.mUserInputEnabled = z2;
|
|
this.mAccessibilityProvider.onSetUserInputEnabled();
|
|
}
|
|
|
|
public void snapToPage() {
|
|
View findSnapView = this.mPagerSnapHelper.findSnapView(this.mLayoutManager);
|
|
if (findSnapView != null) {
|
|
int[] calculateDistanceToFinalSnap = this.mPagerSnapHelper.calculateDistanceToFinalSnap(this.mLayoutManager, findSnapView);
|
|
if (calculateDistanceToFinalSnap[0] != 0 || calculateDistanceToFinalSnap[1] != 0) {
|
|
this.mRecyclerView.smoothScrollBy(calculateDistanceToFinalSnap[0], calculateDistanceToFinalSnap[1]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void unregisterOnPageChangeCallback(@NonNull OnPageChangeCallback onPageChangeCallback) {
|
|
this.mExternalPageChangeCallbacks.removeOnPageChangeCallback(onPageChangeCallback);
|
|
}
|
|
|
|
public void updateCurrentItem() {
|
|
PagerSnapHelper pagerSnapHelper = this.mPagerSnapHelper;
|
|
if (pagerSnapHelper != null) {
|
|
View findSnapView = pagerSnapHelper.findSnapView(this.mLayoutManager);
|
|
if (findSnapView != null) {
|
|
int position = this.mLayoutManager.getPosition(findSnapView);
|
|
if (position != this.mCurrentItem && getScrollState() == 0) {
|
|
this.mPageChangeEventDispatcher.onPageSelected(position);
|
|
}
|
|
this.mCurrentItemDirty = false;
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
throw new IllegalStateException("Design assumption violated.");
|
|
}
|
|
}
|