diff options
| author | 2011-02-15 15:07:59 -0800 | |
|---|---|---|
| committer | 2011-02-16 10:16:33 -0800 | |
| commit | c441e4e355b2c277da3ff72b6319cdf024d29e7f (patch) | |
| tree | c7554ca7c29c17cd048c117d391a73f2edb3585a | |
| parent | 2050de5b9a5c097e30545ab822211d49031bd9dc (diff) | |
DO NOT MERGE - Clear backoffs on reconnect
Slightly modified backport from HC
Bug: 3460736
Change-Id: I155dfd34bb7abb76a10b5b58fe9a32af2449d4f1
| -rw-r--r-- | core/java/android/content/SyncManager.java | 7 | ||||
| -rw-r--r-- | core/java/android/content/SyncStorageEngine.java | 26 |
2 files changed, 33 insertions, 0 deletions
diff --git a/core/java/android/content/SyncManager.java b/core/java/android/content/SyncManager.java index 26b6ad70b351..5a836049c4cc 100644 --- a/core/java/android/content/SyncManager.java +++ b/core/java/android/content/SyncManager.java @@ -258,6 +258,7 @@ public class SyncManager implements OnAccountsUpdateListener { // DISCONNECTED for GPRS in any order. if we receive the CONNECTED first, and then // a DISCONNECTED, we want to make sure we set mDataConnectionIsConnected to true // since we still have a WiFi connection. + final boolean wasConnected = mDataConnectionIsConnected; switch (state) { case CONNECTED: mDataConnectionIsConnected = true; @@ -273,6 +274,12 @@ public class SyncManager implements OnAccountsUpdateListener { // ignore the rest of the states -- leave our boolean alone. } if (mDataConnectionIsConnected) { + if (!wasConnected) { + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "Reconnection detected: clearing all backoffs"); + } + mSyncStorageEngine.clearAllBackoffs(); + } sendCheckAlarmsMessage(); } } diff --git a/core/java/android/content/SyncStorageEngine.java b/core/java/android/content/SyncStorageEngine.java index e1a9dbbe629b..faf136545a6a 100644 --- a/core/java/android/content/SyncStorageEngine.java +++ b/core/java/android/content/SyncStorageEngine.java @@ -525,6 +525,32 @@ public class SyncStorageEngine extends Handler { } } + public void clearAllBackoffs() { + boolean changed = false; + synchronized (mAuthorities) { + for (AccountInfo accountInfo : mAccounts.values()) { + for (AuthorityInfo authorityInfo : accountInfo.authorities.values()) { + if (authorityInfo.backoffTime != NOT_IN_BACKOFF_MODE + || authorityInfo.backoffDelay != NOT_IN_BACKOFF_MODE) { + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "clearAllBackoffs:" + + " authority:" + authorityInfo.authority + + " account:" + accountInfo.account.name + + " backoffTime was: " + authorityInfo.backoffTime + + " backoffDelay was: " + authorityInfo.backoffDelay); + } + authorityInfo.backoffTime = NOT_IN_BACKOFF_MODE; + authorityInfo.backoffDelay = NOT_IN_BACKOFF_MODE; + changed = true; + } + } + } + } + + if (changed) { + reportChange(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS); + } + } public void setDelayUntilTime(Account account, String providerName, long delayUntil) { if (Log.isLoggable(TAG, Log.VERBOSE)) { Log.v(TAG, "setDelayUntil: " + account + ", provider " + providerName |