Skip to content

Instantly share code, notes, and snippets.

View matdziu's full-sized avatar

Mateusz Dziubek matdziu

View GitHub Profile
override fun render(mainViewState: MainViewState) {
Log.d("MVIState", "New state rendered!")
with(mainViewState) {
showProgressBar(progress)
showError(error)
showRocketList(rocketList)
}
}
override fun emitButtonClick(): Observable<Boolean> = buttonClickSubject
override fun onCreate(savedInstanceState: Bundle?) {
...
showMeRocketsButton.setOnClickListener { buttonClickSubject.onNext(true) }
}
class MainActivity : AppCompatActivity(), MainView {
...
private val buttonClickSubject = PublishSubject.create<Boolean>()
private fun reduce(previousState: MainViewState, partialState: PartialMainViewState): MainViewState {
return partialState.reduce(previousState)
}
object ProgressState : PartialMainViewState() {
override fun reduce(previousState: MainViewState) = MainViewState(progress = true)
}
object ErrorState : PartialMainViewState() {
override fun reduce(previousState: MainViewState) = MainViewState(error = true)
}
class ListFetchedState(private val rocketList: List<Rocket>) : PartialMainViewState() {
override fun reduce(previousState: MainViewState) = MainViewState(rocketList = rocketList)
sealed class PartialMainViewState {
abstract fun reduce(previousState: MainViewState): MainViewState
sealed class PartialMainViewState {
object ProgressState : PartialMainViewState()
object ErrorState : PartialMainViewState()
class ListFetchedState(val rocketList: List<Rocket>) : PartialMainViewState()
}
private fun reduce(previousState: EventProfileViewState, partialState: PartialEventProfileViewState)
: EventProfileViewState {
return when (partialState) {
is PartialEventProfileViewState.ProgressState ->
previousState.copy(
progress = true)
is PartialEventProfileViewState.ErrorState ->
previousState.copy(
progress = false,
error = true,
class MainPresenter(private val mainInteractor: MainInteractor) {
private val compositeDisposable = CompositeDisposable()
private val stateSubject = BehaviorSubject.createDefault(MainViewState())
fun bind(mainView: MainView) {
val buttonClickObservable = mainView.emitButtonClick()
.flatMap { mainInteractor.fetchRocketList().startWith(PartialMainViewState.ProgressState) }
val mergedIntentsObservable = Observable.merge(listOf(buttonClickObservable))