diff options
author | 2024-09-29 19:50:56 +0000 | |
---|---|---|
committer | 2025-03-13 16:57:13 +0000 | |
commit | 9a831d5492fb663b95b49693de14287988ccad30 (patch) | |
tree | 7114671cf9b763034b7f092c67b1ad6c8b9e3e65 /apex | |
parent | 8361c9359191021054311dd73ff9fb05752e06df (diff) |
Add API to bulk update oem_metadata
Created new API to bulk update oem_metadata. This can be done only with
UPDATE_OEM_METADATA_PERMISSION which is signature and privileged.
Triggering bulk update of oem_metadata column will mark it as null for
rows with oem supported mime type till the next idle maintenance run
re-fetches the values from OEMMetadataService. Also added support
for OEM_METADATA update for a URI using update API.
Test: atest OemMetadataServiceTest
Bug: 352528913
Change-Id: If2ee9050304ab1f60ca402bf4205a34b58277e76
Flag: com.android.providers.media.flags.enable_oem_metadata_update
Diffstat (limited to 'apex')
-rw-r--r-- | apex/framework/api/system-current.txt | 2 | ||||
-rw-r--r-- | apex/framework/java/android/provider/MediaStore.java | 35 |
2 files changed, 37 insertions, 0 deletions
diff --git a/apex/framework/api/system-current.txt b/apex/framework/api/system-current.txt index 1d11267f4..f002605a1 100644 --- a/apex/framework/api/system-current.txt +++ b/apex/framework/api/system-current.txt @@ -64,6 +64,7 @@ package android.provider { } public final class MediaStore { + method @FlaggedApi("com.android.providers.media.flags.enable_oem_metadata_update") public static void bulkUpdateOemMetadataInNextScan(@NonNull android.content.Context); method @NonNull public static android.net.Uri rewriteToLegacy(@NonNull android.net.Uri); method @NonNull @WorkerThread public static android.net.Uri scanFile(@NonNull android.content.ContentResolver, @NonNull java.io.File); method @WorkerThread public static void scanVolume(@NonNull android.content.ContentResolver, @NonNull String); @@ -72,6 +73,7 @@ package android.provider { field public static final String AUTHORITY_LEGACY = "media_legacy"; field @NonNull public static final android.net.Uri AUTHORITY_LEGACY_URI; field public static final String QUERY_ARG_DEFER_SCAN = "android:query-arg-defer-scan"; + field @FlaggedApi("com.android.providers.media.flags.enable_oem_metadata_update") public static final String UPDATE_OEM_METADATA_PERMISSION = "com.android.providers.media.permission.UPDATE_OEM_METADATA"; } @FlaggedApi("com.android.providers.media.flags.enable_oem_metadata") public abstract class OemMetadataService extends android.app.Service { diff --git a/apex/framework/java/android/provider/MediaStore.java b/apex/framework/java/android/provider/MediaStore.java index c9ee81196..1e64cbd4e 100644 --- a/apex/framework/java/android/provider/MediaStore.java +++ b/apex/framework/java/android/provider/MediaStore.java @@ -304,6 +304,9 @@ public final class MediaStore { "revoke_all_media_grants_for_package"; /** @hide */ + public static final String BULK_UPDATE_OEM_METADATA_CALL = "bulk_update_oem_metadata"; + + /** @hide */ public static final String OPEN_FILE_CALL = "open_file_call"; @@ -1342,6 +1345,16 @@ public final class MediaStore { public static final String ACCESS_OEM_METADATA_PERMISSION = "com.android.providers.media.permission.ACCESS_OEM_METADATA"; + /** + * Permission that grants ability to trigger update of {@link MediaColumns#OEM_METADATA}. + * + * @hide + */ + @FlaggedApi(Flags.FLAG_ENABLE_OEM_METADATA_UPDATE) + @SystemApi + public static final String UPDATE_OEM_METADATA_PERMISSION = + "com.android.providers.media.permission.UPDATE_OEM_METADATA"; + /** @hide */ @IntDef(flag = true, prefix = { "MATCH_" }, value = { MATCH_DEFAULT, @@ -5734,4 +5747,26 @@ public final class MediaStore { throw e.rethrowAsRuntimeException(); } } + + /** + * Allows bulk update of {@link MediaColumns#OEM_METADATA} column in next scan. + * Requires calling package to hold {@link UPDATE_OEM_METADATA_PERMISSION} permission. Updates + * {@link MediaColumns#OEM_METADATA} to NULL for OEM supported media files and re-fetch + * the latest values in the next scan. + * Caller can enforce file/volume scan after this to update MediaStore with the latest OEM + * metadata. If not done, next scan by MediaStore will fetch and update the latest data. + * + * @hide + */ + @FlaggedApi(Flags.FLAG_ENABLE_OEM_METADATA_UPDATE) + @SystemApi + public static void bulkUpdateOemMetadataInNextScan(@NonNull Context context) { + final ContentResolver resolver = context.getContentResolver(); + try (ContentProviderClient client = resolver.acquireContentProviderClient(AUTHORITY)) { + final Bundle extras = new Bundle(); + client.call(BULK_UPDATE_OEM_METADATA_CALL, /* arg= */ null, /* extras= */ extras); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); + } + } } |