package com.example.scoop.basics.rx; import android.os.Looper; import rx.Observable; import rx.Observer; import rx.Scheduler; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; import rx.schedulers.Schedulers; import rx.subscriptions.CompositeSubscription; public final class ViewSubscriptions { private final Scheduler observeOnScheduler; private final Scheduler subscribeOnScheduler; private CompositeSubscription subscriptions = new CompositeSubscription(); public ViewSubscriptions() { this.subscribeOnScheduler = Schedulers.io(); this.observeOnScheduler = AndroidSchedulers.mainThread(); } public <T> void add(Observable<T> observable, Observer<? super T> observer) { if (Looper.myLooper() != Looper.getMainLooper()) { throw new AssertionError("Must be on main thread"); } this.subscriptions.add(observable.subscribeOn(this.subscribeOnScheduler) .observeOn(this.observeOnScheduler) .unsubscribeOn(this.observeOnScheduler) .subscribe(observer)); } public <T> void add(Observable<T> observable, Action1<? super T> action) { if (Looper.myLooper() != Looper.getMainLooper()) { throw new AssertionError("Must be on main thread"); } this.subscriptions.add(observable.subscribeOn(this.subscribeOnScheduler).observeOn(this.observeOnScheduler).subscribe(action)); } public void unsubscribe() { this.subscriptions.clear(); this.subscriptions = new CompositeSubscription(); } }