Skip to content

Commit 397d72b

Browse files
Merge pull request #12 from valueadd-poland/feature/handle_saved_instance
Feature/handle saved instance
2 parents 215b392 + 0460343 commit 397d72b

31 files changed

+200
-82
lines changed

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,5 @@ dependencies {
8282
implementation deps.androidx.material
8383
implementation deps.androidx.multidex
8484
implementation deps.androidx.annotation
85+
implementation "androidx.lifecycle:lifecycle-common:2.2.0"
8586
}

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,26 @@ import android.os.Bundle
44
import androidx.annotation.LayoutRes
55
import pl.valueadd.mvi.example.utility.dependencyinjection.DependencyUtil
66
import pl.valueadd.mvi.fragment.back.BackMviFragment
7+
import pl.valueadd.mvi.fragment.delegate.fragment.MviFragmentSaveInstanceStateDelegateImpl
78
import pl.valueadd.mvi.fragment.mvi.BaseMviPresenter
89
import pl.valueadd.mvi.fragment.mvi.IBaseView
910
import pl.valueadd.mvi.fragment.mvi.IBaseViewState
1011

1112
abstract class AbstractBackMviFragment<V : IBaseView<VS, *>, VS : IBaseViewState, VI : IBaseView.IBaseIntent, P : BaseMviPresenter<VS, *, *, V>>(@LayoutRes layoutId: Int) :
1213
BackMviFragment<V, VS, VI, P>(layoutId) {
1314

15+
protected val restoredViewState: VS?
16+
get() = mviDelegate.restoredViewState
17+
18+
@Suppress("UNCHECKED_CAST")
19+
override val mviDelegate: MviFragmentSaveInstanceStateDelegateImpl<V, VS>
20+
by lazy {
21+
MviFragmentSaveInstanceStateDelegateImpl(
22+
this as V,
23+
presenter
24+
)
25+
}
26+
1427
override fun onCreate(savedInstanceState: Bundle?) {
1528
DependencyUtil.inject(requireActivity(), this)
1629
super.onCreate(savedInstanceState)

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,26 @@ import android.os.Bundle
44
import androidx.annotation.LayoutRes
55
import pl.valueadd.mvi.example.utility.dependencyinjection.DependencyUtil
66
import pl.valueadd.mvi.fragment.base.BaseMviFragment
7+
import pl.valueadd.mvi.fragment.delegate.fragment.MviFragmentSaveInstanceStateDelegateImpl
78
import pl.valueadd.mvi.fragment.mvi.BaseMviPresenter
89
import pl.valueadd.mvi.fragment.mvi.IBaseView
910
import pl.valueadd.mvi.fragment.mvi.IBaseViewState
1011

1112
abstract class AbstractBaseMviFragment<V : IBaseView<VS, *>, VS : IBaseViewState, VI : IBaseView.IBaseIntent, P : BaseMviPresenter<VS, *, *, V>>(@LayoutRes layoutId: Int) :
1213
BaseMviFragment<V, VS, VI, P>(layoutId) {
1314

15+
protected val restoredViewState: VS?
16+
get() = mviDelegate.restoredViewState
17+
18+
@Suppress("UNCHECKED_CAST")
19+
override val mviDelegate: MviFragmentSaveInstanceStateDelegateImpl<V, VS>
20+
by lazy {
21+
MviFragmentSaveInstanceStateDelegateImpl(
22+
this as V,
23+
presenter
24+
)
25+
}
26+
1427
override fun onCreate(savedInstanceState: Bundle?) {
1528
DependencyUtil.inject(requireActivity(), this)
1629
super.onCreate(savedInstanceState)

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,12 @@ class AboutFragment :
2323
R.string.about_title
2424

2525
override fun render(state: AboutViewState) {
26-
// TODO("not implemented")
26+
// no-op
2727
}
2828

2929
override fun provideViewIntents(): List<Observable<IBaseView.IBaseIntent>> = listOf()
30+
31+
override fun provideInitialViewState(): AboutViewState {
32+
return restoredViewState ?: AboutViewState()
33+
}
3034
}

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

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

88
class AboutPresenter @Inject constructor() :
9-
BaseMviPresenter<AboutViewState, AboutViewState.PartialState, IBaseView.IBaseIntent, AboutView>(
10-
AboutViewState()
11-
) {
9+
BaseMviPresenter<AboutViewState, AboutViewState.PartialState, IBaseView.IBaseIntent, AboutView>() {
1210

1311
override fun reduce(
1412
previousState: AboutViewState,

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

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

3+
import kotlinx.android.parcel.Parcelize
34
import pl.valueadd.mvi.fragment.mvi.IBasePartialState
45
import pl.valueadd.mvi.fragment.mvi.IBaseViewState
56

7+
@Parcelize
68
class AboutViewState :
79
IBaseViewState {
810

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ class AccountFragment :
3939
destroyViewIntent
4040
)
4141

42+
override fun provideInitialViewState(): AccountViewState {
43+
return restoredViewState ?: AccountViewState()
44+
}
45+
4246
private fun provideDestroyViewIntent(): AccountView.Intent =
4347
AccountView.Intent.OnDestroyView(
4448
firstNameText.text.toString(),

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ import pl.valueadd.mvi.fragment.mvi.BaseMviPresenter
55
import javax.inject.Inject
66

77
class AccountPresenter @Inject constructor() :
8-
BaseMviPresenter<AccountViewState, AccountViewState.PartialState, AccountView.Intent, AccountView>(
9-
AccountViewState()
10-
) {
8+
BaseMviPresenter<AccountViewState, AccountViewState.PartialState, AccountView.Intent, AccountView>() {
119

1210
override fun reduce(
1311
previousState: AccountViewState,

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

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

3+
import kotlinx.android.parcel.Parcelize
34
import org.apache.commons.lang3.StringUtils
45
import pl.valueadd.mvi.fragment.mvi.IBasePartialState
56
import pl.valueadd.mvi.fragment.mvi.IBaseViewState
67

8+
@Parcelize
79
data class AccountViewState(
810
var firstName: String = StringUtils.EMPTY,
911
var surname: String = StringUtils.EMPTY,

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ class FirstFragment :
3232
initializeListeners()
3333
}
3434

35+
override fun provideInitialViewState(): FirstViewState {
36+
return restoredViewState ?: FirstViewState()
37+
}
38+
3539
override fun navigateToAboutView() {
3640
val fragment = AboutFragment.createInstance()
3741

0 commit comments

Comments
 (0)