Skip to content

Commit e72edb3

Browse files
committed
further simplify view model
1 parent a69dd89 commit e72edb3

File tree

2 files changed

+80
-191
lines changed

2 files changed

+80
-191
lines changed

firebase-dataconnect/demo/src/main/kotlin/com/google/firebase/dataconnect/minimaldemo/MainActivity.kt

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import androidx.appcompat.app.AppCompatActivity
2222
import androidx.lifecycle.Lifecycle
2323
import androidx.lifecycle.flowWithLifecycle
2424
import androidx.lifecycle.lifecycleScope
25-
import com.google.firebase.dataconnect.minimaldemo.MainActivityViewModel.State.OperationState
25+
import com.google.firebase.dataconnect.minimaldemo.MainActivityViewModel.OperationState
2626
import com.google.firebase.dataconnect.minimaldemo.databinding.ActivityMainBinding
2727
import kotlinx.coroutines.flow.collectLatest
2828
import kotlinx.coroutines.launch
@@ -47,7 +47,9 @@ class MainActivity : AppCompatActivity() {
4747
viewBinding.debugLoggingCheckBox.setOnCheckedChangeListener(debugLoggingOnCheckedChangeListener)
4848

4949
lifecycleScope.launch {
50-
viewModel.state.flowWithLifecycle(lifecycle).collectLatest(::collectViewModelState)
50+
viewModel.stateSequenceNumber.flowWithLifecycle(lifecycle).collectLatest {
51+
onViewModelStateChange()
52+
}
5153
}
5254
}
5355

@@ -59,13 +61,13 @@ class MainActivity : AppCompatActivity() {
5961
}
6062
}
6163

62-
private fun collectViewModelState(state: MainActivityViewModel.State) {
63-
viewBinding.progressText.text = state.progressText
64-
viewBinding.insertItemButton.isEnabled = !state.isInsertOperationInProgress
64+
private fun onViewModelStateChange() {
65+
viewBinding.progressText.text = viewModel.progressText
66+
viewBinding.insertItemButton.isEnabled = !viewModel.isInsertOperationInProgress
6567
viewBinding.getItemButton.isEnabled =
66-
state.isGetOperationRunnable && !state.isGetOperationInProgress
68+
viewModel.isGetOperationRunnable && !viewModel.isGetOperationInProgress
6769
viewBinding.deleteItemButton.isEnabled =
68-
state.isDeleteOperationRunnable && !state.isDeleteOperationInProgress
70+
viewModel.isDeleteOperationRunnable && !viewModel.isDeleteOperationInProgress
6971
}
7072

7173
private val debugLoggingOnCheckedChangeListener = OnCheckedChangeListener { _, isChecked ->
@@ -86,27 +88,28 @@ class MainActivity : AppCompatActivity() {
8688

8789
companion object {
8890

89-
private val MainActivityViewModel.State.isInsertOperationInProgress: Boolean
90-
get() = insertItem is OperationState.InProgress
91+
private val MainActivityViewModel.isInsertOperationInProgress: Boolean
92+
get() = insertState is OperationState.InProgress
9193

92-
private val MainActivityViewModel.State.isGetOperationInProgress: Boolean
93-
get() = getItem is OperationState.InProgress
94+
private val MainActivityViewModel.isGetOperationInProgress: Boolean
95+
get() = getState is OperationState.InProgress
9496

95-
private val MainActivityViewModel.State.isGetOperationRunnable: Boolean
96-
get() = lastInsertedKey !== null
97+
private val MainActivityViewModel.isDeleteOperationInProgress: Boolean
98+
get() = deleteState is OperationState.InProgress
9799

98-
private val MainActivityViewModel.State.isDeleteOperationInProgress: Boolean
99-
get() = deleteItem is OperationState.InProgress
100+
private val MainActivityViewModel.isGetOperationRunnable: Boolean
101+
get() = lastInsertedKey !== null
100102

101-
private val MainActivityViewModel.State.isDeleteOperationRunnable: Boolean
103+
private val MainActivityViewModel.isDeleteOperationRunnable: Boolean
102104
get() = lastInsertedKey !== null
103105

104-
private val MainActivityViewModel.State.progressText: String?
106+
private val MainActivityViewModel.progressText: String?
105107
get() {
106-
val insertState = insertItem as? OperationState.SequencedOperationState
107-
val getState = getItem as? OperationState.SequencedOperationState
108-
val deleteState = deleteItem as? OperationState.SequencedOperationState
109-
108+
// Save properties to local variables to enable Kotlin's type narrowing in the "if" blocks
109+
// below.
110+
val insertState = insertState
111+
val getState = getState
112+
val deleteState = deleteState
110113
val state =
111114
listOfNotNull(insertState, getState, deleteState).maxByOrNull { it.sequenceNumber }
112115

0 commit comments

Comments
 (0)