Merge "Fix FileSystemProvider open for external USB files" into sc-dev

This commit is contained in:
Zimuzo Ezeozue
2021-03-16 16:13:51 +00:00
committed by Android (Google) Code Review

View File

@@ -504,8 +504,10 @@ public abstract class FileSystemProvider extends DocumentsProvider {
final File visibleFile = getFileForDocId(documentId, true); final File visibleFile = getFileForDocId(documentId, true);
final int pfdMode = ParcelFileDescriptor.parseMode(mode); final int pfdMode = ParcelFileDescriptor.parseMode(mode);
if (pfdMode == ParcelFileDescriptor.MODE_READ_ONLY || visibleFile == null) { if (visibleFile == null) {
return openFileForRead(file); return ParcelFileDescriptor.open(file, pfdMode);
} else if (pfdMode == ParcelFileDescriptor.MODE_READ_ONLY) {
return openFileForRead(visibleFile);
} else { } else {
try { try {
// When finished writing, kick off media scanner // 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 { private ParcelFileDescriptor openFileForRead(final File target) throws FileNotFoundException {
final Uri uri = MediaStore.scanFile(getContext().getContentResolver(), target); 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 // 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 // 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 = final AssetFileDescriptor afd =
getContext().getContentResolver().openTypedAssetFileDescriptor(uri, "*/*", opts); getContext().getContentResolver().openTypedAssetFileDescriptor(uri, "*/*", opts);
if (afd == null) { 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(); return afd.getParcelFileDescriptor();