diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java index e9aca357f..c8e5effa2 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java @@ -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 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); } diff --git a/app/src/main/java/org/tasks/sync/SyncAdapters.java b/app/src/main/java/org/tasks/sync/SyncAdapters.java index c28a4586f..4b219e034 100644 --- a/app/src/main/java/org/tasks/sync/SyncAdapters.java +++ b/app/src/main/java/org/tasks/sync/SyncAdapters.java @@ -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 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() {