Skip to content

Commit 9d85c07

Browse files
feat(mvi-presenter) Added view effects
1 parent 42b96cf commit 9d85c07

File tree

29 files changed

+271
-99
lines changed

29 files changed

+271
-99
lines changed

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ dependencies {
8585
implementation deps.androidx.appcompat
8686
implementation deps.androidx.core_ktx
8787
implementation deps.androidx.constraint_layout
88+
implementation deps.androidx.coordinator_layout
8889
implementation deps.androidx.recycler_view
8990
implementation deps.androidx.material
9091
implementation deps.androidx.multidex

app/src/main/java/pl/valueadd/mvi/example/presentation/base/AbstractBaseMviFragment.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,13 @@ import pl.valueadd.mvi.fragment.delegate.fragment.MviFragmentSaveInstanceStateDe
1313
import pl.valueadd.mvi.presenter.BaseMviPresenter
1414
import pl.valueadd.mvi.presenter.IBaseView
1515

16-
abstract class AbstractBaseMviFragment<V : IBaseView<VS, *>, VS : IBaseViewState, VI : IBaseView.IBaseIntent, P : BaseMviPresenter<VS, *, *, V>, Binding : ViewBinding> :
17-
BaseMviFragment<V, VS, VI, P, Binding>() {
16+
abstract class AbstractBaseMviFragment<
17+
V : IBaseView<VS, *, *>,
18+
VS : IBaseViewState,
19+
VI : IBaseView.IBaseIntent,
20+
VE : IBaseView.IBaseEffect,
21+
P : BaseMviPresenter<VS, *, *, *, V>,
22+
Binding : ViewBinding> : BaseMviFragment<V, VS, VI, VE, P, Binding>() {
1823

1924
protected val restoredViewState: VS?
2025
get() = mviDelegate.restoredViewState

app/src/main/java/pl/valueadd/mvi/example/presentation/base/AbstractPresenter.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import pl.valueadd.mvi.presenter.IBasePartialState
77
import pl.valueadd.mvi.presenter.IBaseView
88
import pl.valueadd.mvi.presenter.IBaseViewState
99

10-
abstract class AbstractPresenter<VS : IBaseViewState, PS : IBasePartialState, VI : IBaseView.IBaseIntent, V : IBaseView<VS, VI>> :
11-
BaseMviPresenter<VS, PS, VI, V>(AndroidSchedulers.mainThread()) {
10+
abstract class AbstractPresenter<VS : IBaseViewState, PS : IBasePartialState, VI : IBaseView.IBaseIntent, VE : IBaseView.IBaseEffect, V : IBaseView<VS, VI, VE>> :
11+
BaseMviPresenter<VS, PS, VI, VE, V>(AndroidSchedulers.mainThread()) {
1212

1313
override fun onError(throwable: Throwable) {
1414
super.onError(throwable)

app/src/main/java/pl/valueadd/mvi/example/presentation/main/about/AboutFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import pl.valueadd.mvi.presenter.IBaseView
1111
import javax.inject.Inject
1212

1313
class AboutFragment :
14-
AbstractBaseMviFragment<AboutView, AboutViewState, IBaseView.IBaseIntent, AboutPresenter, FragmentAboutBinding>(),
14+
AbstractBaseMviFragment<AboutView, AboutViewState, IBaseView.IBaseIntent, IBaseView.IBaseEffect, AboutPresenter, FragmentAboutBinding>(),
1515
AboutView {
1616

1717
override val bindingInflater: FragmentBindingInflater<FragmentAboutBinding>

app/src/main/java/pl/valueadd/mvi/example/presentation/main/about/AboutPresenter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import pl.valueadd.mvi.presenter.IBaseView
66
import javax.inject.Inject
77

88
class AboutPresenter @Inject constructor() :
9-
AbstractPresenter<AboutViewState, AboutViewState.PartialState, IBaseView.IBaseIntent, AboutView>() {
9+
AbstractPresenter<AboutViewState, AboutViewState.PartialState, IBaseView.IBaseIntent, IBaseView.IBaseEffect, AboutView>() {
1010

1111
override fun reduce(
1212
previousState: AboutViewState,

app/src/main/java/pl/valueadd/mvi/example/presentation/main/about/AboutView.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ package pl.valueadd.mvi.example.presentation.main.about
33
import pl.valueadd.mvi.presenter.IBaseView
44

55
interface AboutView :
6-
IBaseView<AboutViewState, IBaseView.IBaseIntent>
6+
IBaseView<AboutViewState, IBaseView.IBaseIntent, IBaseView.IBaseEffect>

app/src/main/java/pl/valueadd/mvi/example/presentation/main/account/AccountFragment.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ import pl.valueadd.mvi.example.presentation.base.AbstractBaseMviFragment
99
import pl.valueadd.mvi.example.utility.extension.applyTextChanges
1010
import pl.valueadd.mvi.fragment.base.FragmentBindingInflater
1111
import pl.valueadd.mvi.fragment.delegate.destroyview.DestroyViewIntentDelegate
12+
import pl.valueadd.mvi.presenter.IBaseView
1213
import javax.inject.Inject
1314

1415
class AccountFragment :
15-
AbstractBaseMviFragment<AccountView, AccountViewState, AccountView.Intent, AccountPresenter, FragmentAccountBinding>(),
16+
AbstractBaseMviFragment<AccountView, AccountViewState, AccountView.Intent, IBaseView.IBaseEffect, AccountPresenter, FragmentAccountBinding>(),
1617
AccountView {
1718

1819
@Inject

app/src/main/java/pl/valueadd/mvi/example/presentation/main/account/AccountPresenter.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ package pl.valueadd.mvi.example.presentation.main.account
22

33
import io.reactivex.Observable
44
import pl.valueadd.mvi.example.presentation.base.AbstractPresenter
5+
import pl.valueadd.mvi.presenter.IBaseView
56
import javax.inject.Inject
67

78
class AccountPresenter @Inject constructor() :
8-
AbstractPresenter<AccountViewState, AccountViewState.PartialState, AccountView.Intent, AccountView>() {
9+
AbstractPresenter<AccountViewState, AccountViewState.PartialState, AccountView.Intent, IBaseView.IBaseEffect, AccountView>() {
910

1011
override fun reduce(
1112
previousState: AccountViewState,

app/src/main/java/pl/valueadd/mvi/example/presentation/main/account/AccountView.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package pl.valueadd.mvi.example.presentation.main.account
33
import pl.valueadd.mvi.presenter.IBaseView
44

55
interface AccountView :
6-
IBaseView<AccountViewState, AccountView.Intent> {
6+
IBaseView<AccountViewState, AccountView.Intent, IBaseView.IBaseEffect> {
77

88
sealed class Intent : IBaseView.IBaseIntent {
99
data class OnDestroyView(

app/src/main/java/pl/valueadd/mvi/example/presentation/main/first/FirstFragment.kt

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package pl.valueadd.mvi.example.presentation.main.first
33
import android.os.Bundle
44
import android.view.View
55
import androidx.navigation.fragment.findNavController
6+
import com.google.android.material.snackbar.Snackbar
67
import io.reactivex.Observable
78
import pl.valueadd.mvi.example.R
89
import pl.valueadd.mvi.example.databinding.FragmentFirstBinding
@@ -13,7 +14,7 @@ import pl.valueadd.mvi.fragment.base.FragmentBindingInflater
1314
import javax.inject.Inject
1415

1516
class FirstFragment :
16-
AbstractBaseMviFragment<FirstView, FirstViewState, FirstView.Intent, FirstPresenter, FragmentFirstBinding>(),
17+
AbstractBaseMviFragment<FirstView, FirstViewState, FirstView.Intent, FirstView.Effect, FirstPresenter, FragmentFirstBinding>(),
1718
FirstView {
1819

1920
@Inject
@@ -34,15 +35,19 @@ class FirstFragment :
3435
return restoredViewState ?: FirstViewState()
3536
}
3637

37-
override fun navigateToAboutView() {
38-
findNavController().navigate(R.id.action_firstFragment_to_aboutFragment)
39-
}
40-
4138
override fun render(state: FirstViewState): Unit = with(requireBinding) {
4239
counterText.text = state.count.toString()
4340
resultValueText.text = state.value
4441
}
4542

43+
override fun handleViewEffect(effect: FirstView.Effect) {
44+
when (effect) {
45+
is FirstView.Effect.ShowMessage -> Snackbar
46+
.make(requireBinding.firstFragmentLinearLayout, effect.message, Snackbar.LENGTH_SHORT)
47+
.show()
48+
}
49+
}
50+
4651
override fun provideViewIntents(): List<Observable<FirstView.Intent>> = listOf(
4752
increaseCount(),
4853
decreaseCount(),
@@ -69,4 +74,8 @@ class FirstFragment :
6974
.throttleClicks()
7075
.onSuccess(disposables, { navigateToAboutView() })
7176
}
77+
78+
private fun navigateToAboutView() {
79+
findNavController().navigate(R.id.action_firstFragment_to_aboutFragment)
80+
}
7281
}

0 commit comments

Comments
 (0)