// Signature format: 3.0
package androidx.contentpager.content {

  public class ContentPager {
    ctor public ContentPager(android.content.ContentResolver!, androidx.contentpager.content.ContentPager.QueryRunner!);
    ctor public ContentPager(android.content.ContentResolver, androidx.contentpager.content.ContentPager.QueryRunner, int);
    method public static android.os.Bundle createArgs(int, int);
    method @MainThread public androidx.contentpager.content.Query query(@RequiresPermission.Read android.net.Uri, String![]?, android.os.Bundle, android.os.CancellationSignal?, androidx.contentpager.content.ContentPager.ContentCallback);
    method @MainThread public void reset();
    field public static final int CURSOR_DISPOSITION_COPIED = 1; // 0x1
    field public static final int CURSOR_DISPOSITION_PAGED = 2; // 0x2
    field public static final int CURSOR_DISPOSITION_REPAGED = 3; // 0x3
    field public static final int CURSOR_DISPOSITION_WRAPPED = 4; // 0x4
    field public static final String EXTRA_HONORED_ARGS = "android.content.extra.HONORED_ARGS";
    field public static final String EXTRA_REQUESTED_LIMIT = "android-support:extra-ignored-limit";
    field public static final String EXTRA_SUGGESTED_LIMIT = "android-support:extra-suggested-limit";
    field public static final String EXTRA_TOTAL_COUNT = "android.content.extra.TOTAL_COUNT";
    field public static final String QUERY_ARG_LIMIT = "android:query-arg-limit";
    field public static final String QUERY_ARG_OFFSET = "android:query-arg-offset";
  }

  public static interface ContentPager.ContentCallback {
    method @MainThread public void onCursorReady(androidx.contentpager.content.Query, android.database.Cursor?);
  }

  @IntDef({androidx.contentpager.content.ContentPager.CURSOR_DISPOSITION_COPIED, androidx.contentpager.content.ContentPager.CURSOR_DISPOSITION_PAGED, androidx.contentpager.content.ContentPager.CURSOR_DISPOSITION_REPAGED, androidx.contentpager.content.ContentPager.CURSOR_DISPOSITION_WRAPPED}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ContentPager.CursorDisposition {
  }

  public static interface ContentPager.QueryRunner {
    method public void cancel(androidx.contentpager.content.Query);
    method public boolean isRunning(androidx.contentpager.content.Query);
    method public void query(androidx.contentpager.content.Query, androidx.contentpager.content.ContentPager.QueryRunner.Callback);
  }

  public static interface ContentPager.QueryRunner.Callback {
    method public void onQueryFinished(androidx.contentpager.content.Query, android.database.Cursor?);
    method public android.database.Cursor? runQueryInBackground(androidx.contentpager.content.Query);
  }

  public final class LoaderQueryRunner implements androidx.contentpager.content.ContentPager.QueryRunner {
    ctor public LoaderQueryRunner(android.content.Context, android.app.LoaderManager);
    method public void cancel(androidx.contentpager.content.Query);
    method public boolean isRunning(androidx.contentpager.content.Query);
    method public void query(androidx.contentpager.content.Query, androidx.contentpager.content.ContentPager.QueryRunner.Callback);
  }

  public final class Query {
    method public int getId();
    method public int getLimit();
    method public int getOffset();
    method public android.net.Uri getUri();
  }

}

