Do not migrate apps data on every user start
Only migrate apps' data if lastLoggedInFingerprint of the user is
different from the current build.
Bug: 28750609
Change-Id: Id7e3cdd787b122a56b880abb62c9d173a6463ba6
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 68ccbdf..04f3ce3 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -2879,9 +2879,15 @@
* app storage and apply any user restrictions.
*/
public void onBeforeStartUser(int userId) {
- final int userSerial = getUserSerialNumber(userId);
+ UserInfo userInfo = getUserInfo(userId);
+ if (userInfo == null) {
+ return;
+ }
+ final int userSerial = userInfo.serialNumber;
+ // Migrate only if build fingerprints mismatch
+ boolean migrateAppsData = !Build.FINGERPRINT.equals(userInfo.lastLoggedInFingerprint);
mPm.prepareUserData(userId, userSerial, StorageManager.FLAG_STORAGE_DE);
- mPm.reconcileAppsData(userId, StorageManager.FLAG_STORAGE_DE);
+ mPm.reconcileAppsData(userId, StorageManager.FLAG_STORAGE_DE, migrateAppsData);
if (userId != UserHandle.USER_SYSTEM) {
synchronized (mRestrictionsLock) {
@@ -2897,9 +2903,15 @@
* app storage.
*/
public void onBeforeUnlockUser(@UserIdInt int userId) {
- final int userSerial = getUserSerialNumber(userId);
+ UserInfo userInfo = getUserInfo(userId);
+ if (userInfo == null) {
+ return;
+ }
+ final int userSerial = userInfo.serialNumber;
+ // Migrate only if build fingerprints mismatch
+ boolean migrateAppsData = !Build.FINGERPRINT.equals(userInfo.lastLoggedInFingerprint);
mPm.prepareUserData(userId, userSerial, StorageManager.FLAG_STORAGE_CE);
- mPm.reconcileAppsData(userId, StorageManager.FLAG_STORAGE_CE);
+ mPm.reconcileAppsData(userId, StorageManager.FLAG_STORAGE_CE, migrateAppsData);
}
/**