in StorageProvider/Application/src/main/java/com/example/android/storageprovider/MyCloudProvider.java [294:329]
public ParcelFileDescriptor openDocument(final String documentId, final String mode,
CancellationSignal signal)
throws FileNotFoundException {
Log.v(TAG, "openDocument, mode: " + mode);
// It's OK to do network operations in this method to download the document, as long as you
// periodically check the CancellationSignal. If you have an extremely large file to
// transfer from the network, a better solution may be pipes or sockets
// (see ParcelFileDescriptor for helper methods).
final File file = getFileForDocId(documentId);
final int accessMode = ParcelFileDescriptor.parseMode(mode);
final boolean isWrite = (mode.indexOf('w') != -1);
if (isWrite) {
// Attach a close listener if the document is opened in write mode.
try {
Handler handler = new Handler(getContext().getMainLooper());
return ParcelFileDescriptor.open(file, accessMode, handler,
new ParcelFileDescriptor.OnCloseListener() {
@Override
public void onClose(IOException e) {
// Update the file with the cloud server. The client is done writing.
Log.i(TAG, "A file with id " + documentId + " has been closed! Time to " +
"update the server.");
}
});
} catch (IOException e) {
throw new FileNotFoundException("Failed to open document with id " + documentId +
" and mode " + mode);
}
} else {
return ParcelFileDescriptor.open(file, accessMode);
}
}