Skip to content

Commit fd09f41

Browse files
committed
save state
1 parent f2e4214 commit fd09f41

File tree

7 files changed

+49
-5
lines changed

7 files changed

+49
-5
lines changed

app/src/main/java/io/github/mrtry/todolist/app/splash/viewmodel/SplashViewModel.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@ package io.github.mrtry.todolist.app.splash.viewmodel
33
import io.github.mrtry.todolist.app.splash.ui.navigator.SplashNavigator
44
import io.github.mrtry.todolist.auth.repository.AccountRepository
55
import io.github.mrtry.todolist.di.scope.ActivityScope
6+
import io.github.mrtry.todolist.misc.ui.viewmodel.ViewModel
67
import javax.inject.Inject
78

89
@ActivityScope
910
class SplashViewModel
1011
@Inject constructor(
1112
private val authenticationClient: AccountRepository,
1213
private val navigator: SplashNavigator
13-
) {
14+
) : ViewModel {
1415
fun ensuredLoggedIn() {
1516
when (authenticationClient.isLoggedIn()) {
1617
true -> navigator.navigateToToDo()

app/src/main/java/io/github/mrtry/todolist/app/todo/ui/EditTaskDialogFragment.kt

+9
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ class EditTaskDialogFragment : DialogFragment(), Injectable<EditTaskComponent>,
7171
.plusEditTaskComponent(FragmentModule(this))
7272
component.inject(this)
7373

74+
savedInstanceState?.let {
75+
viewModel.onRestoreInstanceState(it)
76+
}
77+
7478
with(viewBinding) {
7579
viewModel = this@EditTaskDialogFragment.viewModel
7680
lifecycleOwner = this@EditTaskDialogFragment
@@ -114,6 +118,11 @@ class EditTaskDialogFragment : DialogFragment(), Injectable<EditTaskComponent>,
114118
)
115119
}
116120

121+
override fun onSaveInstanceState(outState: Bundle) {
122+
super.onSaveInstanceState(outState)
123+
viewModel.onSaveInstanceState(outState)
124+
}
125+
117126
override fun onStop() {
118127
super.onStop()
119128
coroutineScope.coroutineContext.cancelChildren()

app/src/main/java/io/github/mrtry/todolist/app/todo/viewmodel/EditTaskViewModel.kt

+24-1
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,54 @@
11
package io.github.mrtry.todolist.app.todo.viewmodel
22

3+
import android.os.Bundle
34
import androidx.lifecycle.MutableLiveData
45
import io.github.mrtry.todolist.R
56
import io.github.mrtry.todolist.app.todo.ui.EditTaskDialogFragmentValueHolder
67
import io.github.mrtry.todolist.app.todo.ui.navigator.EditTaskNavigator
78
import io.github.mrtry.todolist.di.scope.FragmentScope
89
import io.github.mrtry.todolist.misc.extension.requireValue
10+
import io.github.mrtry.todolist.misc.ui.viewmodel.ViewModel
911
import io.github.mrtry.todolist.task.domainservice.TaskDomainService
1012
import kotlinx.coroutines.CancellationException
1113
import kotlinx.coroutines.CoroutineScope
1214
import kotlinx.coroutines.launch
1315
import timber.log.Timber
1416
import javax.inject.Inject
1517

18+
private const val KEY_TITLE = "KEY_TITLE"
19+
private const val KEY_DESCRIPTION = "KEY_DESCRIPTION"
20+
1621
@FragmentScope
1722
class EditTaskViewModel
1823
@Inject constructor(
1924
private val domainService: TaskDomainService,
2025
private val navigator: EditTaskNavigator,
2126
private val valueHolder: EditTaskDialogFragmentValueHolder,
2227
private val coroutineScope: CoroutineScope
23-
) {
28+
) : ViewModel {
2429
val title: MutableLiveData<String> = MutableLiveData(valueHolder.task.title)
2530
val description: MutableLiveData<String> = MutableLiveData(valueHolder.task.description)
2631

2732
val isSaving: MutableLiveData<Boolean> = MutableLiveData(false)
2833

34+
override fun onSaveInstanceState(outState: Bundle) {
35+
with(outState) {
36+
putString(KEY_TITLE, title.requireValue())
37+
putString(KEY_DESCRIPTION, description.requireValue())
38+
}
39+
}
40+
41+
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
42+
with(savedInstanceState) {
43+
getString(KEY_TITLE).also {
44+
title.value = it
45+
}
46+
getString(KEY_DESCRIPTION).also {
47+
description.value = it
48+
}
49+
}
50+
}
51+
2952
fun onSaveClick() {
3053
val task = valueHolder.task.copy(
3154
title = title.requireValue(),

app/src/main/java/io/github/mrtry/todolist/app/todo/viewmodel/TaskViewModel.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import io.github.mrtry.todolist.R
99
import io.github.mrtry.todolist.app.todo.ui.navigator.ToDoNavigator
1010
import io.github.mrtry.todolist.di.scope.ActivityScope
1111
import io.github.mrtry.todolist.misc.extension.requireValue
12+
import io.github.mrtry.todolist.misc.ui.viewmodel.ViewModel
1213
import io.github.mrtry.todolist.task.domainservice.TaskDomainService
1314
import io.github.mrtry.todolist.task.entity.Task
1415
import kotlinx.coroutines.CancellationException
@@ -23,7 +24,7 @@ class TaskViewModel
2324
private val navigator: ToDoNavigator,
2425
private val domainService: TaskDomainService,
2526
private val coroutineScope: CoroutineScope
26-
) : TextView.OnEditorActionListener {
27+
) : ViewModel, TextView.OnEditorActionListener {
2728
val taskName: MutableLiveData<String> = MutableLiveData("")
2829
val isSaving: MutableLiveData<Boolean> = MutableLiveData(false)
2930

app/src/main/java/io/github/mrtry/todolist/app/todo/viewmodel/ToDoListItemViewModel.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import io.github.mrtry.todolist.R
77
import io.github.mrtry.todolist.app.todo.ui.navigator.ToDoNavigator
88
import io.github.mrtry.todolist.misc.extension.observeNonNull
99
import io.github.mrtry.todolist.misc.extension.requireValue
10+
import io.github.mrtry.todolist.misc.ui.viewmodel.ViewModel
1011
import io.github.mrtry.todolist.task.domainservice.TaskDomainService
1112
import io.github.mrtry.todolist.task.entity.Task
1213
import kotlinx.coroutines.CancellationException
@@ -20,7 +21,7 @@ class ToDoListItemViewModel(
2021
private val navigator: ToDoNavigator,
2122
private val domainService: TaskDomainService,
2223
private val coroutineScope: CoroutineScope
23-
) {
24+
) : ViewModel {
2425
val task: MutableLiveData<Task> = MutableLiveData(task)
2526
val isComplete: MutableLiveData<Boolean> = MutableLiveData(task.isComplete)
2627
val isSaving: MutableLiveData<Boolean> = MutableLiveData(false)

app/src/main/java/io/github/mrtry/todolist/app/todo/viewmodel/ToDoViewModel.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import io.github.mrtry.todolist.app.todo.ui.navigator.ToDoNavigator
99
import io.github.mrtry.todolist.app.todo.viewmodel.converter.ToDoListItemViewModelConverter
1010
import io.github.mrtry.todolist.di.scope.ActivityScope
1111
import io.github.mrtry.todolist.misc.ui.viewmodel.ToolbarViewModel
12+
import io.github.mrtry.todolist.misc.ui.viewmodel.ViewModel
1213
import io.github.mrtry.todolist.task.domainservice.TaskDomainService
1314
import kotlinx.coroutines.CancellationException
1415
import kotlinx.coroutines.CoroutineScope
@@ -26,7 +27,7 @@ class ToDoViewModel
2627
private val taskDomainService: TaskDomainService,
2728
private val converter: ToDoListItemViewModelConverter,
2829
private val coroutineScope: CoroutineScope
29-
) : SwipeRefreshLayout.OnRefreshListener {
30+
) : ViewModel, SwipeRefreshLayout.OnRefreshListener {
3031
val isRefreshing: MutableLiveData<Boolean> = MutableLiveData(false)
3132
val showEmptyStatus: MutableLiveData<Boolean> = MutableLiveData(false)
3233

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package io.github.mrtry.todolist.misc.ui.viewmodel
2+
3+
import android.os.Bundle
4+
5+
interface ViewModel {
6+
fun onSaveInstanceState(outState: Bundle) {}
7+
fun onRestoreInstanceState(savedInstanceState: Bundle) {}
8+
}

0 commit comments

Comments
 (0)