summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/content/FileSystemProvider.java13
1 files changed, 10 insertions, 3 deletions
diff --git a/core/java/com/android/internal/content/FileSystemProvider.java b/core/java/com/android/internal/content/FileSystemProvider.java
index e602cd2c8890..a60b31078a86 100644
--- a/core/java/com/android/internal/content/FileSystemProvider.java
+++ b/core/java/com/android/internal/content/FileSystemProvider.java
@@ -504,8 +504,10 @@ public abstract class FileSystemProvider extends DocumentsProvider {
final File visibleFile = getFileForDocId(documentId, true);
final int pfdMode = ParcelFileDescriptor.parseMode(mode);
- if (pfdMode == ParcelFileDescriptor.MODE_READ_ONLY || visibleFile == null) {
- return openFileForRead(file);
+ if (visibleFile == null) {
+ return ParcelFileDescriptor.open(file, pfdMode);
+ } else if (pfdMode == ParcelFileDescriptor.MODE_READ_ONLY) {
+ return openFileForRead(visibleFile);
} else {
try {
// When finished writing, kick off media scanner
@@ -522,6 +524,10 @@ public abstract class FileSystemProvider extends DocumentsProvider {
private ParcelFileDescriptor openFileForRead(final File target) throws FileNotFoundException {
final Uri uri = MediaStore.scanFile(getContext().getContentResolver(), target);
+ if (uri == null) {
+ Log.w(TAG, "Failed to retrieve media store URI for: " + target);
+ return ParcelFileDescriptor.open(target, ParcelFileDescriptor.MODE_READ_ONLY);
+ }
// Passing the calling uid via EXTRA_MEDIA_CAPABILITIES_UID, so that the decision to
// transcode or not transcode can be made based upon the calling app's uid, and not based
@@ -532,7 +538,8 @@ public abstract class FileSystemProvider extends DocumentsProvider {
final AssetFileDescriptor afd =
getContext().getContentResolver().openTypedAssetFileDescriptor(uri, "*/*", opts);
if (afd == null) {
- return null;
+ Log.w(TAG, "Failed to open with media_capabilities uid for URI: " + uri);
+ return ParcelFileDescriptor.open(target, ParcelFileDescriptor.MODE_READ_ONLY);
}
return afd.getParcelFileDescriptor();