package androidx.recyclerview.selection {

  public abstract class BandPredicate {
    ctor public BandPredicate();
    method public abstract boolean canInitiate(android.view.MotionEvent);
  }

  public static final class BandPredicate.EmptyArea extends androidx.recyclerview.selection.BandPredicate {
    ctor public BandPredicate.EmptyArea(androidx.recyclerview.widget.RecyclerView);
    method public boolean canInitiate(android.view.MotionEvent);
  }

  public static final class BandPredicate.NonDraggableArea extends androidx.recyclerview.selection.BandPredicate {
    ctor public BandPredicate.NonDraggableArea(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.selection.ItemDetailsLookup);
    method public boolean canInitiate(android.view.MotionEvent);
  }

  public abstract class FocusDelegate<K> {
    ctor public FocusDelegate();
    method public abstract void clearFocus();
    method public abstract void focusItem(androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails<K>);
    method public abstract int getFocusedPosition();
    method public abstract boolean hasFocusedItem();
  }

  public abstract class ItemDetailsLookup<K> {
    ctor public ItemDetailsLookup();
    method public abstract androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails<K> getItemDetails(android.view.MotionEvent);
  }

  public static abstract class ItemDetailsLookup.ItemDetails<K> {
    ctor public ItemDetailsLookup.ItemDetails();
    method public abstract int getPosition();
    method public abstract K getSelectionKey();
    method public boolean hasSelectionKey();
    method public boolean inDragRegion(android.view.MotionEvent);
    method public boolean inSelectionHotspot(android.view.MotionEvent);
  }

  public abstract class ItemKeyProvider<K> {
    ctor protected ItemKeyProvider(int);
    method public abstract K getKey(int);
    method public abstract int getPosition(K);
    field public static final int SCOPE_CACHED = 1; // 0x1
    field public static final int SCOPE_MAPPED = 0; // 0x0
  }

  public static abstract class ItemKeyProvider.Scope implements java.lang.annotation.Annotation {
  }

  public final class MutableSelection<K> extends androidx.recyclerview.selection.Selection {
    ctor public MutableSelection();
    method public boolean add(K);
    method public void clear();
    method public void copyFrom(androidx.recyclerview.selection.Selection<K>);
    method public boolean remove(K);
  }

  public abstract interface OnContextClickListener {
    method public abstract boolean onContextClick(android.view.MotionEvent);
  }

  public abstract interface OnDragInitiatedListener {
    method public abstract boolean onDragInitiated(android.view.MotionEvent);
  }

  public abstract interface OnItemActivatedListener<K> {
    method public abstract boolean onItemActivated(androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails<K>, android.view.MotionEvent);
  }

  public final class OperationMonitor {
    ctor public OperationMonitor();
    method public void addListener(androidx.recyclerview.selection.OperationMonitor.OnChangeListener);
    method public synchronized boolean isStarted();
    method public void removeListener(androidx.recyclerview.selection.OperationMonitor.OnChangeListener);
  }

  public static abstract interface OperationMonitor.OnChangeListener {
    method public abstract void onChanged();
  }

  public class Selection<K> implements java.lang.Iterable {
    method public boolean contains(K);
    method public boolean isEmpty();
    method public java.util.Iterator<K> iterator();
    method public int size();
  }

  public final class SelectionPredicates {
    method public static <K> androidx.recyclerview.selection.SelectionTracker.SelectionPredicate<K> createSelectAnything();
    method public static <K> androidx.recyclerview.selection.SelectionTracker.SelectionPredicate<K> createSelectSingleAnything();
  }

  public abstract class SelectionTracker<K> {
    ctor public SelectionTracker();
    method public abstract void addObserver(androidx.recyclerview.selection.SelectionTracker.SelectionObserver);
    method public abstract boolean clearSelection();
    method public abstract void copySelection(androidx.recyclerview.selection.MutableSelection<K>);
    method public abstract boolean deselect(K);
    method public abstract androidx.recyclerview.selection.Selection<K> getSelection();
    method public abstract boolean hasSelection();
    method public abstract boolean isSelected(K);
    method public abstract void onRestoreInstanceState(android.os.Bundle);
    method public abstract void onSaveInstanceState(android.os.Bundle);
    method protected abstract void restoreSelection(androidx.recyclerview.selection.Selection<K>);
    method public abstract boolean select(K);
    method public abstract boolean setItemsSelected(java.lang.Iterable<K>, boolean);
    field public static final java.lang.String SELECTION_CHANGED_MARKER = "Selection-Changed";
  }

  public static final class SelectionTracker.Builder<K> {
    ctor public SelectionTracker.Builder(java.lang.String, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.selection.ItemKeyProvider<K>, androidx.recyclerview.selection.ItemDetailsLookup<K>, androidx.recyclerview.selection.StorageStrategy<K>);
    method public androidx.recyclerview.selection.SelectionTracker<K> build();
    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withBandOverlay(int);
    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withBandPredicate(androidx.recyclerview.selection.BandPredicate);
    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withFocusDelegate(androidx.recyclerview.selection.FocusDelegate<K>);
    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withGestureTooltypes(int...);
    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withOnContextClickListener(androidx.recyclerview.selection.OnContextClickListener);
    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withOnDragInitiatedListener(androidx.recyclerview.selection.OnDragInitiatedListener);
    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withOnItemActivatedListener(androidx.recyclerview.selection.OnItemActivatedListener<K>);
    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withOperationMonitor(androidx.recyclerview.selection.OperationMonitor);
    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withPointerTooltypes(int...);
    method public androidx.recyclerview.selection.SelectionTracker.Builder<K> withSelectionPredicate(androidx.recyclerview.selection.SelectionTracker.SelectionPredicate<K>);
  }

  public static abstract class SelectionTracker.SelectionObserver<K> {
    ctor public SelectionTracker.SelectionObserver();
    method public void onItemStateChanged(K, boolean);
    method public void onSelectionChanged();
    method public void onSelectionRefresh();
    method public void onSelectionRestored();
  }

  public static abstract class SelectionTracker.SelectionPredicate<K> {
    ctor public SelectionTracker.SelectionPredicate();
    method public abstract boolean canSelectMultiple();
    method public abstract boolean canSetStateAtPosition(int, boolean);
    method public abstract boolean canSetStateForKey(K, boolean);
  }

  public final class StableIdKeyProvider extends androidx.recyclerview.selection.ItemKeyProvider {
    ctor public StableIdKeyProvider(androidx.recyclerview.widget.RecyclerView);
    method public java.lang.Long getKey(int);
    method public int getPosition(java.lang.Long);
  }

  public abstract class StorageStrategy<K> {
    ctor public StorageStrategy(java.lang.Class<K>);
    method public abstract android.os.Bundle asBundle(androidx.recyclerview.selection.Selection<K>);
    method public abstract androidx.recyclerview.selection.Selection<K> asSelection(android.os.Bundle);
    method public static androidx.recyclerview.selection.StorageStrategy<java.lang.Long> createLongStorage();
    method public static <K extends android.os.Parcelable> androidx.recyclerview.selection.StorageStrategy<K> createParcelableStorage(java.lang.Class<K>);
    method public static androidx.recyclerview.selection.StorageStrategy<java.lang.String> createStringStorage();
  }

}