summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/os/storage/DiskInfo.java22
-rw-r--r--core/java/android/os/storage/StorageManager.java30
-rw-r--r--core/java/android/os/storage/VolumeInfo.java37
3 files changed, 62 insertions, 27 deletions
diff --git a/core/java/android/os/storage/DiskInfo.java b/core/java/android/os/storage/DiskInfo.java
index 4704b67f3355..e6160aac0d1d 100644
--- a/core/java/android/os/storage/DiskInfo.java
+++ b/core/java/android/os/storage/DiskInfo.java
@@ -33,6 +33,8 @@ import java.io.CharArrayWriter;
* @hide
*/
public class DiskInfo implements Parcelable {
+ public static final String EXTRA_DISK_ID = "android.os.storage.extra.DISK_ID";
+
public static final int FLAG_ADOPTABLE = 1 << 0;
public static final int FLAG_DEFAULT_PRIMARY = 1 << 1;
public static final int FLAG_SD = 1 << 2;
@@ -42,7 +44,7 @@ public class DiskInfo implements Parcelable {
public final int flags;
public long size;
public String label;
- public String[] volumes;
+ public String[] volumeIds;
public DiskInfo(String id, int flags) {
this.id = Preconditions.checkNotNull(id);
@@ -54,7 +56,7 @@ public class DiskInfo implements Parcelable {
flags = parcel.readInt();
size = parcel.readLong();
label = parcel.readString();
- volumes = parcel.readStringArray();
+ volumeIds = parcel.readStringArray();
}
public String getDescription() {
@@ -68,6 +70,18 @@ public class DiskInfo implements Parcelable {
}
}
+ public boolean isSd() {
+ return (flags & FLAG_SD) != 0;
+ }
+
+ public boolean isUsb() {
+ return (flags & FLAG_USB) != 0;
+ }
+
+ public boolean isAdoptable() {
+ return (flags & FLAG_ADOPTABLE) != 0;
+ }
+
@Override
public String toString() {
final CharArrayWriter writer = new CharArrayWriter();
@@ -82,7 +96,7 @@ public class DiskInfo implements Parcelable {
pw.printPair("flags", DebugUtils.flagsToString(getClass(), "FLAG_", flags));
pw.printPair("size", size);
pw.printPair("label", label);
- pw.printPair("volumes", volumes);
+ pw.printPair("volumeIds", volumeIds);
pw.decreaseIndent();
pw.println();
}
@@ -122,6 +136,6 @@ public class DiskInfo implements Parcelable {
parcel.writeInt(this.flags);
parcel.writeLong(size);
parcel.writeString(label);
- parcel.writeStringArray(volumes);
+ parcel.writeStringArray(volumeIds);
}
}
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
index bd42f6a0b0c1..eb774778e0e7 100644
--- a/core/java/android/os/storage/StorageManager.java
+++ b/core/java/android/os/storage/StorageManager.java
@@ -35,7 +35,6 @@ import android.util.Log;
import android.util.SparseArray;
import com.android.internal.os.SomeArgs;
-import com.android.internal.util.ArrayUtils;
import com.android.internal.util.Preconditions;
import java.io.File;
@@ -456,18 +455,6 @@ public class StorageManager {
}
/** {@hide} */
- public @Nullable DiskInfo findDiskByVolumeId(String volId) {
- Preconditions.checkNotNull(volId);
- // TODO; go directly to service to make this faster
- for (DiskInfo disk : getDisks()) {
- if (ArrayUtils.contains(disk.volumes, volId)) {
- return disk;
- }
- }
- return null;
- }
-
- /** {@hide} */
public @Nullable VolumeInfo findVolumeById(String id) {
Preconditions.checkNotNull(id);
// TODO; go directly to service to make this faster
@@ -501,17 +488,14 @@ public class StorageManager {
}
/** {@hide} */
- public @Nullable String getBestVolumeDescription(String volId) {
- String descrip = null;
-
- final VolumeInfo vol = findVolumeById(volId);
- if (vol != null) {
- descrip = vol.getDescription();
- }
+ public @Nullable String getBestVolumeDescription(VolumeInfo vol) {
+ String descrip = vol.getDescription();
- final DiskInfo disk = findDiskByVolumeId(volId);
- if (disk != null && TextUtils.isEmpty(descrip)) {
- descrip = disk.getDescription();
+ if (vol.diskId != null) {
+ final DiskInfo disk = findDiskById(vol.diskId);
+ if (disk != null && TextUtils.isEmpty(descrip)) {
+ descrip = disk.getDescription();
+ }
}
return descrip;
diff --git a/core/java/android/os/storage/VolumeInfo.java b/core/java/android/os/storage/VolumeInfo.java
index beca8b8718f3..fe1e206a650e 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 */
@@ -101,6 +105,7 @@ public class VolumeInfo implements Parcelable {
/** Framework state */
public final int mtpIndex;
public String nickname;
+ public String diskId;
public VolumeInfo(String id, int type, int mtpIndex) {
this.id = Preconditions.checkNotNull(id);
@@ -120,6 +125,7 @@ public class VolumeInfo implements Parcelable {
path = parcel.readString();
mtpIndex = parcel.readInt();
nickname = parcel.readString();
+ diskId = parcel.readString();
}
public static @NonNull String getEnvironmentForState(int state) {
@@ -228,6 +234,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 +284,8 @@ public class VolumeInfo implements Parcelable {
pw.println();
pw.printPair("path", path);
pw.printPair("mtpIndex", mtpIndex);
+ pw.printPair("nickname", nickname);
+ pw.printPair("diskId", diskId);
pw.decreaseIndent();
pw.println();
}
@@ -296,5 +332,6 @@ public class VolumeInfo implements Parcelable {
parcel.writeString(path);
parcel.writeInt(mtpIndex);
parcel.writeString(nickname);
+ parcel.writeString(diskId);
}
}