From 76f0e0d282dadc3f8b4ad81831fa02d590af9dd3 Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Wed, 22 May 2019 12:26:56 -0700 Subject: [PATCH] Don't purge *all* sync information when a user is deleted. Bug: 132869699 Test: Manual: 1. Add two accounts (Wait for a while) 2. Remove one (Wait for a while) 3. Make sure the other account's sync adapter states are intact using "dumpsys content". 4. Add a guest user (Wait for a while) 5. Remove the guest user (Wait for a while) 3. Make sure user-0's sync adapter states are intact using "dumpsys content". Change-Id: I1fc11a37d6b4672ecd4c62f338d75a7381a2df6b --- .../java/com/android/server/content/SyncManager.java | 2 +- .../com/android/server/content/SyncStorageEngine.java | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java index d8b7c2eb5d4cf..fa8c48bdc7f78 100644 --- a/services/core/java/com/android/server/content/SyncManager.java +++ b/services/core/java/com/android/server/content/SyncManager.java @@ -1170,7 +1170,7 @@ public class SyncManager { } private void removeSyncsForAuthority(EndPoint info, String why) { - mLogger.log("removeSyncsForAuthority: ", info); + mLogger.log("removeSyncsForAuthority: ", info, why); verifyJobScheduler(); List ops = getAllPendingSyncs(); for (SyncOperation op: ops) { diff --git a/services/core/java/com/android/server/content/SyncStorageEngine.java b/services/core/java/com/android/server/content/SyncStorageEngine.java index c7a3f4b173c30..e09c661c627b0 100644 --- a/services/core/java/com/android/server/content/SyncStorageEngine.java +++ b/services/core/java/com/android/server/content/SyncStorageEngine.java @@ -1027,7 +1027,7 @@ public class SyncStorageEngine { * Called when the set of account has changed, given the new array of * active accounts. */ - public void removeStaleAccounts(@Nullable Account[] accounts, int userId) { + public void removeStaleAccounts(@Nullable Account[] currentAccounts, int userId) { synchronized (mAuthorities) { if (Log.isLoggable(TAG, Log.VERBOSE)) { Slog.v(TAG, "Updating for new accounts..."); @@ -1036,9 +1036,11 @@ public class SyncStorageEngine { Iterator accIt = mAccounts.values().iterator(); while (accIt.hasNext()) { AccountInfo acc = accIt.next(); - if ((accounts == null) || ( - (acc.accountAndUser.userId == userId) - && !ArrayUtils.contains(accounts, acc.accountAndUser.account))) { + if (acc.accountAndUser.userId != userId) { + continue; // Irrelevant user. + } + if ((currentAccounts == null) + || !ArrayUtils.contains(currentAccounts, acc.accountAndUser.account)) { // This account no longer exists... if (Log.isLoggable(TAG, Log.VERBOSE)) { Slog.v(TAG, "Account removed: " + acc.accountAndUser);