From af03e5a322a35f9acd6f6f8d4f53148a9622bd92 Mon Sep 17 00:00:00 2001 From: Garfield Tan Date: Mon, 15 May 2017 14:19:11 -0700 Subject: Specify behavior around DocumentsProvider#openDocument(). Add supported modes and contracts on receiving unsupported modes. Test: Builds. Bug: 11279339 Change-Id: I8c403f6168baadb354813d4c1e630bb8662ddb34 --- core/java/android/os/ParcelFileDescriptor.java | 3 ++- core/java/android/provider/DocumentsProvider.java | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/core/java/android/os/ParcelFileDescriptor.java b/core/java/android/os/ParcelFileDescriptor.java index 3212139b55b6..c091420a31d4 100644 --- a/core/java/android/os/ParcelFileDescriptor.java +++ b/core/java/android/os/ParcelFileDescriptor.java @@ -547,7 +547,8 @@ public class ParcelFileDescriptor implements Parcelable, Closeable { * Converts a string representing a file mode, such as "rw", into a bitmask suitable for use * with {@link #open}. *

- * @param mode The string representation of the file mode. + * @param mode The string representation of the file mode. Can be "r", "w", "wt", "wa", "rw" + * or "rwt". * @return A bitmask representing the given file mode. * @throws IllegalArgumentException if the given string does not match a known file mode. */ diff --git a/core/java/android/provider/DocumentsProvider.java b/core/java/android/provider/DocumentsProvider.java index 2a83c4b6a6ba..3eef31ad56aa 100644 --- a/core/java/android/provider/DocumentsProvider.java +++ b/core/java/android/provider/DocumentsProvider.java @@ -655,8 +655,12 @@ public abstract class DocumentsProvider extends ContentProvider { *

* Your provider should return a reliable {@link ParcelFileDescriptor} to * detect when the remote caller has finished reading or writing the - * document. You may return a pipe or socket pair if the mode is exclusively - * "r" or "w", but complex modes like "rw" imply a normal file on disk that + * document. + *

+ * Mode "r" should always be supported. Provider should throw + * {@link UnsupportedOperationException} if the passing mode is not supported. + * You may return a pipe or socket pair if the mode is exclusively "r" or + * "w", but complex modes like "rw" imply a normal file on disk that * supports seeking. *

* If you block while downloading content, you should periodically check -- cgit v1.2.3-59-g8ed1b