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

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

Loading…
Cancel
Save