summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Keun young Park <keunyoung@google.com> 2020-12-11 14:59:16 -0800
committer Keun-young Park <keunyoung@google.com> 2021-01-29 21:35:02 +0000
commit2d062e56f1d2e6f7340b53feea107a3f50d88f13 (patch)
treedd14a6f0f98189166ede39bee3c55658a9932cbb
parent30befa7b1a4240d16516a9b9254d6d1ab5eb31eb (diff)
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)
-rw-r--r--services/core/java/com/android/server/StorageManagerService.java19
1 files 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 391923324d0c..392894616bf4 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);