Loading services/core/java/com/android/server/accounts/AccountManagerService.java +8 −0 Original line number Diff line number Diff line Loading @@ -880,6 +880,14 @@ public class AccountManagerService packagesToVisibility = Collections.emptyMap(); accountRemovedReceivers = Collections.emptyList(); } if (notify) { Integer oldVisibility = accounts.accountsDb.findAccountVisibility(account, packageName); if (oldVisibility != null && oldVisibility == newVisibility) { // Database will not be updated - skip LOGIN_ACCOUNTS_CHANGED broadcast. notify = false; } } if (!updateAccountVisibilityLocked(account, packageName, newVisibility, accounts)) { return false; Loading services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java +72 −0 Original line number Diff line number Diff line Loading @@ -3193,6 +3193,78 @@ public class AccountManagerServiceTest extends AndroidTestCase { assertEquals(mAccountRemovedBroadcasts, 0); } @SmallTest public void testAccountsChangedBroadcastMarkedAccountAsVisibleThreeTimes() throws Exception { unlockSystemUser(); HashMap<String, Integer> visibility = new HashMap<>(); visibility.put("testpackage1", AccountManager.VISIBILITY_VISIBLE); addAccountRemovedReceiver("testpackage1"); mAms.registerAccountListener( new String [] {AccountManagerServiceTestFixtures.ACCOUNT_TYPE_1}, "testpackage1"); mAms.addAccountExplicitlyWithVisibility( AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS, /* password= */ "p11", /* extras= */ null, visibility, /* callerPackage= */ null); updateBroadcastCounters(2); assertEquals(mVisibleAccountsChangedBroadcasts, 1); assertEquals(mLoginAccountsChangedBroadcasts, 1); assertEquals(mAccountRemovedBroadcasts, 0); mAms.setAccountVisibility(AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS, "testpackage1", AccountManager.VISIBILITY_VISIBLE); mAms.setAccountVisibility(AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS, "testpackage1", AccountManager.VISIBILITY_VISIBLE); updateBroadcastCounters(2); assertEquals(mVisibleAccountsChangedBroadcasts, 1); assertEquals(mLoginAccountsChangedBroadcasts, 1); assertEquals(mAccountRemovedBroadcasts, 0); } @SmallTest public void testAccountsChangedBroadcastChangedVisibilityTwoTimes() throws Exception { unlockSystemUser(); HashMap<String, Integer> visibility = new HashMap<>(); visibility.put("testpackage1", AccountManager.VISIBILITY_VISIBLE); addAccountRemovedReceiver("testpackage1"); mAms.registerAccountListener( new String [] {AccountManagerServiceTestFixtures.ACCOUNT_TYPE_1}, "testpackage1"); mAms.addAccountExplicitlyWithVisibility( AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS, /* password= */ "p11", /* extras= */ null, visibility, /* callerPackage= */ null); updateBroadcastCounters(2); assertEquals(mVisibleAccountsChangedBroadcasts, 1); assertEquals(mLoginAccountsChangedBroadcasts, 1); assertEquals(mAccountRemovedBroadcasts, 0); mAms.setAccountVisibility(AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS, "testpackage1", AccountManager.VISIBILITY_NOT_VISIBLE); mAms.setAccountVisibility(AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS, "testpackage1", AccountManager.VISIBILITY_VISIBLE); updateBroadcastCounters(7); assertEquals(mVisibleAccountsChangedBroadcasts, 3); assertEquals(mLoginAccountsChangedBroadcasts, 3); assertEquals(mAccountRemovedBroadcasts, 1); } @SmallTest public void testRegisterAccountListenerCredentialsUpdate() throws Exception { unlockSystemUser(); Loading Loading
services/core/java/com/android/server/accounts/AccountManagerService.java +8 −0 Original line number Diff line number Diff line Loading @@ -880,6 +880,14 @@ public class AccountManagerService packagesToVisibility = Collections.emptyMap(); accountRemovedReceivers = Collections.emptyList(); } if (notify) { Integer oldVisibility = accounts.accountsDb.findAccountVisibility(account, packageName); if (oldVisibility != null && oldVisibility == newVisibility) { // Database will not be updated - skip LOGIN_ACCOUNTS_CHANGED broadcast. notify = false; } } if (!updateAccountVisibilityLocked(account, packageName, newVisibility, accounts)) { return false; Loading
services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java +72 −0 Original line number Diff line number Diff line Loading @@ -3193,6 +3193,78 @@ public class AccountManagerServiceTest extends AndroidTestCase { assertEquals(mAccountRemovedBroadcasts, 0); } @SmallTest public void testAccountsChangedBroadcastMarkedAccountAsVisibleThreeTimes() throws Exception { unlockSystemUser(); HashMap<String, Integer> visibility = new HashMap<>(); visibility.put("testpackage1", AccountManager.VISIBILITY_VISIBLE); addAccountRemovedReceiver("testpackage1"); mAms.registerAccountListener( new String [] {AccountManagerServiceTestFixtures.ACCOUNT_TYPE_1}, "testpackage1"); mAms.addAccountExplicitlyWithVisibility( AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS, /* password= */ "p11", /* extras= */ null, visibility, /* callerPackage= */ null); updateBroadcastCounters(2); assertEquals(mVisibleAccountsChangedBroadcasts, 1); assertEquals(mLoginAccountsChangedBroadcasts, 1); assertEquals(mAccountRemovedBroadcasts, 0); mAms.setAccountVisibility(AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS, "testpackage1", AccountManager.VISIBILITY_VISIBLE); mAms.setAccountVisibility(AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS, "testpackage1", AccountManager.VISIBILITY_VISIBLE); updateBroadcastCounters(2); assertEquals(mVisibleAccountsChangedBroadcasts, 1); assertEquals(mLoginAccountsChangedBroadcasts, 1); assertEquals(mAccountRemovedBroadcasts, 0); } @SmallTest public void testAccountsChangedBroadcastChangedVisibilityTwoTimes() throws Exception { unlockSystemUser(); HashMap<String, Integer> visibility = new HashMap<>(); visibility.put("testpackage1", AccountManager.VISIBILITY_VISIBLE); addAccountRemovedReceiver("testpackage1"); mAms.registerAccountListener( new String [] {AccountManagerServiceTestFixtures.ACCOUNT_TYPE_1}, "testpackage1"); mAms.addAccountExplicitlyWithVisibility( AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS, /* password= */ "p11", /* extras= */ null, visibility, /* callerPackage= */ null); updateBroadcastCounters(2); assertEquals(mVisibleAccountsChangedBroadcasts, 1); assertEquals(mLoginAccountsChangedBroadcasts, 1); assertEquals(mAccountRemovedBroadcasts, 0); mAms.setAccountVisibility(AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS, "testpackage1", AccountManager.VISIBILITY_NOT_VISIBLE); mAms.setAccountVisibility(AccountManagerServiceTestFixtures.ACCOUNT_SUCCESS, "testpackage1", AccountManager.VISIBILITY_VISIBLE); updateBroadcastCounters(7); assertEquals(mVisibleAccountsChangedBroadcasts, 3); assertEquals(mLoginAccountsChangedBroadcasts, 3); assertEquals(mAccountRemovedBroadcasts, 1); } @SmallTest public void testRegisterAccountListenerCredentialsUpdate() throws Exception { unlockSystemUser(); Loading