Merge "Introducing StubVolume in StorageManager"
am: b499af866c
Change-Id: I56140a63dc711d4f34c098a2e937ed104f08ee7e
This commit is contained in:
@@ -125,6 +125,8 @@ public final class Sm {
|
||||
filterType = VolumeInfo.TYPE_PRIVATE;
|
||||
} else if ("emulated".equals(filter)) {
|
||||
filterType = VolumeInfo.TYPE_EMULATED;
|
||||
} else if ("stub".equals(filter)) {
|
||||
filterType = VolumeInfo.TYPE_STUB;
|
||||
} else {
|
||||
filterType = -1;
|
||||
}
|
||||
@@ -298,7 +300,7 @@ public final class Sm {
|
||||
|
||||
private static int showUsage() {
|
||||
System.err.println("usage: sm list-disks [adoptable]");
|
||||
System.err.println(" sm list-volumes [public|private|emulated|all]");
|
||||
System.err.println(" sm list-volumes [public|private|emulated|stub|all]");
|
||||
System.err.println(" sm has-adoptable");
|
||||
System.err.println(" sm get-primary-storage-uuid");
|
||||
System.err.println(" sm set-force-adoptable [on|off|default]");
|
||||
|
||||
@@ -774,7 +774,7 @@ public class StorageManager {
|
||||
try {
|
||||
for (VolumeInfo vol : mStorageManager.getVolumes(0)) {
|
||||
if (vol.path != null && FileUtils.contains(vol.path, pathString)
|
||||
&& vol.type != VolumeInfo.TYPE_PUBLIC) {
|
||||
&& vol.type != VolumeInfo.TYPE_PUBLIC && vol.type != VolumeInfo.TYPE_STUB) {
|
||||
// TODO: verify that emulated adopted devices have UUID of
|
||||
// underlying volume
|
||||
try {
|
||||
|
||||
@@ -84,6 +84,7 @@ public class VolumeInfo implements Parcelable {
|
||||
public static final int TYPE_EMULATED = IVold.VOLUME_TYPE_EMULATED;
|
||||
public static final int TYPE_ASEC = IVold.VOLUME_TYPE_ASEC;
|
||||
public static final int TYPE_OBB = IVold.VOLUME_TYPE_OBB;
|
||||
public static final int TYPE_STUB = IVold.VOLUME_TYPE_STUB;
|
||||
|
||||
public static final int STATE_UNMOUNTED = IVold.VOLUME_STATE_UNMOUNTED;
|
||||
public static final int STATE_CHECKING = IVold.VOLUME_STATE_CHECKING;
|
||||
@@ -295,7 +296,7 @@ public class VolumeInfo implements Parcelable {
|
||||
}
|
||||
|
||||
public boolean isVisibleForUser(int userId) {
|
||||
if (type == TYPE_PUBLIC && mountUserId == userId) {
|
||||
if ((type == TYPE_PUBLIC || type == TYPE_STUB) && mountUserId == userId) {
|
||||
return isVisible();
|
||||
} else if (type == TYPE_EMULATED) {
|
||||
return isVisible();
|
||||
@@ -327,7 +328,7 @@ public class VolumeInfo implements Parcelable {
|
||||
public File getPathForUser(int userId) {
|
||||
if (path == null) {
|
||||
return null;
|
||||
} else if (type == TYPE_PUBLIC) {
|
||||
} else if (type == TYPE_PUBLIC || type == TYPE_STUB) {
|
||||
return new File(path);
|
||||
} else if (type == TYPE_EMULATED) {
|
||||
return new File(path, Integer.toString(userId));
|
||||
@@ -344,7 +345,7 @@ public class VolumeInfo implements Parcelable {
|
||||
public File getInternalPathForUser(int userId) {
|
||||
if (path == null) {
|
||||
return null;
|
||||
} else if (type == TYPE_PUBLIC) {
|
||||
} else if (type == TYPE_PUBLIC || type == TYPE_STUB) {
|
||||
// TODO: plumb through cleaner path from vold
|
||||
return new File(path.replace("/storage/", "/mnt/media_rw/"));
|
||||
} else {
|
||||
@@ -390,7 +391,7 @@ public class VolumeInfo implements Parcelable {
|
||||
removable = true;
|
||||
}
|
||||
|
||||
} else if (type == TYPE_PUBLIC) {
|
||||
} else if (type == TYPE_PUBLIC || type == TYPE_STUB) {
|
||||
emulated = false;
|
||||
removable = true;
|
||||
|
||||
@@ -447,7 +448,8 @@ public class VolumeInfo implements Parcelable {
|
||||
|
||||
public @Nullable Intent buildBrowseIntentForUser(int userId) {
|
||||
final Uri uri;
|
||||
if (type == VolumeInfo.TYPE_PUBLIC && mountUserId == userId) {
|
||||
if ((type == VolumeInfo.TYPE_PUBLIC || type == VolumeInfo.TYPE_STUB)
|
||||
&& mountUserId == userId) {
|
||||
uri = DocumentsContract.buildRootUri(DOCUMENT_AUTHORITY, fsUuid);
|
||||
} else if (type == VolumeInfo.TYPE_EMULATED && isPrimary()) {
|
||||
uri = DocumentsContract.buildRootUri(DOCUMENT_AUTHORITY,
|
||||
|
||||
@@ -184,7 +184,8 @@ public class ExternalStorageProvider extends FileSystemProvider {
|
||||
title = mStorageManager.getBestVolumeDescription(privateVol);
|
||||
storageUuid = StorageManager.convert(privateVol.fsUuid);
|
||||
}
|
||||
} else if (volume.getType() == VolumeInfo.TYPE_PUBLIC
|
||||
} else if ((volume.getType() == VolumeInfo.TYPE_PUBLIC
|
||||
|| volume.getType() == VolumeInfo.TYPE_STUB)
|
||||
&& volume.getMountUserId() == userId) {
|
||||
rootId = volume.getFsUuid();
|
||||
title = mStorageManager.getBestVolumeDescription(volume);
|
||||
|
||||
@@ -152,7 +152,8 @@ public class StorageMeasurement {
|
||||
final MeasurementDetails details = new MeasurementDetails();
|
||||
if (mVolume == null) return details;
|
||||
|
||||
if (mVolume.getType() == VolumeInfo.TYPE_PUBLIC) {
|
||||
if (mVolume.getType() == VolumeInfo.TYPE_PUBLIC
|
||||
|| mVolume.getType() == VolumeInfo.TYPE_STUB) {
|
||||
details.totalSize = mVolume.getPath().getTotalSpace();
|
||||
details.availSize = mVolume.getPath().getUsableSpace();
|
||||
return details;
|
||||
|
||||
@@ -1190,6 +1190,9 @@ class StorageManagerService extends IStorageManager.Stub
|
||||
} else if (vol.type == VolumeInfo.TYPE_PRIVATE) {
|
||||
mHandler.obtainMessage(H_VOLUME_MOUNT, vol).sendToTarget();
|
||||
|
||||
} else if (vol.type == VolumeInfo.TYPE_STUB) {
|
||||
vol.mountUserId = mCurrentUserId;
|
||||
mHandler.obtainMessage(H_VOLUME_MOUNT, vol).sendToTarget();
|
||||
} else {
|
||||
Slog.d(TAG, "Skipping automatic mounting of " + vol);
|
||||
}
|
||||
@@ -1200,6 +1203,7 @@ class StorageManagerService extends IStorageManager.Stub
|
||||
case VolumeInfo.TYPE_PRIVATE:
|
||||
case VolumeInfo.TYPE_PUBLIC:
|
||||
case VolumeInfo.TYPE_EMULATED:
|
||||
case VolumeInfo.TYPE_STUB:
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
@@ -1276,7 +1280,8 @@ class StorageManagerService extends IStorageManager.Stub
|
||||
}
|
||||
}
|
||||
|
||||
if (vol.type == VolumeInfo.TYPE_PUBLIC && vol.state == VolumeInfo.STATE_EJECTING) {
|
||||
if ((vol.type == VolumeInfo.TYPE_PUBLIC || vol.type == VolumeInfo.TYPE_STUB)
|
||||
&& vol.state == VolumeInfo.STATE_EJECTING) {
|
||||
// TODO: this should eventually be handled by new ObbVolume state changes
|
||||
/*
|
||||
* Some OBBs might have been unmounted when this volume was
|
||||
@@ -1358,7 +1363,8 @@ class StorageManagerService extends IStorageManager.Stub
|
||||
}
|
||||
|
||||
boolean isTypeRestricted = false;
|
||||
if (vol.type == VolumeInfo.TYPE_PUBLIC || vol.type == VolumeInfo.TYPE_PRIVATE) {
|
||||
if (vol.type == VolumeInfo.TYPE_PUBLIC || vol.type == VolumeInfo.TYPE_PRIVATE
|
||||
|| vol.type == VolumeInfo.TYPE_STUB) {
|
||||
isTypeRestricted = userManager
|
||||
.hasUserRestriction(UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA,
|
||||
Binder.getCallingUserHandle());
|
||||
@@ -2749,6 +2755,7 @@ class StorageManagerService extends IStorageManager.Stub
|
||||
final VolumeInfo vol = mVolumes.valueAt(i);
|
||||
switch (vol.getType()) {
|
||||
case VolumeInfo.TYPE_PUBLIC:
|
||||
case VolumeInfo.TYPE_STUB:
|
||||
case VolumeInfo.TYPE_EMULATED:
|
||||
break;
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user