Merge "SM: Change volume mountUserId for new user" into main am: cc299356d6 am: 88d2b411f7
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2616670 Change-Id: Ib4fafdbb5285c5a3a8a2df62c04d429c5d156e31 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -1269,6 +1269,21 @@ class StorageManagerService extends IStorageManager.Stub
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method checks if the volume is public and the volume is visible and the volume it is
|
||||||
|
* trying to mount doesn't have the same mount user id as the current user being maintained by
|
||||||
|
* StorageManagerService and change the mount Id. The checks are same as
|
||||||
|
* {@link StorageManagerService#maybeRemountVolumes(int)}
|
||||||
|
* @param VolumeInfo object to consider for changing the mountId
|
||||||
|
*/
|
||||||
|
private void updateVolumeMountIdIfRequired(VolumeInfo vol) {
|
||||||
|
synchronized (mLock) {
|
||||||
|
if (!vol.isPrimary() && vol.isVisible() && vol.getMountUserId() != mCurrentUserId) {
|
||||||
|
vol.mountUserId = mCurrentUserId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private boolean supportsBlockCheckpoint() throws RemoteException {
|
private boolean supportsBlockCheckpoint() throws RemoteException {
|
||||||
enforcePermission(android.Manifest.permission.MOUNT_FORMAT_FILESYSTEMS);
|
enforcePermission(android.Manifest.permission.MOUNT_FORMAT_FILESYSTEMS);
|
||||||
return mVold.supportsBlockCheckpoint();
|
return mVold.supportsBlockCheckpoint();
|
||||||
@@ -1382,13 +1397,14 @@ class StorageManagerService extends IStorageManager.Stub
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onVolumeStateChanged(String volId, final int newState) {
|
public void onVolumeStateChanged(String volId, final int newState, final int userId) {
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
final VolumeInfo vol = mVolumes.get(volId);
|
final VolumeInfo vol = mVolumes.get(volId);
|
||||||
if (vol != null) {
|
if (vol != null) {
|
||||||
final int oldState = vol.state;
|
final int oldState = vol.state;
|
||||||
vol.state = newState;
|
vol.state = newState;
|
||||||
final VolumeInfo vInfo = new VolumeInfo(vol);
|
final VolumeInfo vInfo = new VolumeInfo(vol);
|
||||||
|
vInfo.mountUserId = userId;
|
||||||
final SomeArgs args = SomeArgs.obtain();
|
final SomeArgs args = SomeArgs.obtain();
|
||||||
args.arg1 = vInfo;
|
args.arg1 = vInfo;
|
||||||
args.argi1 = oldState;
|
args.argi1 = oldState;
|
||||||
@@ -2232,7 +2248,7 @@ class StorageManagerService extends IStorageManager.Stub
|
|||||||
if (isMountDisallowed(vol)) {
|
if (isMountDisallowed(vol)) {
|
||||||
throw new SecurityException("Mounting " + volId + " restricted by policy");
|
throw new SecurityException("Mounting " + volId + " restricted by policy");
|
||||||
}
|
}
|
||||||
|
updateVolumeMountIdIfRequired(vol);
|
||||||
mount(vol);
|
mount(vol);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user