diff --git a/app/src/main/java/org/tasks/ui/ActionViewModel.java b/app/src/main/java/org/tasks/ui/ActionViewModel.java index a3e5e8574..ae6784ca9 100644 --- a/app/src/main/java/org/tasks/ui/ActionViewModel.java +++ b/app/src/main/java/org/tasks/ui/ActionViewModel.java @@ -7,12 +7,14 @@ import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import io.reactivex.Completable; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.CompositeDisposable; import io.reactivex.functions.Action; import io.reactivex.schedulers.Schedulers; public class ActionViewModel extends ViewModel { - private MutableLiveData completed = new MutableLiveData<>(); - private MutableLiveData error = new MutableLiveData<>(); + private final MutableLiveData completed = new MutableLiveData<>(); + private final MutableLiveData error = new MutableLiveData<>(); + private final CompositeDisposable disposables = new CompositeDisposable(); private boolean inProgress; public LiveData getData() { @@ -32,16 +34,21 @@ public class ActionViewModel extends ViewModel { if (!inProgress) { inProgress = true; - Completable.fromAction(action) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .doOnComplete(() -> completed.setValue(true)) - .doOnError(error::setValue) - .doFinally(() -> { - assertMainThread(); - inProgress = false; - }) - .subscribe(); + disposables.add( + Completable.fromAction(action) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .doFinally( + () -> { + assertMainThread(); + inProgress = false; + }) + .subscribe(() -> completed.setValue(true), error::setValue)); } } + + @Override + protected void onCleared() { + disposables.clear(); + } } diff --git a/app/src/main/java/org/tasks/ui/CompletableViewModel.java b/app/src/main/java/org/tasks/ui/CompletableViewModel.java index 946130895..d4cf5c227 100644 --- a/app/src/main/java/org/tasks/ui/CompletableViewModel.java +++ b/app/src/main/java/org/tasks/ui/CompletableViewModel.java @@ -7,12 +7,14 @@ import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import io.reactivex.Single; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.CompositeDisposable; import io.reactivex.schedulers.Schedulers; import java.util.concurrent.Callable; public abstract class CompletableViewModel extends ViewModel { - private MutableLiveData data = new MutableLiveData<>(); - private MutableLiveData error = new MutableLiveData<>(); + private final MutableLiveData data = new MutableLiveData<>(); + private final MutableLiveData error = new MutableLiveData<>(); + private final CompositeDisposable disposables = new CompositeDisposable(); private boolean inProgress; public LiveData getData() { @@ -32,16 +34,21 @@ public abstract class CompletableViewModel extends ViewModel { if (!inProgress) { inProgress = true; - Single.fromCallable(callable) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .doOnSuccess(data::setValue) - .doOnError(error::setValue) - .doFinally(() -> { - assertMainThread(); - inProgress = false; - }) - .subscribe(); + disposables.add( + Single.fromCallable(callable) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .doFinally( + () -> { + assertMainThread(); + inProgress = false; + }) + .subscribe(data::setValue, error::setValue)); } } + + @Override + protected void onCleared() { + disposables.dispose(); + } }