Skip to content

Commit 167de2c

Browse files
committed
Simplify CardScanViewModel state and update flag key
Move hasHandledScan from Parcelable state to a private var since it is internal bookkeeping, not UI state. Update flag key name to pm-34171-card-scanner. Add OmitFromCoverage to navigation, fix minor formatting.
1 parent 1d7dde7 commit 167de2c

5 files changed

Lines changed: 13 additions & 34 deletions

File tree

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
1+
@file:OmitFromCoverage
2+
13
package com.x8bit.bitwarden.ui.vault.feature.cardscanner
24

35
import androidx.navigation.NavController
46
import androidx.navigation.NavGraphBuilder
57
import androidx.navigation.NavOptions
8+
import com.bitwarden.annotation.OmitFromCoverage
69
import com.bitwarden.ui.platform.base.util.composableWithSlideTransitions
710
import kotlinx.serialization.Serializable
811

912
/**
1013
* The type-safe route for the card scan screen.
1114
*/
15+
@OmitFromCoverage
1216
@Serializable
1317
data object CardScanRoute
1418

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

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,7 @@ fun CardScanScreen(
106106
modifier = Modifier
107107
.weight(1f)
108108
.fillMaxSize()
109-
.background(
110-
color = BitwardenTheme
111-
.colorScheme
112-
.background
113-
.scrim,
114-
)
109+
.background(color = BitwardenTheme.colorScheme.background.scrim)
115110
.padding(horizontal = 16.dp),
116111
) {
117112
Text(

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

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

33
import android.os.Parcelable
4-
import androidx.lifecycle.SavedStateHandle
54
import com.bitwarden.ui.platform.base.BaseViewModel
65
import com.bitwarden.ui.platform.base.DeferredBackgroundEvent
76
import com.bitwarden.ui.platform.feature.cardscanner.manager.CardScanManager
87
import com.bitwarden.ui.platform.feature.cardscanner.util.CardScanData
98
import com.bitwarden.ui.platform.feature.cardscanner.util.CardScanResult
109
import dagger.hilt.android.lifecycle.HiltViewModel
11-
import kotlinx.coroutines.flow.update
1210
import kotlinx.parcelize.Parcelize
1311
import javax.inject.Inject
1412

15-
private const val KEY_STATE = "state"
16-
1713
/**
1814
* Handles [CardScanAction] and launches [CardScanEvent] for the [CardScanScreen].
1915
*/
2016
@HiltViewModel
2117
class CardScanViewModel @Inject constructor(
2218
private val cardScanManager: CardScanManager,
23-
savedStateHandle: SavedStateHandle,
2419
) : BaseViewModel<CardScanState, CardScanEvent, CardScanAction>(
25-
initialState = savedStateHandle[KEY_STATE]
26-
?: CardScanState(hasHandledScan = false),
20+
initialState = CardScanState,
2721
) {
22+
private var hasHandledScan = false
23+
2824
override fun handleAction(action: CardScanAction) {
2925
when (action) {
3026
is CardScanAction.CloseClick -> handleCloseClick()
@@ -43,8 +39,8 @@ class CardScanViewModel @Inject constructor(
4339
}
4440

4541
private fun handleCardScanReceive(action: CardScanAction.CardScanReceive) {
46-
if (state.hasHandledScan) return
47-
mutableStateFlow.update { it.copy(hasHandledScan = true) }
42+
if (hasHandledScan) return
43+
hasHandledScan = true
4844
cardScanManager.emitCardScanResult(
4945
CardScanResult.Success(cardScanData = action.cardScanData),
5046
)
@@ -91,6 +87,4 @@ sealed class CardScanAction {
9187
* Represents the state of the card scan screen.
9288
*/
9389
@Parcelize
94-
data class CardScanState(
95-
val hasHandledScan: Boolean,
96-
) : Parcelable
90+
data object CardScanState : Parcelable

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

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

3-
import androidx.lifecycle.SavedStateHandle
43
import app.cash.turbine.test
54
import com.bitwarden.ui.platform.base.BaseViewModelTest
65
import com.bitwarden.ui.platform.feature.cardscanner.manager.CardScanManager
@@ -88,27 +87,14 @@ class CardScanViewModelTest : BaseViewModelTest() {
8887
}
8988

9089
verify(exactly = 1) { cardScanManager.emitCardScanResult(any()) }
91-
assertEquals(
92-
DEFAULT_STATE.copy(hasHandledScan = true),
93-
viewModel.stateFlow.value,
94-
)
9590
}
9691

97-
private fun createViewModel(
98-
initialState: CardScanState? = null,
99-
): CardScanViewModel =
92+
private fun createViewModel(): CardScanViewModel =
10093
CardScanViewModel(
101-
savedStateHandle = SavedStateHandle().apply {
102-
set("state", initialState)
103-
},
10494
cardScanManager = cardScanManager,
10595
)
10696
}
10797

108-
private val DEFAULT_STATE = CardScanState(
109-
hasHandledScan = false,
110-
)
111-
11298
private val CARD_SCAN_DATA = CardScanData(
11399
number = "4111111111111111",
114100
expirationMonth = "12",

core/src/main/kotlin/com/bitwarden/core/data/manager/model/FlagKey.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ sealed class FlagKey<out T : Any> {
114114
* Data object holding the feature flag key for the card scanner feature.
115115
*/
116116
data object CardScanner : FlagKey<Boolean>() {
117-
override val keyName: String = "card-scanner-mobile"
117+
override val keyName: String = "pm-34171-card-scanner"
118118
override val defaultValue: Boolean = false
119119
}
120120

0 commit comments

Comments
 (0)