diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index 0c785da5c2422..69c29269b7a99 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -248,9 +248,18 @@ 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); + int currentUserId = to.getUserIdentifier(); + mStorageManagerService.mCurrentUserId = currentUserId; + + UserManagerInternal umInternal = LocalServices.getService(UserManagerInternal.class); + if (umInternal.isUserUnlocked(currentUserId)) { + Slog.d(TAG, "Attempt remount volumes for user: " + currentUserId); + mStorageManagerService.maybeRemountVolumes(currentUserId); + mStorageManagerService.mRemountCurrentUserVolumesOnUnlock = false; + } else { + Slog.d(TAG, "Attempt remount volumes for user: " + currentUserId + " on unlock"); + mStorageManagerService.mRemountCurrentUserVolumesOnUnlock = true; + } } @Override @@ -425,6 +434,8 @@ class StorageManagerService extends IStorageManager.Stub private volatile int mCurrentUserId = UserHandle.USER_SYSTEM; + private volatile boolean mRemountCurrentUserVolumesOnUnlock = false; + private final Installer mInstaller; /** Holding lock for AppFuse business */ @@ -1196,6 +1207,10 @@ class StorageManagerService extends IStorageManager.Stub } mHandler.obtainMessage(H_COMPLETE_UNLOCK_USER, userId).sendToTarget(); + if (mRemountCurrentUserVolumesOnUnlock && userId == mCurrentUserId) { + maybeRemountVolumes(userId); + mRemountCurrentUserVolumesOnUnlock = false; + } } private void completeUnlockUser(int userId) { @@ -1255,7 +1270,7 @@ class StorageManagerService extends IStorageManager.Stub } } - private void onUserSwitching(int userId) { + private void maybeRemountVolumes(int userId) { boolean reset = false; List volumesToRemount = new ArrayList<>(); synchronized (mLock) { @@ -1272,6 +1287,7 @@ class StorageManagerService extends IStorageManager.Stub } for (VolumeInfo vol : volumesToRemount) { + Slog.i(TAG, "Remounting volume for user: " + userId + ". Volume: " + vol); mHandler.obtainMessage(H_VOLUME_UNMOUNT, vol).sendToTarget(); mHandler.obtainMessage(H_VOLUME_MOUNT, vol).sendToTarget(); }