Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit af80827b authored by Dmitry Dementyev's avatar Dmitry Dementyev Committed by Android (Google) Code Review
Browse files

Merge "Reduce ACCOUNTS_CHANGED broadcast usage." into main

parents 1944ad60 d6800b3c
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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;
+72 −0
Original line number Diff line number Diff line
@@ -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();