diff options
| -rw-r--r-- | api/current.txt | 1 | ||||
| -rw-r--r-- | api/system-current.txt | 1 | ||||
| -rw-r--r-- | api/test-current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/content/Intent.java | 33 | ||||
| -rw-r--r-- | core/java/android/os/Environment.java | 41 | ||||
| -rw-r--r-- | core/java/android/provider/DocumentsContract.java | 2 |
6 files changed, 73 insertions, 6 deletions
diff --git a/api/current.txt b/api/current.txt index 007f2e778cff..6c8391e780fa 100644 --- a/api/current.txt +++ b/api/current.txt @@ -8426,6 +8426,7 @@ package android.content { field public static final java.lang.String ACTION_NEW_OUTGOING_CALL = "android.intent.action.NEW_OUTGOING_CALL"; field public static final java.lang.String ACTION_OPEN_DOCUMENT = "android.intent.action.OPEN_DOCUMENT"; field public static final java.lang.String ACTION_OPEN_DOCUMENT_TREE = "android.intent.action.OPEN_DOCUMENT_TREE"; + field public static final java.lang.String ACTION_OPEN_EXTERNAL_DIRECTORY = "android.intent.action.OPEN_EXTERNAL_DIRECTORY"; field public static final java.lang.String ACTION_PACKAGES_SUSPENDED = "android.intent.action.PACKAGES_SUSPENDED"; field public static final java.lang.String ACTION_PACKAGES_UNSUSPENDED = "android.intent.action.PACKAGES_UNSUSPENDED"; field public static final java.lang.String ACTION_PACKAGE_ADDED = "android.intent.action.PACKAGE_ADDED"; diff --git a/api/system-current.txt b/api/system-current.txt index 1cd88a7670fb..dcc990e40700 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -8698,6 +8698,7 @@ package android.content { field public static final java.lang.String ACTION_NEW_OUTGOING_CALL = "android.intent.action.NEW_OUTGOING_CALL"; field public static final java.lang.String ACTION_OPEN_DOCUMENT = "android.intent.action.OPEN_DOCUMENT"; field public static final java.lang.String ACTION_OPEN_DOCUMENT_TREE = "android.intent.action.OPEN_DOCUMENT_TREE"; + field public static final java.lang.String ACTION_OPEN_EXTERNAL_DIRECTORY = "android.intent.action.OPEN_EXTERNAL_DIRECTORY"; field public static final java.lang.String ACTION_PACKAGES_SUSPENDED = "android.intent.action.PACKAGES_SUSPENDED"; field public static final java.lang.String ACTION_PACKAGES_UNSUSPENDED = "android.intent.action.PACKAGES_UNSUSPENDED"; field public static final java.lang.String ACTION_PACKAGE_ADDED = "android.intent.action.PACKAGE_ADDED"; diff --git a/api/test-current.txt b/api/test-current.txt index 63c64e820d04..943ccea769c0 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -8431,6 +8431,7 @@ package android.content { field public static final java.lang.String ACTION_NEW_OUTGOING_CALL = "android.intent.action.NEW_OUTGOING_CALL"; field public static final java.lang.String ACTION_OPEN_DOCUMENT = "android.intent.action.OPEN_DOCUMENT"; field public static final java.lang.String ACTION_OPEN_DOCUMENT_TREE = "android.intent.action.OPEN_DOCUMENT_TREE"; + field public static final java.lang.String ACTION_OPEN_EXTERNAL_DIRECTORY = "android.intent.action.OPEN_EXTERNAL_DIRECTORY"; field public static final java.lang.String ACTION_PACKAGES_SUSPENDED = "android.intent.action.PACKAGES_SUSPENDED"; field public static final java.lang.String ACTION_PACKAGES_UNSUSPENDED = "android.intent.action.PACKAGES_UNSUSPENDED"; field public static final java.lang.String ACTION_PACKAGE_ADDED = "android.intent.action.PACKAGE_ADDED"; diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 1e7512d4b987..381ea90974e2 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -41,6 +41,7 @@ import android.content.res.TypedArray; import android.graphics.Rect; import android.net.Uri; import android.os.Bundle; +import android.os.Environment; import android.os.IBinder; import android.os.Parcel; import android.os.Parcelable; @@ -3186,6 +3187,38 @@ public class Intent implements Parcelable, Cloneable { public static final String ACTION_OPEN_DOCUMENT_TREE = "android.intent.action.OPEN_DOCUMENT_TREE"; + /** + * Activity Action: Give access to a standard storage directory after obtaining the user's + * approval. + * <p> + * When invoked, the system will ask the user to grant access to the requested directory (and + * its descendants). + * <p> + * To gain access to descendant (child, grandchild, etc) documents, use + * {@link DocumentsContract#buildDocumentUriUsingTree(Uri, String)} and + * {@link DocumentsContract#buildChildDocumentsUriUsingTree(Uri, String)} with the returned URI. + * <p> + * Input: full path to a standard directory, in the form of + * {@code STORAGE_ROOT + STANDARD_DIRECTORY}, where {@code STORAGE_ROOT} is the physical path of + * a storage container, and {@code STANDARD_DIRECTORY} is one of + * {@link Environment#DIRECTORY_MUSIC}, {@link Environment#DIRECTORY_PODCASTS}, + * {@link Environment#DIRECTORY_RINGTONES}, {@link Environment#DIRECTORY_ALARMS}, + * {@link Environment#DIRECTORY_NOTIFICATIONS}, {@link Environment#DIRECTORY_PICTURES}, + * {@link Environment#DIRECTORY_MOVIES}, {@link Environment#DIRECTORY_DOWNLOADS}, + * {@link Environment#DIRECTORY_DCIM}, or {@link Environment#DIRECTORY_DOCUMENTS} + * <p> + * For example, to open the "Pictures" folder in the default external storage, the intent's data + * would be: {@code Uri.fromFile(new File(Environment.getExternalStorageDirectory(), + * Environment.DIRECTORY_PICTURES))}. + * <p> + * Output: The URI representing the requested directory tree. + * + * @see DocumentsContract + */ + @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) + public static final String + ACTION_OPEN_EXTERNAL_DIRECTORY = "android.intent.action.OPEN_EXTERNAL_DIRECTORY"; + /** {@hide} */ public static final String ACTION_MASTER_CLEAR = "android.intent.action.MASTER_CLEAR"; diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java index 2ca9ab8a0ac2..ba215bb9c754 100644 --- a/core/java/android/os/Environment.java +++ b/core/java/android/os/Environment.java @@ -390,7 +390,7 @@ public class Environment { * type. */ public static String DIRECTORY_MUSIC = "Music"; - + /** * Standard directory in which to place any audio files that should be * in the list of podcasts that the user can select (not as regular @@ -479,6 +479,37 @@ public class Environment { public static String DIRECTORY_DOCUMENTS = "Documents"; /** + * List of standard storage directories. + * <p> + * Each of its values have its own constant: + * <ul> + * <li>{@link #DIRECTORY_MUSIC} + * <li>{@link #DIRECTORY_PODCASTS} + * <li>{@link #DIRECTORY_ALARMS} + * <li>{@link #DIRECTORY_RINGTONES} + * <li>{@link #DIRECTORY_NOTIFICATIONS} + * <li>{@link #DIRECTORY_PICTURES} + * <li>{@link #DIRECTORY_MOVIES} + * <li>{@link #DIRECTORY_DOWNLOADS} + * <li>{@link #DIRECTORY_DCIM} + * <li>{@link #DIRECTORY_DOCUMENTS} + * </ul> + * @hide + */ + public static final String[] STANDARD_DIRECTORIES = { + DIRECTORY_MUSIC, + DIRECTORY_PODCASTS, + DIRECTORY_RINGTONES, + DIRECTORY_ALARMS, + DIRECTORY_NOTIFICATIONS, + DIRECTORY_PICTURES, + DIRECTORY_MOVIES, + DIRECTORY_DOWNLOADS, + DIRECTORY_DCIM, + DIRECTORY_DOCUMENTS + }; + + /** * Get a top-level shared/external storage directory for placing files of a * particular type. This is where the user will typically place and manage * their own files, so you should be careful about what you put here to @@ -495,13 +526,13 @@ public class Environment { * </p> * {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java * public_picture} - * + * * @param type The type of storage directory to return. Should be one of * {@link #DIRECTORY_MUSIC}, {@link #DIRECTORY_PODCASTS}, * {@link #DIRECTORY_RINGTONES}, {@link #DIRECTORY_ALARMS}, * {@link #DIRECTORY_NOTIFICATIONS}, {@link #DIRECTORY_PICTURES}, - * {@link #DIRECTORY_MOVIES}, {@link #DIRECTORY_DOWNLOADS}, or - * {@link #DIRECTORY_DCIM}. May not be null. + * {@link #DIRECTORY_MOVIES}, {@link #DIRECTORY_DOWNLOADS}, + * {@link #DIRECTORY_DCIM}, or {@link #DIRECTORY_DOCUMENTS}. May not be null. * @return Returns the File path for the directory. Note that this directory * may not yet exist, so you must make sure it exists before using * it such as with {@link File#mkdirs File.mkdirs()}. @@ -657,7 +688,7 @@ public class Environment { /** * Returns the current state of the primary shared/external storage media. - * + * * @see #getExternalStorageDirectory() * @return one of {@link #MEDIA_UNKNOWN}, {@link #MEDIA_REMOVED}, * {@link #MEDIA_UNMOUNTED}, {@link #MEDIA_CHECKING}, diff --git a/core/java/android/provider/DocumentsContract.java b/core/java/android/provider/DocumentsContract.java index a401ac2ff864..88cc8a2ae21a 100644 --- a/core/java/android/provider/DocumentsContract.java +++ b/core/java/android/provider/DocumentsContract.java @@ -62,7 +62,7 @@ import java.util.List; * All client apps must hold a valid URI permission grant to access documents, * typically issued when a user makes a selection through * {@link Intent#ACTION_OPEN_DOCUMENT}, {@link Intent#ACTION_CREATE_DOCUMENT}, - * or {@link Intent#ACTION_OPEN_DOCUMENT_TREE}. + * {@link Intent#ACTION_OPEN_DOCUMENT_TREE}, or {@link Intent#ACTION_OPEN_EXTERNAL_DIRECTORY}. * * @see DocumentsProvider */ |