diff options
| -rw-r--r-- | services/core/java/com/android/server/content/SyncManager.java | 51 |
1 files changed, 32 insertions, 19 deletions
diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java index a06683548537..78618ce07b69 100644 --- a/services/core/java/com/android/server/content/SyncManager.java +++ b/services/core/java/com/android/server/content/SyncManager.java @@ -345,25 +345,9 @@ public class SyncManager { } public void updateRunningAccounts() { - mRunningAccounts = AccountManagerService.getSingleton().getRunningAccounts(); - - if (mBootCompleted) { - doDatabaseCleanup(); - } - - AccountAndUser[] accounts = mRunningAccounts; - for (ActiveSyncContext currentSyncContext : mActiveSyncContexts) { - if (!containsAccountAndUser(accounts, - currentSyncContext.mSyncOperation.target.account, - currentSyncContext.mSyncOperation.target.userId)) { - Log.d(TAG, "canceling sync since the account is no longer running"); - sendSyncFinishedOrCanceledMessage(currentSyncContext, - null /* no result since this is a cancel */); - } - } - // we must do this since we don't bother scheduling alarms when - // the accounts are not set yet - sendCheckAlarmsMessage(); + if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "sending MESSAGE_ACCOUNTS_UPDATED"); + // Update accounts in handler thread. + mSyncHandler.sendEmptyMessage(SyncHandler.MESSAGE_ACCOUNTS_UPDATED); } private void doDatabaseCleanup() { @@ -2179,6 +2163,7 @@ public class SyncManager { * obj: {@link com.android.server.content.SyncManager.ActiveSyncContext} */ private static final int MESSAGE_MONITOR_SYNC = 8; + private static final int MESSAGE_ACCOUNTS_UPDATED = 9; public final SyncNotificationInfo mSyncNotificationInfo = new SyncNotificationInfo(); private Long mAlarmScheduleTime = null; @@ -2296,6 +2281,13 @@ public class SyncManager { // to also take into account the periodic syncs. earliestFuturePollTime = scheduleReadyPeriodicSyncs(); switch (msg.what) { + case SyncHandler.MESSAGE_ACCOUNTS_UPDATED: + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "handleSyncHandlerMessage: MESSAGE_ACCOUNTS_UPDATED"); + } + updateRunningAccountsH(); + break; + case SyncHandler.MESSAGE_CANCEL: SyncStorageEngine.EndPoint endpoint = (SyncStorageEngine.EndPoint) msg.obj; Bundle extras = msg.peekData(); @@ -2872,7 +2864,28 @@ public class SyncManager { mLocalDeviceIdleController.setSyncActive(active); } } + } + + private void updateRunningAccountsH() { + mRunningAccounts = AccountManagerService.getSingleton().getRunningAccounts(); + + if (mBootCompleted) { + doDatabaseCleanup(); + } + AccountAndUser[] accounts = mRunningAccounts; + for (ActiveSyncContext currentSyncContext : mActiveSyncContexts) { + if (!containsAccountAndUser(accounts, + currentSyncContext.mSyncOperation.target.account, + currentSyncContext.mSyncOperation.target.userId)) { + Log.d(TAG, "canceling sync since the account is no longer running"); + sendSyncFinishedOrCanceledMessage(currentSyncContext, + null /* no result since this is a cancel */); + } + } + // we must do this since we don't bother scheduling alarms when + // the accounts are not set yet + sendCheckAlarmsMessage(); } private boolean isSyncNotUsingNetworkH(ActiveSyncContext activeSyncContext) { |