From 2d062e56f1d2e6f7340b53feea107a3f50d88f13 Mon Sep 17 00:00:00 2001 From: Keun young Park Date: Fri, 11 Dec 2020 14:59:16 -0800 Subject: [PATCH] Change setPrimaryStorageUuid to handle it for the current user - It used hard coded user 0 and that breaks it for secondary users. Current user should be enough if this move is triggered from settings which is run from the current user. - For device with no user switching from user 0, this should not make any differences. - This change also fixes failure of CTS android.appsecurity.cts.AdoptableHostTest#testPrimaryStorage. - In longer term, we need separate setPrimaryStorageUuidAsUser API to control it per each user. Bug: 174593750 Test: atest android.appsecurity.cts.AdoptableHostTest#testPrimaryStorage Change-Id: I87c821903987d22e8d26ade92120b99a33897168 Merged-In: I87c821903987d22e8d26ade92120b99a33897168 (cherry picked from commit 9aa55f0168864186180e9090197889bee70fbb60) --- .../android/server/StorageManagerService.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index 391923324d0ce..392894616bf43 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -58,6 +58,7 @@ import static org.xmlpull.v1.XmlPullParser.START_TAG; import android.Manifest; import android.annotation.Nullable; +import android.annotation.UserIdInt; import android.app.ActivityManager; import android.app.ActivityManagerInternal; import android.app.AppOpsManager; @@ -511,14 +512,21 @@ class StorageManagerService extends IStorageManager.Stub } } - private @Nullable VolumeInfo findStorageForUuid(String volumeUuid) { + private @Nullable VolumeInfo findStorageForUuidAsUser(String volumeUuid, + @UserIdInt int userId) { final StorageManager storage = mContext.getSystemService(StorageManager.class); if (Objects.equals(StorageManager.UUID_PRIVATE_INTERNAL, volumeUuid)) { - return storage.findVolumeById(VolumeInfo.ID_EMULATED_INTERNAL + ";" + 0); + return storage.findVolumeById(VolumeInfo.ID_EMULATED_INTERNAL + ";" + userId); } else if (Objects.equals(StorageManager.UUID_PRIMARY_PHYSICAL, volumeUuid)) { return storage.getPrimaryPhysicalVolume(); } else { - return storage.findEmulatedForPrivate(storage.findVolumeByUuid(volumeUuid)); + VolumeInfo info = storage.findVolumeByUuid(volumeUuid); + if (info == null) { + Slog.w(TAG, "findStorageForUuidAsUser cannot find volumeUuid:" + volumeUuid); + return null; + } + String emulatedUuid = info.getId().replace("private", "emulated") + ";" + userId; + return storage.findVolumeById(emulatedUuid); } } @@ -2763,8 +2771,9 @@ class StorageManagerService extends IStorageManager.Stub return; } else { - from = findStorageForUuid(mPrimaryStorageUuid); - to = findStorageForUuid(volumeUuid); + int currentUserId = mCurrentUserId; + from = findStorageForUuidAsUser(mPrimaryStorageUuid, currentUserId); + to = findStorageForUuidAsUser(volumeUuid, currentUserId); if (from == null) { Slog.w(TAG, "Failing move due to missing from volume " + mPrimaryStorageUuid);