summaryrefslogtreecommitdiffstats
path: root/core/java/android/content/SyncManager.java
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2011-07-13 10:44:07 -0700
committerJeff Sharkey <jsharkey@android.com>2011-07-26 17:53:27 -0700
commit34821881c159e434a1a2c8a6ba5ebfc64376791e (patch)
treea972c15dc1893d332ed511ff8829e9d38d59689a /core/java/android/content/SyncManager.java
parent19f773bc96c141227fab3af68d9fcdf9a3c087cb (diff)
downloadframeworks_base-34821881c159e434a1a2c8a6ba5ebfc64376791e.zip
frameworks_base-34821881c159e434a1a2c8a6ba5ebfc64376791e.tar.gz
frameworks_base-34821881c159e434a1a2c8a6ba5ebfc64376791e.tar.bz2
Avoid sync when UID network is disconnected.
During maybeStartNextSyncLocked(), check the network connectivity for the target UID, and skip when disconnected. Bug: 4519115 Change-Id: I8adee8e04521cb878624b19e557d01869f984c4c
Diffstat (limited to 'core/java/android/content/SyncManager.java')
-rw-r--r--core/java/android/content/SyncManager.java20
1 files changed, 18 insertions, 2 deletions
diff --git a/core/java/android/content/SyncManager.java b/core/java/android/content/SyncManager.java
index 2cb8a86..5be6ec1 100644
--- a/core/java/android/content/SyncManager.java
+++ b/core/java/android/content/SyncManager.java
@@ -1691,12 +1691,28 @@ public class SyncManager implements OnAccountsUpdateListener {
continue;
}
- // skip the sync if it isn't manual and auto sync or
- // background data usage is disabled
+ final RegisteredServicesCache.ServiceInfo<SyncAdapterType> syncAdapterInfo;
+ syncAdapterInfo = mSyncAdapters.getServiceInfo(
+ SyncAdapterType.newKey(op.authority, op.account.type));
+
+ // only proceed if network is connected for requesting UID
+ final boolean uidNetworkConnected;
+ if (syncAdapterInfo != null) {
+ final NetworkInfo networkInfo = getConnectivityManager()
+ .getActiveNetworkInfoForUid(syncAdapterInfo.uid);
+ uidNetworkConnected = networkInfo != null && networkInfo.isConnected();
+ } else {
+ uidNetworkConnected = false;
+ }
+
+ // skip the sync if it isn't manual, and auto sync or
+ // background data usage is disabled or network is
+ // disconnected for the target UID.
if (!op.extras.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_SETTINGS, false)
&& (syncableState > 0)
&& (!masterSyncAutomatically
|| !backgroundDataUsageAllowed
+ || !uidNetworkConnected
|| !mSyncStorageEngine.getSyncAutomatically(
op.account, op.authority))) {
operationIterator.remove();