From f9a627f310ec7e81a6a4487a89d008e4627584e4 Mon Sep 17 00:00:00 2001 From: darshilshah Date: Thu, 5 Jun 2025 17:08:12 +0000 Subject: [SP 2025-09-01] Move markMediaAsFavorite's logic from MediaStore to MediaProvider The content values retrieved from extras in the MediaProvider can have values preset by the calling app and can affect other fields set. Instead of retrieving the content values, we only retrieve a boolean field that says whether the is_favorite is to be set to true or false. All processing logic is shifted to MediaProvider. Bug: 417194323 Test: EXEMPT Bugfix Flag: EXEMPT Bugfix (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:17ebbe43efe36a7c00d3941513d5caf2db91f628) Merged-In: I0227139b0a04efcb7456557fbf2d47996c017bad Change-Id: I0227139b0a04efcb7456557fbf2d47996c017bad --- apex/framework/java/android/provider/MediaStore.java | 8 +------- src/com/android/providers/media/MediaProvider.java | 10 +++++++++- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/apex/framework/java/android/provider/MediaStore.java b/apex/framework/java/android/provider/MediaStore.java index b8ff19503..77f646a47 100644 --- a/apex/framework/java/android/provider/MediaStore.java +++ b/apex/framework/java/android/provider/MediaStore.java @@ -1710,12 +1710,6 @@ public final class MediaStore { Objects.requireNonNull(resolver); Objects.requireNonNull(uris); - final ContentValues values = new ContentValues(); - if (areFavorites) { - values.put(MediaColumns.IS_FAVORITE, 1); - } else { - values.put(MediaColumns.IS_FAVORITE, 0); - } final Iterator it = uris.iterator(); final ClipData clipData = ClipData.newRawUri(null, it.next()); while (it.hasNext()) { @@ -1724,7 +1718,7 @@ public final class MediaStore { final Bundle extras = new Bundle(); extras.putParcelable(EXTRA_CLIP_DATA, clipData); - extras.putParcelable(EXTRA_CONTENT_VALUES, values); + extras.putBoolean(MediaColumns.IS_FAVORITE, areFavorites); resolver.call(AUTHORITY, MARK_MEDIA_AS_FAVORITE, null, extras); } diff --git a/src/com/android/providers/media/MediaProvider.java b/src/com/android/providers/media/MediaProvider.java index 85227f7d6..be405f160 100644 --- a/src/com/android/providers/media/MediaProvider.java +++ b/src/com/android/providers/media/MediaProvider.java @@ -7798,8 +7798,9 @@ public class MediaProvider extends ContentProvider { } private Bundle markMediaAsFavorite(Bundle extras) { - final ContentValues values = extras.getParcelable(MediaStore.EXTRA_CONTENT_VALUES); + final boolean areFavorites = extras.getBoolean(MediaColumns.IS_FAVORITE); final ClipData clipData = extras.getParcelable(MediaStore.EXTRA_CLIP_DATA); + final List uris = collectUris(clipData); if (!isCallingPackageManager()) { @@ -7812,6 +7813,13 @@ public class MediaProvider extends ContentProvider { } } + final ContentValues values = new ContentValues(); + if (areFavorites) { + values.put(MediaColumns.IS_FAVORITE, 1); + } else { + values.put(MediaColumns.IS_FAVORITE, 0); + } + final LocalCallingIdentity token = clearLocalCallingIdentity(); try { for (Uri uri : uris) { -- cgit v1.2.3-59-g8ed1b