summaryrefslogtreecommitdiffstats
path: root/core/java/android/os/storage/VolumeInfo.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/os/storage/VolumeInfo.java')
-rw-r--r--core/java/android/os/storage/VolumeInfo.java80
1 files changed, 80 insertions, 0 deletions
diff --git a/core/java/android/os/storage/VolumeInfo.java b/core/java/android/os/storage/VolumeInfo.java
index beca8b8..f06fc8c 100644
--- a/core/java/android/os/storage/VolumeInfo.java
+++ b/core/java/android/os/storage/VolumeInfo.java
@@ -22,10 +22,12 @@ import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.mtp.MtpStorage;
+import android.net.Uri;
import android.os.Environment;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.UserHandle;
+import android.provider.DocumentsContract;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.DebugUtils;
@@ -45,6 +47,8 @@ import java.io.File;
* @hide
*/
public class VolumeInfo implements Parcelable {
+ public static final String EXTRA_VOLUME_ID = "android.os.storage.extra.VOLUME_ID";
+
/** Stub volume representing internal private storage */
public static final String ID_PRIVATE_INTERNAL = "private";
/** Real volume representing internal emulated storage */
@@ -67,6 +71,9 @@ public class VolumeInfo implements Parcelable {
public static final int FLAG_PRIMARY = 1 << 0;
public static final int FLAG_VISIBLE = 1 << 1;
+ public static final int USER_FLAG_INITED = 1 << 0;
+ public static final int USER_FLAG_SNOOZED = 1 << 1;
+
private static SparseArray<String> sStateToEnvironment = new SparseArray<>();
private static ArrayMap<String, String> sEnvironmentToBroadcast = new ArrayMap<>();
@@ -100,7 +107,9 @@ public class VolumeInfo implements Parcelable {
/** Framework state */
public final int mtpIndex;
+ public String diskId;
public String nickname;
+ public int userFlags = 0;
public VolumeInfo(String id, int type, int mtpIndex) {
this.id = Preconditions.checkNotNull(id);
@@ -119,7 +128,9 @@ public class VolumeInfo implements Parcelable {
fsLabel = parcel.readString();
path = parcel.readString();
mtpIndex = parcel.readInt();
+ diskId = parcel.readString();
nickname = parcel.readString();
+ userFlags = parcel.readInt();
}
public static @NonNull String getEnvironmentForState(int state) {
@@ -139,6 +150,30 @@ public class VolumeInfo implements Parcelable {
return getBroadcastForEnvironment(getEnvironmentForState(state));
}
+ public @NonNull String getId() {
+ return id;
+ }
+
+ public @Nullable String getDiskId() {
+ return diskId;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public int getState() {
+ return state;
+ }
+
+ public @Nullable String getFsUuid() {
+ return fsUuid;
+ }
+
+ public @Nullable String getNickname() {
+ return nickname;
+ }
+
public @Nullable String getDescription() {
if (ID_PRIVATE_INTERNAL.equals(id)) {
return Resources.getSystem().getString(com.android.internal.R.string.storage_internal);
@@ -159,6 +194,14 @@ public class VolumeInfo implements Parcelable {
return (flags & FLAG_VISIBLE) != 0;
}
+ public boolean isInited() {
+ return (userFlags & USER_FLAG_INITED) != 0;
+ }
+
+ public boolean isSnoozed() {
+ return (userFlags & USER_FLAG_SNOOZED) != 0;
+ }
+
public boolean isVisibleToUser(int userId) {
if (type == TYPE_PUBLIC && userId == this.userId) {
return isVisible();
@@ -169,6 +212,10 @@ public class VolumeInfo implements Parcelable {
}
}
+ public File getPath() {
+ return new File(path);
+ }
+
public File getPathForUser(int userId) {
if (path == null) {
return null;
@@ -228,6 +275,34 @@ public class VolumeInfo implements Parcelable {
fsUuid, envState);
}
+ // TODO: avoid this layering violation
+ private static final String DOCUMENT_AUTHORITY = "com.android.externalstorage.documents";
+ private static final String DOCUMENT_ROOT_PRIMARY_EMULATED = "primary";
+
+ /**
+ * Build an intent to browse the contents of this volume. Only valid for
+ * {@link #TYPE_EMULATED} or {@link #TYPE_PUBLIC}.
+ */
+ public Intent buildBrowseIntent() {
+ final Uri uri;
+ if (type == VolumeInfo.TYPE_PUBLIC) {
+ uri = DocumentsContract.buildRootUri(DOCUMENT_AUTHORITY, fsUuid);
+ } else if (VolumeInfo.ID_EMULATED_INTERNAL.equals(id)) {
+ uri = DocumentsContract.buildRootUri(DOCUMENT_AUTHORITY,
+ DOCUMENT_ROOT_PRIMARY_EMULATED);
+ } else if (type == VolumeInfo.TYPE_EMULATED) {
+ // TODO: build intent once supported
+ uri = null;
+ } else {
+ throw new IllegalArgumentException();
+ }
+
+ final Intent intent = new Intent(DocumentsContract.ACTION_BROWSE_DOCUMENT_ROOT);
+ intent.addCategory(Intent.CATEGORY_DEFAULT);
+ intent.setData(uri);
+ return intent;
+ }
+
@Override
public String toString() {
final CharArrayWriter writer = new CharArrayWriter();
@@ -250,6 +325,9 @@ public class VolumeInfo implements Parcelable {
pw.println();
pw.printPair("path", path);
pw.printPair("mtpIndex", mtpIndex);
+ pw.printPair("diskId", diskId);
+ pw.printPair("nickname", nickname);
+ pw.printPair("userFlags", DebugUtils.flagsToString(getClass(), "USER_FLAG_", userFlags));
pw.decreaseIndent();
pw.println();
}
@@ -295,6 +373,8 @@ public class VolumeInfo implements Parcelable {
parcel.writeString(fsLabel);
parcel.writeString(path);
parcel.writeInt(mtpIndex);
+ parcel.writeString(diskId);
parcel.writeString(nickname);
+ parcel.writeInt(userFlags);
}
}