Sync 1 minute after latest change

pull/820/head
Alex Baker 7 years ago
parent 1436035c94
commit 4fcf02365a

@ -174,7 +174,7 @@ public final class TaskListFragment extends InjectingFragment
public void onRefresh() { public void onRefresh() {
disposables.add( disposables.add(
syncAdapters syncAdapters
.sync() .sync(true)
.subscribe( .subscribe(
initiated -> { initiated -> {
if (!initiated) { if (!initiated) {
@ -561,7 +561,7 @@ public final class TaskListFragment extends InjectingFragment
for (Task task : tasks) { for (Task task : tasks) {
onTaskCreated(task.getUuid()); onTaskCreated(task.getUuid());
} }
syncAdapters.syncNow(); syncAdapters.sync();
} }
void onTaskCreated(String uuid) { void onTaskCreated(String uuid) {

@ -51,7 +51,7 @@ public class TaskDeleter {
public List<Task> markDeleted(List<Long> taskIds) { public List<Task> markDeleted(List<Long> taskIds) {
deletionDao.markDeleted(taskIds); deletionDao.markDeleted(taskIds);
workManager.cleanup(taskIds); workManager.cleanup(taskIds);
workManager.syncNow(); workManager.sync(false);
localBroadcastManager.broadcastRefresh(); localBroadcastManager.broadcastRefresh();
return taskDao.fetch(taskIds); return taskDao.fetch(taskIds);
} }

@ -47,7 +47,7 @@ public class TaskMover {
task.setModificationDate(now()); task.setModificationDate(now());
taskDao.save(task); taskDao.save(task);
} }
syncAdapters.syncNow(); syncAdapters.sync();
} }
public void move(Task task, Filter selectedList) { public void move(Task task, Filter selectedList) {

@ -109,7 +109,7 @@ public class AfterSaveWork extends InjectingWorker {
if ((data.getBoolean(EXTRA_PUSH_GTASKS, false) && syncAdapters.isGoogleTaskSyncEnabled()) if ((data.getBoolean(EXTRA_PUSH_GTASKS, false) && syncAdapters.isGoogleTaskSyncEnabled())
|| (data.getBoolean(EXTRA_PUSH_CALDAV, false) && syncAdapters.isCaldavSyncEnabled())) { || (data.getBoolean(EXTRA_PUSH_CALDAV, false) && syncAdapters.isCaldavSyncEnabled())) {
workManager.syncNow(); workManager.sync(false);
} }
refreshScheduler.scheduleRefresh(task); refreshScheduler.scheduleRefresh(task);

@ -94,20 +94,23 @@ public class WorkManager {
.build()); .build());
} }
public void syncNow() { public void sync(boolean immediate) {
Constraints constraints = Constraints constraints =
new Constraints.Builder() new Constraints.Builder()
.setRequiredNetworkType( .setRequiredNetworkType(
preferences.getBoolean(R.string.p_background_sync_unmetered_only, false) !immediate && preferences.getBoolean(R.string.p_background_sync_unmetered_only, false)
? NetworkType.UNMETERED ? NetworkType.UNMETERED
: NetworkType.CONNECTED) : NetworkType.CONNECTED)
.build(); .build();
OneTimeWorkRequest request = Builder builder =
new OneTimeWorkRequest.Builder(SyncWork.class) new Builder(SyncWork.class)
.setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 1, TimeUnit.MINUTES) .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 1, TimeUnit.MINUTES)
.setConstraints(constraints) .setConstraints(constraints);
.build(); if (!immediate) {
workManager.beginUniqueWork(TAG_SYNC, ExistingWorkPolicy.KEEP, request).enqueue(); builder.setInitialDelay(1, TimeUnit.MINUTES);
}
OneTimeWorkRequest request = builder.build();
workManager.beginUniqueWork(TAG_SYNC, ExistingWorkPolicy.REPLACE, request).enqueue();
} }
public void updateBackgroundSync() { public void updateBackgroundSync() {

@ -22,17 +22,17 @@ public class SyncAdapters {
this.caldavDao = caldavDao; this.caldavDao = caldavDao;
} }
public void syncNow() { public void sync() {
sync().subscribe(); sync(false).subscribe();
} }
public Single<Boolean> sync() { public Single<Boolean> sync(boolean immediate) {
return Single.zip( return Single.zip(
Single.fromCallable(this::isGoogleTaskSyncEnabled), Single.fromCallable(this::isGoogleTaskSyncEnabled),
Single.fromCallable(this::isCaldavSyncEnabled), Single.fromCallable(this::isCaldavSyncEnabled),
(b1, b2) -> { (b1, b2) -> {
if (b1 || b2) { if (b1 || b2) {
workManager.syncNow(); workManager.sync(immediate);
return true; return true;
} }
return false; return false;

Loading…
Cancel
Save