diff options
| -rw-r--r-- | api/current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/os/storage/StorageManager.java | 24 |
2 files changed, 24 insertions, 1 deletions
diff --git a/api/current.txt b/api/current.txt index 1c60efa62be3..01890c8c1497 100644 --- a/api/current.txt +++ b/api/current.txt @@ -35683,6 +35683,7 @@ package android.os.storage { method public String getMountedObbPath(String); method @NonNull public android.os.storage.StorageVolume getPrimaryStorageVolume(); method @Nullable public android.os.storage.StorageVolume getStorageVolume(java.io.File); + method @NonNull public android.os.storage.StorageVolume getStorageVolume(@NonNull android.net.Uri); method @NonNull public java.util.List<android.os.storage.StorageVolume> getStorageVolumes(); method @NonNull public java.util.UUID getUuidForPath(@NonNull java.io.File) throws java.io.IOException; method public boolean isAllocationSupported(@NonNull java.io.FileDescriptor); diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java index 43c906495cb6..15aaa946e602 100644 --- a/core/java/android/os/storage/StorageManager.java +++ b/core/java/android/os/storage/StorageManager.java @@ -38,6 +38,7 @@ import android.content.pm.IPackageMoveObserver; import android.content.pm.PackageManager; import android.content.res.ObbInfo; import android.content.res.ObbScanner; +import android.net.Uri; import android.os.Binder; import android.os.Environment; import android.os.FileUtils; @@ -55,6 +56,7 @@ import android.os.RemoteException; import android.os.ServiceManager; import android.os.ServiceManager.ServiceNotFoundException; import android.os.SystemProperties; +import android.provider.MediaStore; import android.provider.Settings; import android.sysprop.VoldProperties; import android.system.ErrnoException; @@ -1096,12 +1098,32 @@ public class StorageManager { } /** - * Return the {@link StorageVolume} that contains the given file, or {@code null} if none. + * Return the {@link StorageVolume} that contains the given file, or + * {@code null} if none. */ public @Nullable StorageVolume getStorageVolume(File file) { return getStorageVolume(getVolumeList(), file); } + /** + * Return the {@link StorageVolume} that contains the given + * {@link MediaStore} item. + */ + public @NonNull StorageVolume getStorageVolume(@NonNull Uri uri) { + final String volumeName = MediaStore.getVolumeName(uri); + switch (volumeName) { + case MediaStore.VOLUME_EXTERNAL: + return getPrimaryStorageVolume(); + default: + for (StorageVolume vol : getStorageVolumes()) { + if (Objects.equals(vol.getNormalizedUuid(), volumeName)) { + return vol; + } + } + } + throw new IllegalStateException("Unknown volume for " + uri); + } + /** {@hide} */ public static @Nullable StorageVolume getStorageVolume(File file, int userId) { return getStorageVolume(getVolumeList(userId, 0), file); |