Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 75e9a4a3 authored by Zimuzo Ezeozue's avatar Zimuzo Ezeozue Committed by Automerger Merge Worker
Browse files

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

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13825906

Change-Id: I1d9809c5038180a2a5229fca3a207042db35995a
parents 748a8edf e0802552
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -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();