diff --git a/core/java/android/os/storage/StorageManagerInternal.java b/core/java/android/os/storage/StorageManagerInternal.java index d102b194f86df..d850e27e913f0 100644 --- a/core/java/android/os/storage/StorageManagerInternal.java +++ b/core/java/android/os/storage/StorageManagerInternal.java @@ -79,4 +79,18 @@ public abstract class StorageManagerInternal { * @return The mount mode. */ public abstract int getExternalStorageMountMode(int uid, String packageName); + + /** + * Mount external storage for the given package. + * + *
This will involve calling into vold to setup appropriate bind mounts.
+ *
+ * @param packageName The package for which external storage will be mounted.
+ * @param appId The appId for the given package.
+ * @param sharedUserId The sharedUserId for given package if it specified
+ * {@code android:sharedUserId} in the manifest, otherwise {@code null}
+ * @param userId
+ */
+ public abstract void mountExternalStorageForApp(String packageName, int appId,
+ String sharedUserId, int userId);
}
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
index 42157cc562b94..b169f73ea13e3 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -3803,5 +3803,29 @@ class StorageManagerService extends IStorageManager.Stub
}
return true;
}
+
+ @Override
+ public void mountExternalStorageForApp(String packageName, int appId, String sharedUserId,
+ int userId) {
+ final String sandboxId;
+ synchronized (mPackagesLock) {
+ final ArraySet