diff options
author | Fred Quintana <fredq@google.com> | 2009-08-27 21:32:08 -0700 |
---|---|---|
committer | Fred Quintana <fredq@google.com> | 2009-08-27 21:32:08 -0700 |
commit | fae7ff106b3ed791e324ddcec17226c3fe1cd809 (patch) | |
tree | b3c5aada882e526e5c8c9e081dc42565cef01614 /core/java/android/content/SyncManager.java | |
parent | c298a8518a8fd73a303132c7db241f10eb46c5b6 (diff) | |
download | frameworks_base-fae7ff106b3ed791e324ddcec17226c3fe1cd809.zip frameworks_base-fae7ff106b3ed791e324ddcec17226c3fe1cd809.tar.gz frameworks_base-fae7ff106b3ed791e324ddcec17226c3fe1cd809.tar.bz2 |
- don't schedule syncs that we will never dispatch
- expedite the INITIALIZATION sync
Diffstat (limited to 'core/java/android/content/SyncManager.java')
-rw-r--r-- | core/java/android/content/SyncManager.java | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/core/java/android/content/SyncManager.java b/core/java/android/content/SyncManager.java index 15144a2..0c5e082 100644 --- a/core/java/android/content/SyncManager.java +++ b/core/java/android/content/SyncManager.java @@ -148,6 +148,7 @@ class SyncManager implements OnAccountsUpdatedListener { private volatile boolean mSyncPollInitialized; private final PendingIntent mSyncAlarmIntent; private final PendingIntent mSyncPollAlarmIntent; + private final ConnectivityManager mConnManager; private final SyncAdaptersCache mSyncAdapters; @@ -288,6 +289,7 @@ class SyncManager implements OnAccountsUpdatedListener { SyncStorageEngine.init(context); mSyncStorageEngine = SyncStorageEngine.getSingleton(); mSyncQueue = new SyncQueue(mSyncStorageEngine); + mConnManager = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE); mContext = context; @@ -536,6 +538,14 @@ class SyncManager implements OnAccountsUpdatedListener { return; } + if (!mConnManager.getBackgroundDataSetting()) { + if (isLoggable) { + Log.v(TAG, "not syncing because background data usage isn't allowed"); + } + setStatusText("Sync is disabled."); + return; + } + if (mAccounts == null) setStatusText("The accounts aren't known yet."); if (!mDataConnectionIsConnected) setStatusText("No data connection"); if (mStorageIsLow) setStatusText("Memory low"); @@ -602,6 +612,8 @@ class SyncManager implements OnAccountsUpdatedListener { if (hasSyncAdapter) syncableAuthorities.add(requestedAuthority); } + final boolean masterSyncAutomatically = mSyncStorageEngine.getMasterSyncAutomatically(); + for (String authority : syncableAuthorities) { for (Account account : accounts) { int isSyncable = mSyncStorageEngine.getIsSyncable(account, authority); @@ -618,22 +630,36 @@ class SyncManager implements OnAccountsUpdatedListener { if (!syncAdapterInfo.type.supportsUploading() && uploadOnly) { continue; } + // make this an initialization sync if the isSyncable state is unknown Bundle extrasCopy = extras; + long delayCopy = delay; if (isSyncable < 0) { extrasCopy = new Bundle(extras); extrasCopy.putBoolean(ContentResolver.SYNC_EXTRAS_INITIALIZE, true); + delayCopy = -1; // expedite this + } else { + final boolean syncAutomatically = masterSyncAutomatically + && mSyncStorageEngine.getSyncAutomatically(account, authority); + boolean syncAllowed = manualSync || syncAutomatically; + if (!syncAllowed) { + if (isLoggable) { + Log.d(TAG, "scheduleSync: sync of " + account + ", " + authority + + " is not allowed, dropping request"); + continue; + } + } } if (isLoggable) { Log.v(TAG, "scheduleSync:" - + " delay " + delay + + " delay " + delayCopy + ", source " + source + ", account " + account + ", authority " + authority + ", extras " + extrasCopy); } scheduleSyncOperation( - new SyncOperation(account, source, authority, extrasCopy, delay)); + new SyncOperation(account, source, authority, extrasCopy, delayCopy)); } } } @@ -1591,9 +1617,7 @@ class SyncManager implements OnAccountsUpdatedListener { // found that is runnable (not disabled, etc). If that one is ready to run then // start it, otherwise just get out. SyncOperation op; - final ConnectivityManager connManager = (ConnectivityManager) - mContext.getSystemService(Context.CONNECTIVITY_SERVICE); - final boolean backgroundDataUsageAllowed = connManager.getBackgroundDataSetting(); + final boolean backgroundDataUsageAllowed = mConnManager.getBackgroundDataSetting(); synchronized (mSyncQueue) { while (true) { op = mSyncQueue.head(); |