Initiate sync asynchronously

pull/795/head
Alex Baker 5 years ago
parent daad9d1fc5
commit 8d2fa406c5

@ -48,6 +48,7 @@ import com.todoroo.astrid.service.TaskCreator;
import com.todoroo.astrid.service.TaskDeleter;
import com.todoroo.astrid.service.TaskMover;
import com.todoroo.astrid.timers.TimerPlugin;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import io.reactivex.subjects.PublishSubject;
import java.util.List;
@ -132,6 +133,7 @@ public class TaskListFragment extends InjectingFragment
private PublishSubject<String> searchSubject = PublishSubject.create();
private Disposable searchDisposable;
private CompositeDisposable disposables;
/*
* ======================================================================
@ -140,7 +142,7 @@ public class TaskListFragment extends InjectingFragment
*/
private TaskListFragmentCallbackHandler callbacks;
public static TaskListFragment newTaskListFragment(Filter filter) {
static TaskListFragment newTaskListFragment(Filter filter) {
TaskListFragment fragment = new TaskListFragment();
fragment.filter = filter;
return fragment;
@ -148,9 +150,15 @@ public class TaskListFragment extends InjectingFragment
@Override
public void onRefresh() {
if (!syncAdapters.syncNow()) {
refresh();
}
disposables.add(
syncAdapters
.sync()
.subscribe(
initiated -> {
if (!initiated) {
refresh();
}
}));
}
protected void setSyncOngoing(final boolean ongoing) {
@ -436,6 +444,8 @@ public class TaskListFragment extends InjectingFragment
public void onResume() {
super.onResume();
disposables = new CompositeDisposable();
localBroadcastManager.registerRefreshReceiver(refreshReceiver);
refresh();
@ -453,6 +463,8 @@ public class TaskListFragment extends InjectingFragment
public void onPause() {
super.onPause();
disposables.dispose();
localBroadcastManager.unregisterReceiver(refreshReceiver);
}

@ -1,7 +1,8 @@
package org.tasks.sync;
import android.app.Activity;
import io.reactivex.disposables.Disposable;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import javax.inject.Inject;
import org.tasks.data.CaldavDao;
import org.tasks.gtasks.GtaskSyncAdapterHelper;
@ -21,12 +22,23 @@ public class SyncAdapters {
this.caldavDao = caldavDao;
}
public boolean syncNow() {
if (isGoogleTaskSyncEnabled() || isCaldavSyncEnabled()) {
workManager.syncNow();
return true;
}
return false;
public void syncNow() {
sync().subscribe();
}
public Single<Boolean> sync() {
return Single.zip(
Single.fromCallable(this::isGoogleTaskSyncEnabled),
Single.fromCallable(this::isCaldavSyncEnabled),
(b1, b2) -> {
if (b1 || b2) {
workManager.syncNow();
return true;
}
return false;
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public boolean isSyncEnabled() {

Loading…
Cancel
Save