Run the account reconciler every time we start SyncManager
* This takes care of *some* of the race conditions where the account DB is blown away but the Email app is not running, so we don't get any notification of a change; We have to try and sort this out early. * SyncManager is started by Welcome, so this catches many cases of entering the email app. Bug: 2567986 Change-Id: I76bea5b636802ba5c1677d8b1825fb3c61f7b2d9
This commit is contained in:
parent
d2a0d23380
commit
3b3b5b0f2b
@ -921,24 +921,35 @@ public class SyncManager extends Service implements Runnable {
|
||||
*/
|
||||
public class EasAccountsUpdatedListener implements OnAccountsUpdateListener {
|
||||
public void onAccountsUpdated(android.accounts.Account[] accounts) {
|
||||
SyncManager syncManager = INSTANCE;
|
||||
if (syncManager != null) {
|
||||
syncManager.runAccountReconciler();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Non-blocking call to run the account reconciler.
|
||||
* Launches a worker thread, so it may be called from UI thread.
|
||||
*/
|
||||
private void runAccountReconciler() {
|
||||
final SyncManager syncManager = this;
|
||||
new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
SyncManager syncManager = INSTANCE;
|
||||
if (syncManager != null) {
|
||||
android.accounts.Account[] accountMgrList = AccountManager.get(syncManager)
|
||||
.getAccountsByType(Email.EXCHANGE_ACCOUNT_MANAGER_TYPE);
|
||||
synchronized (sAccountList) {
|
||||
// Make sure we have an up-to-date sAccountList
|
||||
if (mAccountObserver != null) {
|
||||
mAccountObserver.onAccountChanged();
|
||||
}
|
||||
reconcileAccountsWithAccountManager(syncManager, sAccountList,
|
||||
accountMgrList, false, mResolver);
|
||||
}
|
||||
}
|
||||
}
|
||||
}.start();
|
||||
}
|
||||
}
|
||||
|
||||
protected static void log(String str) {
|
||||
if (Eas.USER_LOG) {
|
||||
@ -1059,6 +1070,9 @@ public class SyncManager extends Service implements Runnable {
|
||||
throw new RuntimeException();
|
||||
}
|
||||
}
|
||||
// Run the reconciler and clean up any mismatched accounts - if we weren't running when
|
||||
// accounts were deleted, it won't have been called.
|
||||
runAccountReconciler();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
Reference in New Issue
Block a user