From 066aa5ed71a0866974e0c7118fd7812f94df0ccb Mon Sep 17 00:00:00 2001 From: sunjian Date: Mon, 5 Jun 2017 12:16:59 -0700 Subject: [PATCH] Notify registered packages of visible accounts change when authenticators get uninstalled. Bug: 38332496 Test: manual Change-Id: I877d52d511deb177d07f9e602d84f33fd0fd2c82 --- .../accounts/AccountManagerService.java | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java index ec4dc64ec4b03..f0b1b3baee170 100644 --- a/services/core/java/com/android/server/accounts/AccountManagerService.java +++ b/services/core/java/com/android/server/accounts/AccountManagerService.java @@ -751,6 +751,11 @@ public class AccountManagerService } } + private boolean isVisible(int visibility) { + return visibility == AccountManager.VISIBILITY_VISIBLE || + visibility == AccountManager.VISIBILITY_USER_MANAGED_VISIBLE; + } + /** * Updates visibility for given account name and package. * @@ -803,8 +808,10 @@ public class AccountManagerService if (notify) { for (Entry packageToVisibility : packagesToVisibility .entrySet()) { - if (shouldNotifyOnVisibilityChange(packageToVisibility.getValue(), - resolveAccountVisibility(account, packageName, accounts))) { + int oldVisibility = packageToVisibility.getValue(); + int currentVisibility = + resolveAccountVisibility(account, packageName, accounts); + if (isVisible(oldVisibility) != isVisible(currentVisibility)) { notifyPackage(packageToVisibility.getKey(), accounts); } } @@ -1181,8 +1188,7 @@ public class AccountManagerService for (Entry packageToVisibility : packagesToVisibility.entrySet()) { - if (shouldNotifyOnVisibilityChange(packageToVisibility.getValue(), - AccountManager.VISIBILITY_NOT_VISIBLE)) { + if (isVisible(packageToVisibility.getValue())) { notifyPackage(packageToVisibility.getKey(), accounts); } } @@ -1218,14 +1224,6 @@ public class AccountManagerService } } - private boolean shouldNotifyOnVisibilityChange(int oldVisibility, int newVisibility) { - boolean oldVisible = (oldVisibility == AccountManager.VISIBILITY_VISIBLE) || - (oldVisibility == AccountManager.VISIBILITY_USER_MANAGED_VISIBLE); - boolean newVisible = (newVisibility == AccountManager.VISIBILITY_VISIBLE) || - (newVisibility == AccountManager.VISIBILITY_USER_MANAGED_VISIBLE); - return oldVisible == newVisible; - } - private SparseBooleanArray getUidsOfInstalledOrUpdatedPackagesAsUser(int userId) { // Get the UIDs of all apps that might have data on the device. We want // to preserve user data if the app might otherwise be storing data.