diff options
author | Wang Haijun <wang.haijun@zte.com.cn> | 2019-09-18 15:45:39 +0800 |
---|---|---|
committer | Arne Coucheron <arco68@gmail.com> | 2021-03-26 21:47:40 +0100 |
commit | 7a9f0c34bafbe78b2d672bebd48c2988e74fb159 (patch) | |
tree | 391c7deb6067ea756120cc455cc66e0d44cb62cf | |
parent | 812423083f9c6cb8ab3f6da0803e54ef2dadf613 (diff) |
MediaProvider: Fix insert fail while file saved in sdcard
While uri inserted with volumeName(external) and file saved
in sdcard, only resolving volumeName from uri could get wrong
volumeName, and insert failed meanwhile.
Test: Create file in sdcard and insert it to MediaProvider.
Change-Id: Ie70240c02916107dd71e53c05b9e11e837561bfd
-rw-r--r-- | src/com/android/providers/media/MediaProvider.java | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/com/android/providers/media/MediaProvider.java b/src/com/android/providers/media/MediaProvider.java index 626bbb8e..f3d34bea 100644 --- a/src/com/android/providers/media/MediaProvider.java +++ b/src/com/android/providers/media/MediaProvider.java @@ -2748,8 +2748,7 @@ public class MediaProvider extends ContentProvider { private void assertFileColumnsSane(int match, Uri uri, ContentValues values) throws VolumeArgumentException, VolumeNotFoundException { if (!values.containsKey(MediaColumns.DATA)) return; - - final String volumeName = resolveVolumeName(uri); + final String volumeName = resolveVolumeName(uri, values.getAsString(MediaColumns.DATA)); try { // Sanity check that the requested path actually lives on volume final Collection<File> allowed = getVolumeScanPaths(volumeName); @@ -3218,6 +3217,19 @@ public class MediaProvider extends ContentProvider { } } + private static @NonNull String resolveVolumeName(@NonNull Uri uri, @NonNull String path) { + final String volumeName = getVolumeName(uri); + if (MediaStore.VOLUME_EXTERNAL.equals(volumeName)) { + if (path != null) { + return getVolumeName(new File(path)); + } else { + return MediaStore.VOLUME_EXTERNAL_PRIMARY; + } + } else { + return volumeName; + } + } + /** * @deprecated all operations should be routed through the overload that * accepts a {@link Bundle} of extras. |