summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWang Haijun <wang.haijun@zte.com.cn>2019-09-18 15:45:39 +0800
committerArne Coucheron <arco68@gmail.com>2021-03-26 21:47:40 +0100
commit7a9f0c34bafbe78b2d672bebd48c2988e74fb159 (patch)
tree391c7deb6067ea756120cc455cc66e0d44cb62cf
parent812423083f9c6cb8ab3f6da0803e54ef2dadf613 (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.java16
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.