diff --git a/api/current.txt b/api/current.txt index 6122e52089856..9a2710c8fbe13 100644 --- a/api/current.txt +++ b/api/current.txt @@ -38007,6 +38007,7 @@ package android.provider { field public static final String COLUMN_FLAGS = "flags"; field public static final String COLUMN_ICON = "icon"; field public static final String COLUMN_MIME_TYPES = "mime_types"; + field public static final String COLUMN_QUERY_ARGS = "query_args"; field public static final String COLUMN_ROOT_ID = "root_id"; field public static final String COLUMN_SUMMARY = "summary"; field public static final String COLUMN_TITLE = "title"; diff --git a/core/java/android/provider/DocumentsContract.java b/core/java/android/provider/DocumentsContract.java index a323ed1a51cbb..9ca023891a4e7 100644 --- a/core/java/android/provider/DocumentsContract.java +++ b/core/java/android/provider/DocumentsContract.java @@ -639,6 +639,28 @@ public final class DocumentsContract { */ public static final String COLUMN_MIME_TYPES = "mime_types"; + /** + * Query arguments supported by this root. This column is optional + * and related to {@link #COLUMN_FLAGS} and {@link #FLAG_SUPPORTS_SEARCH}. + * If the flags include {@link #FLAG_SUPPORTS_SEARCH}, and the column is + * {@code null}, the root is assumed to support {@link #QUERY_ARG_DISPLAY_NAME} + * search of {@link Document#COLUMN_DISPLAY_NAME}. Multiple query arguments + * can be separated by a newline. For example, a root supporting + * {@link #QUERY_ARG_MIME_TYPES} and {@link #QUERY_ARG_DISPLAY_NAME} might + * return "android:query-arg-mime-types\nandroid:query-arg-display-name". + *

+ * Type: STRING + * @see #COLUMN_FLAGS + * @see #FLAG_SUPPORTS_SEARCH + * @see #QUERY_ARG_DISPLAY_NAME + * @see #QUERY_ARG_FILE_SIZE_OVER + * @see #QUERY_ARG_LAST_MODIFIED_AFTER + * @see #QUERY_ARG_MIME_TYPES + * @see DocumentsProvider#querySearchDocuments(String, String[], + * Bundle) + */ + public static final String COLUMN_QUERY_ARGS = "query_args"; + /** * MIME type for a root. */ @@ -680,6 +702,8 @@ public final class DocumentsContract { * String) * @see DocumentsProvider#querySearchDocuments(String, String, * String[]) + * @see DocumentsProvider#querySearchDocuments(String, String[], + * Bundle) */ public static final int FLAG_SUPPORTS_SEARCH = 1 << 3; diff --git a/core/java/android/provider/DocumentsProvider.java b/core/java/android/provider/DocumentsProvider.java index 70c84f8cc324f..ed28cc739467b 100644 --- a/core/java/android/provider/DocumentsProvider.java +++ b/core/java/android/provider/DocumentsProvider.java @@ -687,6 +687,7 @@ public abstract class DocumentsProvider extends ContentProvider { * extras {@link Bundle} when any QUERY_ARG_* value was honored * during the preparation of the results. * + * @see Root#COLUMN_QUERY_ARGS * @see ContentResolver#EXTRA_HONORED_ARGS * @see DocumentsContract#EXTRA_LOADING * @see DocumentsContract#EXTRA_INFO diff --git a/core/java/com/android/internal/content/FileSystemProvider.java b/core/java/com/android/internal/content/FileSystemProvider.java index a27dbeae2f3ac..18c4b467dfba2 100644 --- a/core/java/com/android/internal/content/FileSystemProvider.java +++ b/core/java/com/android/internal/content/FileSystemProvider.java @@ -74,6 +74,16 @@ public abstract class FileSystemProvider extends DocumentsProvider { private static final boolean LOG_INOTIFY = false; + protected static final String SUPPORTED_QUERY_ARGS = joinNewline( + DocumentsContract.QUERY_ARG_DISPLAY_NAME, + DocumentsContract.QUERY_ARG_FILE_SIZE_OVER, + DocumentsContract.QUERY_ARG_LAST_MODIFIED_AFTER, + DocumentsContract.QUERY_ARG_MIME_TYPES); + + private static String joinNewline(String... args) { + return TextUtils.join("\n", args); + } + private String[] mDefaultProjection; @GuardedBy("mObservers") diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java index 8d04702ea5f6c..da3416b886add 100644 --- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java +++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java @@ -76,7 +76,7 @@ public class ExternalStorageProvider extends FileSystemProvider { private static final String[] DEFAULT_ROOT_PROJECTION = new String[] { Root.COLUMN_ROOT_ID, Root.COLUMN_FLAGS, Root.COLUMN_ICON, Root.COLUMN_TITLE, - Root.COLUMN_DOCUMENT_ID, Root.COLUMN_AVAILABLE_BYTES, + Root.COLUMN_DOCUMENT_ID, Root.COLUMN_AVAILABLE_BYTES, Root.COLUMN_QUERY_ARGS }; private static final String[] DEFAULT_DOCUMENT_PROJECTION = new String[] { @@ -444,6 +444,7 @@ public class ExternalStorageProvider extends FileSystemProvider { row.add(Root.COLUMN_FLAGS, root.flags); row.add(Root.COLUMN_TITLE, root.title); row.add(Root.COLUMN_DOCUMENT_ID, root.docId); + row.add(Root.COLUMN_QUERY_ARGS, SUPPORTED_QUERY_ARGS); long availableBytes = -1; if (root.reportAvailableBytes) {