summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWang Haijun <wang.haijun@zte.com.cn>2019-09-18 15:45:39 +0800
committermosimchah <mosimchah@gmail.com>2021-03-18 14:25:22 -0400
commit69c126e756857af29e8cd9a3f57c2255bb438e6b (patch)
tree391c7deb6067ea756120cc455cc66e0d44cb62cf
parent812423083f9c6cb8ab3f6da0803e54ef2dadf613 (diff)
MediaProvider: Fix insert fail while file saved in sdcardHEADr11.1
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.