@@ -22,7 +22,7 @@ import androidx.appcompat.app.AppCompatActivity
22
22
import androidx.lifecycle.Lifecycle
23
23
import androidx.lifecycle.flowWithLifecycle
24
24
import androidx.lifecycle.lifecycleScope
25
- import com.google.firebase.dataconnect.minimaldemo.MainActivityViewModel.State. OperationState
25
+ import com.google.firebase.dataconnect.minimaldemo.MainActivityViewModel.OperationState
26
26
import com.google.firebase.dataconnect.minimaldemo.databinding.ActivityMainBinding
27
27
import kotlinx.coroutines.flow.collectLatest
28
28
import kotlinx.coroutines.launch
@@ -47,7 +47,9 @@ class MainActivity : AppCompatActivity() {
47
47
viewBinding.debugLoggingCheckBox.setOnCheckedChangeListener(debugLoggingOnCheckedChangeListener)
48
48
49
49
lifecycleScope.launch {
50
- viewModel.state.flowWithLifecycle(lifecycle).collectLatest(::collectViewModelState)
50
+ viewModel.stateSequenceNumber.flowWithLifecycle(lifecycle).collectLatest {
51
+ onViewModelStateChange()
52
+ }
51
53
}
52
54
}
53
55
@@ -59,13 +61,13 @@ class MainActivity : AppCompatActivity() {
59
61
}
60
62
}
61
63
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
65
67
viewBinding.getItemButton.isEnabled =
66
- state .isGetOperationRunnable && ! state .isGetOperationInProgress
68
+ viewModel .isGetOperationRunnable && ! viewModel .isGetOperationInProgress
67
69
viewBinding.deleteItemButton.isEnabled =
68
- state .isDeleteOperationRunnable && ! state .isDeleteOperationInProgress
70
+ viewModel .isDeleteOperationRunnable && ! viewModel .isDeleteOperationInProgress
69
71
}
70
72
71
73
private val debugLoggingOnCheckedChangeListener = OnCheckedChangeListener { _, isChecked ->
@@ -86,27 +88,28 @@ class MainActivity : AppCompatActivity() {
86
88
87
89
companion object {
88
90
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
91
93
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
94
96
95
- private val MainActivityViewModel .State .isGetOperationRunnable : Boolean
96
- get() = lastInsertedKey != = null
97
+ private val MainActivityViewModel .isDeleteOperationInProgress : Boolean
98
+ get() = deleteState is OperationState . InProgress
97
99
98
- private val MainActivityViewModel .State .isDeleteOperationInProgress : Boolean
99
- get() = deleteItem is OperationState . InProgress
100
+ private val MainActivityViewModel .isGetOperationRunnable : Boolean
101
+ get() = lastInsertedKey != = null
100
102
101
- private val MainActivityViewModel .State . isDeleteOperationRunnable: Boolean
103
+ private val MainActivityViewModel .isDeleteOperationRunnable: Boolean
102
104
get() = lastInsertedKey != = null
103
105
104
- private val MainActivityViewModel .State . progressText: String?
106
+ private val MainActivityViewModel .progressText: String?
105
107
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
110
113
val state =
111
114
listOfNotNull(insertState, getState, deleteState).maxByOrNull { it.sequenceNumber }
112
115
0 commit comments