diff options
author | 2019-03-05 01:12:54 +0000 | |
---|---|---|
committer | 2019-03-05 01:12:54 +0000 | |
commit | 004dd4d4fc44e9cc703d1a02baf198d76fbc0475 (patch) | |
tree | f9e0ae0442395fe2c7c6ab74c350dd939943d1dc | |
parent | 678151592d5624ad681a725404a3d4b5e0bcc4cf (diff) | |
parent | 1b404bef1d7fd4d06cc230f4bb4a57ff12826948 (diff) |
Merge "Include UUID in MediaStore version."
-rw-r--r-- | api/current.txt | 3 | ||||
-rw-r--r-- | core/java/android/provider/MediaStore.java | 48 |
2 files changed, 37 insertions, 14 deletions
diff --git a/api/current.txt b/api/current.txt index eb920b0a4101..76e14abc13f8 100644 --- a/api/current.txt +++ b/api/current.txt @@ -38417,7 +38417,8 @@ package android.provider { method @Nullable public static android.net.Uri getDocumentUri(@NonNull android.content.Context, @NonNull android.net.Uri); method public static android.net.Uri getMediaScannerUri(); method @Nullable public static android.net.Uri getMediaUri(@NonNull android.content.Context, @NonNull android.net.Uri); - method public static String getVersion(android.content.Context); + method @NonNull public static String getVersion(@NonNull android.content.Context); + method @NonNull public static String getVersion(@NonNull android.content.Context, @NonNull String); method @NonNull public static String getVolumeName(@NonNull android.net.Uri); method @NonNull public static android.net.Uri setIncludePending(@NonNull android.net.Uri); method @NonNull public static android.net.Uri setRequireOriginal(@NonNull android.net.Uri); diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java index a34ac706c406..917b5c2615db 100644 --- a/core/java/android/provider/MediaStore.java +++ b/core/java/android/provider/MediaStore.java @@ -146,6 +146,8 @@ public final class MediaStore { public static final String RETRANSLATE_CALL = "update_titles"; /** {@hide} */ + public static final String GET_VERSION_CALL = "get_version"; + /** {@hide} */ public static final String GET_DOCUMENT_URI_CALL = "get_document_uri"; /** {@hide} */ public static final String GET_MEDIA_URI_CALL = "get_media_uri"; @@ -3318,21 +3320,41 @@ public final class MediaStore { public static final String MEDIA_IGNORE_FILENAME = ".nomedia"; /** - * Get the media provider's version. - * Applications that import data from the media provider into their own caches - * can use this to detect that the media provider changed, and reimport data - * as needed. No other assumptions should be made about the meaning of the version. - * @param context Context to use for performing the query. - * @return A version string, or null if the version could not be determined. + * Return an opaque version string describing the {@link MediaStore} state. + * <p> + * Applications that import data from {@link MediaStore} into their own + * caches can use this to detect that {@link MediaStore} has undergone + * substantial changes, and that data should be rescanned. + * <p> + * No other assumptions should be made about the meaning of the version. + * <p> + * This method returns the version for {@link MediaStore#VOLUME_EXTERNAL}; + * to obtain a version for a different volume, use + * {@link #getVersion(Context, String)}. */ - public static String getVersion(Context context) { - final Uri uri = AUTHORITY_URI.buildUpon().appendPath("none").appendPath("version").build(); - try (Cursor c = context.getContentResolver().query(uri, null, null, null, null)) { - if (c.moveToFirst()) { - return c.getString(0); - } + public static @NonNull String getVersion(@NonNull Context context) { + return getVersion(context, VOLUME_EXTERNAL); + } + + /** + * Return an opaque version string describing the {@link MediaStore} state. + * <p> + * Applications that import data from {@link MediaStore} into their own + * caches can use this to detect that {@link MediaStore} has undergone + * substantial changes, and that data should be rescanned. + * <p> + * No other assumptions should be made about the meaning of the version. + */ + public static @NonNull String getVersion(@NonNull Context context, @NonNull String volumeName) { + final ContentResolver resolver = context.getContentResolver(); + try (ContentProviderClient client = resolver.acquireContentProviderClient(AUTHORITY)) { + final Bundle in = new Bundle(); + in.putString(Intent.EXTRA_TEXT, volumeName); + final Bundle out = client.call(GET_VERSION_CALL, null, in); + return out.getString(Intent.EXTRA_TEXT); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); } - return null; } /** |