summaryrefslogtreecommitdiffstats
path: root/core/java/android/content/SyncManager.java
diff options
context:
space:
mode:
authorFred Quintana <fredq@google.com>2009-08-27 21:32:08 -0700
committerFred Quintana <fredq@google.com>2009-08-27 21:32:08 -0700
commitfae7ff106b3ed791e324ddcec17226c3fe1cd809 (patch)
treeb3c5aada882e526e5c8c9e081dc42565cef01614 /core/java/android/content/SyncManager.java
parentc298a8518a8fd73a303132c7db241f10eb46c5b6 (diff)
downloadframeworks_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.java34
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();