// Signature format: 3.0
package androidx.viewpager2.adapter {

  public abstract class FragmentStateAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter<androidx.viewpager2.adapter.FragmentViewHolder> implements androidx.viewpager2.adapter.StatefulAdapter {
    ctor public FragmentStateAdapter(androidx.fragment.app.FragmentActivity);
    ctor public FragmentStateAdapter(androidx.fragment.app.Fragment);
    ctor public FragmentStateAdapter(androidx.fragment.app.FragmentManager, androidx.lifecycle.Lifecycle);
    method public boolean containsItem(long);
    method public abstract androidx.fragment.app.Fragment getItem(int);
    method public final void onBindViewHolder(androidx.viewpager2.adapter.FragmentViewHolder, int);
    method public final androidx.viewpager2.adapter.FragmentViewHolder onCreateViewHolder(android.view.ViewGroup, int);
    method public final boolean onFailedToRecycleView(androidx.viewpager2.adapter.FragmentViewHolder);
    method public final void onViewAttachedToWindow(androidx.viewpager2.adapter.FragmentViewHolder);
    method public final void onViewRecycled(androidx.viewpager2.adapter.FragmentViewHolder);
    method public final void restoreState(android.os.Parcelable);
    method public final android.os.Parcelable saveState();
    method public final void setHasStableIds(boolean);
  }

  public final class FragmentViewHolder extends androidx.recyclerview.widget.RecyclerView.ViewHolder {
  }

  public interface StatefulAdapter {
    method public void restoreState(android.os.Parcelable);
    method public android.os.Parcelable saveState();
  }

}

package androidx.viewpager2.widget {

  public final class ViewPager2 extends android.view.ViewGroup {
    ctor public ViewPager2(android.content.Context);
    ctor public ViewPager2(android.content.Context, android.util.AttributeSet?);
    ctor public ViewPager2(android.content.Context, android.util.AttributeSet?, int);
    ctor @RequiresApi(21) public ViewPager2(android.content.Context, android.util.AttributeSet?, int, int);
    method public boolean beginFakeDrag();
    method public boolean endFakeDrag();
    method public boolean fakeDragBy(float);
    method public androidx.recyclerview.widget.RecyclerView.Adapter? getAdapter();
    method public int getCurrentItem();
    method public int getOffscreenPageLimit();
    method public int getOrientation();
    method public int getScrollState();
    method public boolean isFakeDragging();
    method public boolean isUserInputEnabled();
    method public void registerOnPageChangeCallback(androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback);
    method public void requestTransform();
    method public void setAdapter(androidx.recyclerview.widget.RecyclerView.Adapter?);
    method public void setCurrentItem(int);
    method public void setCurrentItem(int, boolean);
    method public void setOffscreenPageLimit(int);
    method public void setOrientation(int);
    method public void setPageTransformer(androidx.viewpager2.widget.ViewPager2.PageTransformer?);
    method public void setUserInputEnabled(boolean);
    method public void unregisterOnPageChangeCallback(androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback);
    field public static final int OFFSCREEN_PAGE_LIMIT_DEFAULT = 0; // 0x0
    field public static final int ORIENTATION_HORIZONTAL = 0; // 0x0
    field public static final int ORIENTATION_VERTICAL = 1; // 0x1
    field public static final int SCROLL_STATE_DRAGGING = 1; // 0x1
    field public static final int SCROLL_STATE_IDLE = 0; // 0x0
    field public static final int SCROLL_STATE_SETTLING = 2; // 0x2
  }

  public abstract static class ViewPager2.OnPageChangeCallback {
    ctor public ViewPager2.OnPageChangeCallback();
    method public void onPageScrollStateChanged(int);
    method public void onPageScrolled(int, float, @Px int);
    method public void onPageSelected(int);
  }

  public static interface ViewPager2.PageTransformer {
    method public void transformPage(android.view.View, float);
  }

}

