From d648a605e8249219ce60ac93e074758ebb6fc4ab Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Wed, 26 Sep 2012 15:06:10 -0700 Subject: [PATCH] Fix sync problems when setting up a new user and account Bug: 7197445 The listener on AccountManager is not sufficient since it only triggers when primary user's accounts change. Switch to watching for LOGIN_ACCOUNTS_CHANGED_ACTION for all users. Change-Id: I63f526aebd70f0ad777490f3e0b6e6894220d26c --- core/java/android/content/SyncManager.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/core/java/android/content/SyncManager.java b/core/java/android/content/SyncManager.java index 4257e0e629284..4999a2d0e255b 100644 --- a/core/java/android/content/SyncManager.java +++ b/core/java/android/content/SyncManager.java @@ -203,6 +203,12 @@ public class SyncManager implements OnAccountsUpdateListener { } }; + private BroadcastReceiver mAccountsUpdatedReceiver = new BroadcastReceiver() { + public void onReceive(Context context, Intent intent) { + onAccountsUpdated(null); + } + }; + private final PowerManager mPowerManager; // Use this as a random offset to seed all periodic syncs @@ -456,8 +462,11 @@ public class SyncManager implements OnAccountsUpdateListener { }); if (!factoryTest) { - AccountManager.get(mContext).addOnAccountsUpdatedListener(SyncManager.this, - mSyncHandler, false /* updateImmediately */); + // Register for account list updates for all users + mContext.registerReceiverAsUser(mAccountsUpdatedReceiver, + UserHandle.ALL, + new IntentFilter(AccountManager.LOGIN_ACCOUNTS_CHANGED_ACTION), + null, null); // do this synchronously to ensure we have the accounts before this call returns onAccountsUpdated(null); }