package j4ckall.rxflux.ui; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; import io.reactivex.subjects.BehaviorSubject; import io.reactivex.subjects.Subject; import j4ckall.rxflux.App; import j4ckall.rxflux.lib.flux.Store; /** * MainActivityの状態を保持するクラス * * @author matsumoto_k */ public class MainStore extends Store { private Subject<Integer> countSubject = BehaviorSubject.<Integer>create().toSerialized(); private Observable<Integer> count = countSubject.hide().scan((sum, num) -> sum += num); private boolean initialize = false; public MainStore() { super(App.getDispatcher()); getDispatchObservable(MainAction.COUNT_UP) .subscribeOn(Schedulers.computation()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(action -> { countSubject.onNext((Integer) action.value); }); getDispatchObservable(MainAction.COUNT_DOWN) .subscribeOn(Schedulers.computation()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(action -> { countSubject.onNext((Integer) action.value); }); getDispatchObservable(MainAction.INITIALIZE) .subscribeOn(Schedulers.computation()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(action -> { if (!initialize) { countSubject.onNext((Integer) action.value); initialize = true; } }); // TODO:DispatchからObservableを受け取るのかDispatchに対してSubscriberを設定するのかどちらが良いのか調べる // on(MainAction.COUNT_UP, action -> { // countSubject.onNext((Integer) action.value); // }); // // on(MainAction.COUNT_DOWN, action -> { // countSubject.onNext((Integer) action.value); // }); // // on(MainAction.INITIALIZE, action -> { // countSubject.onNext((Integer) action.value); // }); } public Observable<Integer> getCount() { return count; } }