Skip to content

Instantly share code, notes, and snippets.

@ActivityScoped
class SuccessPresenter @Inject constructor(val dispatcher: Dispatcher) :
BasePresenter<SuccessMVPView>() {
override fun attachView(mvpView: SuccessMVPView, lifecycle: Lifecycle) {
super.attachView(mvpView, lifecycle)
dispatcher.showingSuccess()
.subscribe({ bindData((it as Showing.Success).successMetaData) },
{ Timber.e(it) })
dispatcher
.showing()
API.submit(request) }
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.subscribe({
Timber.e("Submit:Success:" + it.success)
if (it.success) {
dispatcher.dispatchShow(Showing.Success(resultData))
} else {
dispatcher.dispatchShow(Showing.Failure(resultData))
}
disposables.add(dispatcher.arTargetFound()
.subscribeOn(Schedulers.io())
.observeOn(scheduler)
.subscribe({ mvpView.targetAcquired() }, { Timber.e(it) }))
disposables.add(dispatcher.arTargetLost()
.subscribeOn(Schedulers.io())
.observeOn(scheduler)
.subscribe({ mvpView.targetLost() }, { Timber.e(it) }))
disposables.add(dispatcher.showingArView()
.subscribeOn(scheduler)
.observeOn(scheduler)
.subscribe({ mvpView.show() }, { Timber.e(it) }))
disposables.add(dispatcher
.showing()
.filter{(it !is Showing.ArView)}
.observeOn(scheduler)
override fun attachView(mvpView: AR, lifecycle: Lifecycle) {
super.attachView(mvpView, lifecycle)
disposables.add(dispatcher.showingArView()
.subscribeOn(scheduler)
.subscribe({ mvpView.showArView() }, { Timber.e(it) }))
disposables.add(dispatcher
.showing()
.filter{(it !is Showing.ArView)}
.observeOn(scheduler)
sealed class State {
data class ResolvingTarget(var resolveRequestData: ResolveRequestData) : State()
object BackStackEmpty : State()
object BeginCameraReveal: State()
}
sealed class Showing : State() {
object Landing : Showing()
object ArView : Showing()
data class NoNetwork(var resolveRequestData: ResolveRequestData) : Showing()
@Singleton
class Dispatcher @Inject
constructor(val stateSubject: PublishSubject<State>) {
val showEvents: Stack<State> = Stack()
fun dispatch(state: State) = stateSubject.onNext(state)
fun dispatchShow(state: State) {
showEvents.push(state)
override fun attachView(mvpView: NoNetworkMVPView, lifecycle: Lifecycle) {
super.attachView(mvpView, lifecycle)
dispatcher.noNetwork()
.observeOn(scheduler)
.subscribe { mvpView.show() }
dispatcher
.showing()
.filter { it !is Showing.NoNetwork }
.subscribe { mvpView.hide() }
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
override fun detachView() {
disposables.clear()
mvpView = null
}
override fun attachView(mvpView: NoNetworkMVPView, lifecycle: Lifecycle){
lifecycle.addObserver(this)
...
}