summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/StorageManagerService.java24
1 files changed, 24 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
index 09f4c221f3fe..f5918025db0b 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -249,6 +249,8 @@ class StorageManagerService extends IStorageManager.Stub
@Override
public void onUserSwitching(@Nullable TargetUser from, @NonNull TargetUser to) {
mStorageManagerService.mCurrentUserId = to.getUserIdentifier();
+ // To reset public volume mounts
+ mStorageManagerService.onUserSwitching(mStorageManagerService.mCurrentUserId);
}
@Override
@@ -1218,6 +1220,28 @@ class StorageManagerService extends IStorageManager.Stub
}
}
+ private void onUserSwitching(int userId) {
+ boolean reset = false;
+ List<VolumeInfo> volumesToRemount = new ArrayList<>();
+ synchronized (mLock) {
+ for (int i = 0; i < mVolumes.size(); i++) {
+ final VolumeInfo vol = mVolumes.valueAt(i);
+ if (!vol.isPrimary() && vol.isMountedWritable() && vol.isVisible()
+ && vol.getMountUserId() != mCurrentUserId) {
+ // If there's a visible secondary volume mounted,
+ // we need to update the currentUserId and remount
+ vol.mountUserId = mCurrentUserId;
+ volumesToRemount.add(vol);
+ }
+ }
+ }
+
+ for (VolumeInfo vol : volumesToRemount) {
+ mHandler.obtainMessage(H_VOLUME_UNMOUNT, vol).sendToTarget();
+ mHandler.obtainMessage(H_VOLUME_MOUNT, vol).sendToTarget();
+ }
+ }
+
private boolean supportsBlockCheckpoint() throws RemoteException {
enforcePermission(android.Manifest.permission.MOUNT_FORMAT_FILESYSTEMS);
return mVold.supportsBlockCheckpoint();