libaums icon indicating copy to clipboard operation
libaums copied to clipboard

UsbDocumentProvider returns null for mode "w"

Open AvdeevEvgeny opened this issue 5 years ago • 1 comments

Problem

UsbDocumentProvider.openDocument always falls back to "return null" statement for any documents opened in mode "w", see https://github.com/magnusja/libaums/blob/master/storageprovider/src/main/java/com/github/mjdev/libaums/storageprovider/UsbDocumentProvider.java#L191 ParcelFileDescriptor.parseMode never returns exact ParcelFileDescriptor.MODE_WRITE_ONLY value. On older Android versions it returns at least ParcelFileDescriptor.MODE_WRITE_ONLY | ParcelFileDescriptor.MODE_CREATE | ParcelFileDescriptor.MODE_TRUNCATE, see https://android.googlesource.com/platform/frameworks/base/+/5ada87388cee24458bc0b8c960237c0e9f700242/core/java/android/os/ParcelFileDescriptor.java#565 On newer Android versions it returns at least MODE_WRITE_ONLY | MODE_CREATE, see https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/os/ParcelFileDescriptor.java#606 https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/os/FileUtils.java#1304 and https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/os/FileUtils.java#1359

Most probably bit-wise OR in condition "if ((accessMode | ParcelFileDescriptor.MODE_WRITE_ONLY) == ParcelFileDescriptor.MODE_WRITE_ONLY)" should be changed to bit-wise AND.

Expected behavior

UsbDocumentProvider.openDocument returns valid ParcelFileDescriptor backed by UsbFileOutputStream for documents opened with mode "w".

Actual behavior

UsbDocumentProvider.openDocument returns null for documents opened with mode "w".

AvdeevEvgeny avatar Jul 02 '20 13:07 AvdeevEvgeny

Hello there,

seems you know what you are talking about! Would you be so kind to open a PR to fix aforementioned issues with writing mode?

Thanks

magnusja avatar Jul 02 '20 15:07 magnusja