Skip to content

Commit d076c37

Browse files
committed
Move hasHandledScan back into CardScanState
1 parent 167de2c commit d076c37

2 files changed

Lines changed: 14 additions & 5 deletions

File tree

app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/cardscanner/CardScanViewModel.kt

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,30 @@
11
package com.x8bit.bitwarden.ui.vault.feature.cardscanner
22

33
import android.os.Parcelable
4+
import androidx.lifecycle.SavedStateHandle
45
import com.bitwarden.ui.platform.base.BaseViewModel
56
import com.bitwarden.ui.platform.base.DeferredBackgroundEvent
67
import com.bitwarden.ui.platform.feature.cardscanner.manager.CardScanManager
78
import com.bitwarden.ui.platform.feature.cardscanner.util.CardScanData
89
import com.bitwarden.ui.platform.feature.cardscanner.util.CardScanResult
910
import dagger.hilt.android.lifecycle.HiltViewModel
11+
import kotlinx.coroutines.flow.update
1012
import kotlinx.parcelize.Parcelize
1113
import javax.inject.Inject
1214

15+
private const val KEY_STATE = "state"
16+
1317
/**
1418
* Handles [CardScanAction] and launches [CardScanEvent] for the [CardScanScreen].
1519
*/
1620
@HiltViewModel
1721
class CardScanViewModel @Inject constructor(
22+
savedStateHandle: SavedStateHandle,
1823
private val cardScanManager: CardScanManager,
1924
) : BaseViewModel<CardScanState, CardScanEvent, CardScanAction>(
20-
initialState = CardScanState,
25+
initialState = savedStateHandle[KEY_STATE]
26+
?: CardScanState(hasHandledScan = false),
2127
) {
22-
private var hasHandledScan = false
2328

2429
override fun handleAction(action: CardScanAction) {
2530
when (action) {
@@ -39,8 +44,8 @@ class CardScanViewModel @Inject constructor(
3944
}
4045

4146
private fun handleCardScanReceive(action: CardScanAction.CardScanReceive) {
42-
if (hasHandledScan) return
43-
hasHandledScan = true
47+
if (state.hasHandledScan) return
48+
mutableStateFlow.update { it.copy(hasHandledScan = true) }
4449
cardScanManager.emitCardScanResult(
4550
CardScanResult.Success(cardScanData = action.cardScanData),
4651
)
@@ -87,4 +92,6 @@ sealed class CardScanAction {
8792
* Represents the state of the card scan screen.
8893
*/
8994
@Parcelize
90-
data object CardScanState : Parcelable
95+
data class CardScanState(
96+
val hasHandledScan: Boolean,
97+
) : Parcelable

app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/cardscanner/CardScanViewModelTest.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.x8bit.bitwarden.ui.vault.feature.cardscanner
22

3+
import androidx.lifecycle.SavedStateHandle
34
import app.cash.turbine.test
45
import com.bitwarden.ui.platform.base.BaseViewModelTest
56
import com.bitwarden.ui.platform.feature.cardscanner.manager.CardScanManager
@@ -91,6 +92,7 @@ class CardScanViewModelTest : BaseViewModelTest() {
9192

9293
private fun createViewModel(): CardScanViewModel =
9394
CardScanViewModel(
95+
savedStateHandle = SavedStateHandle(),
9496
cardScanManager = cardScanManager,
9597
)
9698
}

0 commit comments

Comments
 (0)