Fix for syncs being dropped when appIdle is on

Syncs were being dropped when appIdleMode was on for
an app. This CL backs off the sync instead of dropping
it. When the app becomes non-idle, backoff is cleared
and the sync is performed.

Bug: 26355386
Change-Id: I2040dfd847011d3ca902e66a8cd52b2a429177c1
This commit is contained in:
Shreyas Basarge
2016-01-11 15:43:54 +00:00
parent 198ce1a5e6
commit 2c051498b2

View File

@@ -2682,6 +2682,31 @@ public class SyncManager {
}
continue;
}
String packageName = getPackageName(op.target);
ApplicationInfo ai = null;
if (packageName != null) {
try {
ai = mContext.getPackageManager().getApplicationInfo(packageName,
PackageManager.GET_UNINSTALLED_PACKAGES
| PackageManager.GET_DISABLED_COMPONENTS);
} catch (NameNotFoundException e) {
operationIterator.remove();
mSyncStorageEngine.deleteFromPending(op.pendingOperation);
continue;
}
}
// If app is considered idle, then skip for now and backoff
if (ai != null
&& mAppIdleMonitor.isAppIdle(packageName, ai.uid, op.target.userId)) {
increaseBackoffSetting(op);
op.appIdle = true;
if (isLoggable) {
Log.v(TAG, "Sync backing off idle app " + packageName);
}
continue;
} else {
op.appIdle = false;
}
if (!isOperationValidLocked(op)) {
operationIterator.remove();
mSyncStorageEngine.deleteFromPending(op.pendingOperation);
@@ -2700,28 +2725,6 @@ public class SyncManager {
}
continue;
}
String packageName = getPackageName(op.target);
ApplicationInfo ai = null;
if (packageName != null) {
try {
ai = mContext.getPackageManager().getApplicationInfo(packageName,
PackageManager.GET_UNINSTALLED_PACKAGES
| PackageManager.GET_DISABLED_COMPONENTS);
} catch (NameNotFoundException e) {
}
}
// If app is considered idle, then skip for now and backoff
if (ai != null
&& mAppIdleMonitor.isAppIdle(packageName, ai.uid, op.target.userId)) {
increaseBackoffSetting(op);
op.appIdle = true;
if (isLoggable) {
Log.v(TAG, "Sync backing off idle app " + packageName);
}
continue;
} else {
op.appIdle = false;
}
// Add this sync to be run.
operations.add(op);
}