diff options
author | Risan <risan@google.com> | 2018-11-13 12:12:23 -0800 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2018-11-13 12:12:23 -0800 |
commit | f8771d362c0058d90f6c32a35cb15aa0b86f11f4 (patch) | |
tree | eb7541dfb7f5e0f7c8e9880a0209ac762c879dce | |
parent | f84f1fd2d9bcb7af7b777d237cf36e9185499e83 (diff) | |
parent | ee32e0d473a28437d214a577bcf2199059b9d98d (diff) |
Merge "Introducing StubVolume in StorageManager" am: b499af866c am: eb871cc916
am: ee32e0d473
Change-Id: I4098132df9833b7cbac0db9bdadac297d324a822
6 files changed, 24 insertions, 11 deletions
diff --git a/cmds/sm/src/com/android/commands/sm/Sm.java b/cmds/sm/src/com/android/commands/sm/Sm.java index c6d717a55f34..783c8c45d603 100644 --- a/cmds/sm/src/com/android/commands/sm/Sm.java +++ b/cmds/sm/src/com/android/commands/sm/Sm.java @@ -127,6 +127,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; } @@ -314,7 +316,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]"); diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java index 8a36a782750b..d679fc7e619a 100644 --- a/core/java/android/os/storage/StorageManager.java +++ b/core/java/android/os/storage/StorageManager.java @@ -801,7 +801,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 { diff --git a/core/java/android/os/storage/VolumeInfo.java b/core/java/android/os/storage/VolumeInfo.java index e55afb69bab9..8c3aa1750acf 100644 --- a/core/java/android/os/storage/VolumeInfo.java +++ b/core/java/android/os/storage/VolumeInfo.java @@ -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, diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java index 4e52ff6d016c..4abcf73af109 100644 --- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java +++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java @@ -186,7 +186,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); diff --git a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageMeasurement.java b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageMeasurement.java index 5a57e69ae131..8f9394fd3c5a 100644 --- a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageMeasurement.java +++ b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageMeasurement.java @@ -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; diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index 5b3ab85e6107..78e82b6f7821 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -1235,6 +1235,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); } @@ -1245,6 +1248,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; @@ -1321,7 +1325,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 @@ -1403,7 +1408,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()); @@ -2834,6 +2840,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: |