summaryrefslogtreecommitdiff
path: root/src/com
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 /src/com
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
Diffstat (limited to 'src/com')
-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.