diff options
| author | Amith Yamasani <yamasani@google.com> | 2012-04-05 18:29:52 -0700 |
|---|---|---|
| committer | Amith Yamasani <yamasani@google.com> | 2012-04-11 10:29:18 -0700 |
| commit | f29f2369cf4e1de090c985ed53d3f5e59535986a (patch) | |
| tree | bc5523343e49a6333a4648111a495eab5588a05c /core/java/android/accounts/AccountManagerService.java | |
| parent | d3ce6f50c114f58a3f50e44764e9b315ac41f637 (diff) | |
| download | frameworks_base-f29f2369cf4e1de090c985ed53d3f5e59535986a.zip frameworks_base-f29f2369cf4e1de090c985ed53d3f5e59535986a.tar.gz frameworks_base-f29f2369cf4e1de090c985ed53d3f5e59535986a.tar.bz2 | |
Fix a race condition in SyncManager.onAccountsUpdated()
Get the full list of accounts from AccountManagerService in one shot
instead of getting them per user.
Bug: 6263091
Change-Id: I488f24749a96281ef1e2a620820399c97f471024
Diffstat (limited to 'core/java/android/accounts/AccountManagerService.java')
| -rw-r--r-- | core/java/android/accounts/AccountManagerService.java | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/core/java/android/accounts/AccountManagerService.java b/core/java/android/accounts/AccountManagerService.java index 197c1bd..241fecb 100644 --- a/core/java/android/accounts/AccountManagerService.java +++ b/core/java/android/accounts/AccountManagerService.java @@ -1488,6 +1488,31 @@ public class AccountManagerService } } + /** + * Returns all the accounts qualified by user. + * @hide + */ + public AccountAndUser[] getAllAccounts() { + ArrayList<AccountAndUser> allAccounts = new ArrayList<AccountAndUser>(); + List<UserInfo> users = getAllUsers(); + if (users == null) return new AccountAndUser[0]; + + synchronized(mUsers) { + for (UserInfo user : users) { + UserAccounts userAccounts = getUserAccounts(user.id); + if (userAccounts == null) continue; + synchronized (userAccounts.cacheLock) { + Account[] accounts = getAccountsFromCacheLocked(userAccounts, null); + for (int a = 0; a < accounts.length; a++) { + allAccounts.add(new AccountAndUser(accounts[a], user.id)); + } + } + } + } + AccountAndUser[] accountsArray = new AccountAndUser[allAccounts.size()]; + return allAccounts.toArray(accountsArray); + } + public Account[] getAccounts(String type) { if (Log.isLoggable(TAG, Log.VERBOSE)) { Log.v(TAG, "getAccounts: accountType " + type |
