diff options
| author | 2024-04-04 19:54:20 +0000 | |
|---|---|---|
| committer | 2024-04-04 19:54:20 +0000 | |
| commit | a6897a1bd44a5fcffeb1984a11cffbe045f48e3c (patch) | |
| tree | 47ec0d28e756c43cbc71ce53dc9d1edcb0ac382c | |
| parent | b409758ae565ed62c06be00080ab2910e9c81568 (diff) | |
| parent | 60676d08a232fbbc1d804f14e0ae010bfd0fc782 (diff) | |
Merge "Don't send ACCOUNT_REMOVED if account is marked as visible twice." into main
| -rw-r--r-- | services/core/java/com/android/server/accounts/AccountManagerService.java | 5 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java | 39 |
2 files changed, 44 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java index 586b09517e92..603a95c31e5b 100644 --- a/services/core/java/com/android/server/accounts/AccountManagerService.java +++ b/services/core/java/com/android/server/accounts/AccountManagerService.java @@ -897,6 +897,11 @@ public class AccountManagerService } } for (String packageNameToNotify : accountRemovedReceivers) { + int currentVisibility = + resolveAccountVisibility(account, packageNameToNotify, accounts); + if (isVisible(currentVisibility)) { + continue; + } sendAccountRemovedBroadcast( account, packageNameToNotify, diff --git a/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java index e0a99b016da9..e18909879934 100644 --- a/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java @@ -3156,6 +3156,39 @@ public class AccountManagerServiceTest extends AndroidTestCase { } @SmallTest + public void testAccountRemovedBroadcastMarkedAccountAsVisibleTwice() throws Exception { + unlockSystemUser(); + + HashMap<String, Integer> visibility = new HashMap<>(); + visibility.put("testpackage1", AccountManager.VISIBILITY_USER_MANAGED_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); + + updateBroadcastCounters(3); + assertEquals(mVisibleAccountsChangedBroadcasts, 1); // visibility was not changed + assertEquals(mLoginAccountsChangedBroadcasts, 2); + assertEquals(mAccountRemovedBroadcasts, 0); + } + + @SmallTest public void testRegisterAccountListenerCredentialsUpdate() throws Exception { unlockSystemUser(); mAms.registerAccountListener( @@ -3493,6 +3526,12 @@ public class AccountManagerServiceTest extends AndroidTestCase { } @Override + public boolean bindServiceAsUser(Intent service, ServiceConnection conn, + Context.BindServiceFlags flags, UserHandle user) { + return mTestContext.bindServiceAsUser(service, conn, flags, user); + } + + @Override public void unbindService(ServiceConnection conn) { mTestContext.unbindService(conn); } |