Skip to content

Commit 1f24ca7

Browse files
PM-27755: Create a common LocalQrCodeAnalyzer for both apps (#6115)
1 parent dc79176 commit 1f24ca7

File tree

9 files changed

+34
-8
lines changed

9 files changed

+34
-8
lines changed

app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/composition/LocalManagerProvider.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ import com.bitwarden.cxf.ui.composition.LocalCredentialExchangeRequestValidator
2323
import com.bitwarden.cxf.validator.CredentialExchangeRequestValidator
2424
import com.bitwarden.cxf.validator.dsl.credentialExchangeRequestValidator
2525
import com.bitwarden.ui.platform.composition.LocalIntentManager
26+
import com.bitwarden.ui.platform.composition.LocalQrCodeAnalyzer
27+
import com.bitwarden.ui.platform.feature.qrcodescan.util.QrCodeAnalyzer
28+
import com.bitwarden.ui.platform.feature.qrcodescan.util.QrCodeAnalyzerImpl
2629
import com.bitwarden.ui.platform.manager.IntentManager
2730
import com.x8bit.bitwarden.R
2831
import com.x8bit.bitwarden.data.platform.manager.util.AppResumeStateManager
@@ -80,6 +83,7 @@ fun LocalManagerProvider(
8083
credentialExchangeRequestValidator: CredentialExchangeRequestValidator =
8184
credentialExchangeRequestValidator(activity = activity),
8285
authTabLaunchers: AuthTabLaunchers,
86+
qrCodeAnalyzer: QrCodeAnalyzer = QrCodeAnalyzerImpl(),
8387
content: @Composable () -> Unit,
8488
) {
8589
CompositionLocalProvider(
@@ -98,6 +102,7 @@ fun LocalManagerProvider(
98102
LocalCredentialExchangeCompletionManager provides credentialExchangeCompletionManager,
99103
LocalCredentialExchangeRequestValidator provides credentialExchangeRequestValidator,
100104
LocalAuthTabLaunchers provides authTabLaunchers,
105+
LocalQrCodeAnalyzer provides qrCodeAnalyzer,
101106
content = content,
102107
)
103108
}

app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/qrcodescan/QrCodeScanScreen.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ import com.bitwarden.ui.platform.components.camera.CameraPreview
3535
import com.bitwarden.ui.platform.components.camera.QrCodeSquare
3636
import com.bitwarden.ui.platform.components.scaffold.BitwardenScaffold
3737
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
38+
import com.bitwarden.ui.platform.composition.LocalQrCodeAnalyzer
3839
import com.bitwarden.ui.platform.feature.qrcodescan.util.QrCodeAnalyzer
39-
import com.bitwarden.ui.platform.feature.qrcodescan.util.QrCodeAnalyzerImpl
4040
import com.bitwarden.ui.platform.model.WindowSize
4141
import com.bitwarden.ui.platform.resource.BitwardenDrawable
4242
import com.bitwarden.ui.platform.resource.BitwardenString
@@ -55,7 +55,7 @@ fun QrCodeScanScreen(
5555
onNavigateBack: () -> Unit,
5656
onNavigateToManualCodeEntryScreen: () -> Unit,
5757
viewModel: QrCodeScanViewModel = hiltViewModel(),
58-
qrCodeAnalyzer: QrCodeAnalyzer = QrCodeAnalyzerImpl(),
58+
qrCodeAnalyzer: QrCodeAnalyzer = LocalQrCodeAnalyzer.current,
5959
) {
6060
qrCodeAnalyzer.onQrCodeScanned = remember(viewModel) {
6161
{ viewModel.trySendAction(QrCodeScanAction.QrCodeScanReceive(it)) }

app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/base/BitwardenComposeTest.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.bitwarden.cxf.importer.CredentialExchangeImporter
55
import com.bitwarden.cxf.manager.CredentialExchangeCompletionManager
66
import com.bitwarden.cxf.validator.CredentialExchangeRequestValidator
77
import com.bitwarden.ui.platform.base.BaseComposeTest
8+
import com.bitwarden.ui.platform.feature.qrcodescan.util.QrCodeAnalyzer
89
import com.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme
910
import com.bitwarden.ui.platform.manager.IntentManager
1011
import com.bitwarden.ui.platform.theme.BitwardenTheme
@@ -48,6 +49,7 @@ abstract class BitwardenComposeTest : BaseComposeTest() {
4849
credentialExchangeImporter: CredentialExchangeImporter = mockk(),
4950
credentialExchangeCompletionManager: CredentialExchangeCompletionManager = mockk(),
5051
credentialExchangeRequestValidator: CredentialExchangeRequestValidator = mockk(),
52+
qrCodeAnalyzer: QrCodeAnalyzer = mockk(),
5153
test: @Composable () -> Unit,
5254
) {
5355
setTestContent {
@@ -67,6 +69,7 @@ abstract class BitwardenComposeTest : BaseComposeTest() {
6769
credentialExchangeImporter = credentialExchangeImporter,
6870
credentialExchangeCompletionManager = credentialExchangeCompletionManager,
6971
credentialExchangeRequestValidator = credentialExchangeRequestValidator,
72+
qrCodeAnalyzer = qrCodeAnalyzer,
7073
) {
7174
BitwardenTheme(
7275
theme = theme,

app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/qrcodescan/QrCodeScanScreenTest.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,12 @@ class QrCodeScanScreenTest : BitwardenComposeTest() {
3131

3232
@Before
3333
fun setup() {
34-
setContent {
34+
setContent(
35+
qrCodeAnalyzer = qrCodeAnalyzer,
36+
) {
3537
QrCodeScanScreen(
3638
onNavigateBack = { onNavigateBackCalled = true },
3739
viewModel = viewModel,
38-
qrCodeAnalyzer = qrCodeAnalyzer,
3940
onNavigateToManualCodeEntryScreen = {
4041
onNavigateToManualCodeEntryScreenCalled = true
4142
},

authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/qrcodescan/QrCodeScanScreen.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ import com.bitwarden.ui.platform.components.camera.CameraPreview
4040
import com.bitwarden.ui.platform.components.camera.QrCodeSquare
4141
import com.bitwarden.ui.platform.components.dialog.BitwardenBasicDialog
4242
import com.bitwarden.ui.platform.components.scaffold.BitwardenScaffold
43+
import com.bitwarden.ui.platform.composition.LocalQrCodeAnalyzer
4344
import com.bitwarden.ui.platform.feature.qrcodescan.util.QrCodeAnalyzer
44-
import com.bitwarden.ui.platform.feature.qrcodescan.util.QrCodeAnalyzerImpl
4545
import com.bitwarden.ui.platform.resource.BitwardenDrawable
4646
import com.bitwarden.ui.platform.resource.BitwardenString
4747
import com.bitwarden.ui.platform.theme.BitwardenTheme
@@ -57,7 +57,7 @@ import com.bitwarden.ui.platform.theme.color.darkBitwardenColorScheme
5757
fun QrCodeScanScreen(
5858
onNavigateBack: () -> Unit,
5959
viewModel: QrCodeScanViewModel = hiltViewModel(),
60-
qrCodeAnalyzer: QrCodeAnalyzer = QrCodeAnalyzerImpl(),
60+
qrCodeAnalyzer: QrCodeAnalyzer = LocalQrCodeAnalyzer.current,
6161
onNavigateToManualCodeEntryScreen: () -> Unit,
6262
) {
6363
qrCodeAnalyzer.onQrCodeScanned = remember(viewModel) {

authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/composition/LocalManagerProvider.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ import com.bitwarden.authenticator.ui.platform.manager.permissions.PermissionsMa
1919
import com.bitwarden.authenticator.ui.platform.manager.permissions.PermissionsManagerImpl
2020
import com.bitwarden.core.data.manager.BuildInfoManager
2121
import com.bitwarden.ui.platform.composition.LocalIntentManager
22+
import com.bitwarden.ui.platform.composition.LocalQrCodeAnalyzer
23+
import com.bitwarden.ui.platform.feature.qrcodescan.util.QrCodeAnalyzer
24+
import com.bitwarden.ui.platform.feature.qrcodescan.util.QrCodeAnalyzerImpl
2225
import com.bitwarden.ui.platform.manager.IntentManager
2326
import java.time.Clock
2427

@@ -34,13 +37,15 @@ fun LocalManagerProvider(
3437
intentManager: IntentManager = IntentManager.create(activity, clock, buildInfoManager),
3538
exitManager: ExitManager = ExitManagerImpl(activity),
3639
biometricsManager: BiometricsManager = BiometricsManagerImpl(activity),
40+
qrCodeAnalyzer: QrCodeAnalyzer = QrCodeAnalyzerImpl(),
3741
content: @Composable () -> Unit,
3842
) {
3943
CompositionLocalProvider(
4044
LocalPermissionsManager provides permissionsManager,
4145
LocalIntentManager provides intentManager,
4246
LocalExitManager provides exitManager,
4347
LocalBiometricsManager provides biometricsManager,
48+
LocalQrCodeAnalyzer provides qrCodeAnalyzer,
4449
content = content,
4550
)
4651
}

authenticator/src/test/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/qrcodescan/QrCodeScanScreenTest.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,11 @@ class QrCodeScanScreenTest : AuthenticatorComposeTest() {
3737

3838
@Before
3939
fun setup() {
40-
setContent {
40+
setContent(
41+
qrCodeAnalyzer = qrCodeAnalyzer,
42+
) {
4143
QrCodeScanScreen(
4244
viewModel = viewModel,
43-
qrCodeAnalyzer = qrCodeAnalyzer,
4445
onNavigateBack = { onNavigateBackCalled = true },
4546
onNavigateToManualCodeEntryScreen = {
4647
onNavigateToManualCodeEntryScreenCalled = true

authenticator/src/test/kotlin/com/bitwarden/authenticator/ui/platform/base/AuthenticatorComposeTest.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.bitwarden.authenticator.ui.platform.manager.biometrics.BiometricsMana
66
import com.bitwarden.authenticator.ui.platform.manager.exit.ExitManager
77
import com.bitwarden.authenticator.ui.platform.manager.permissions.PermissionsManager
88
import com.bitwarden.ui.platform.base.BaseComposeTest
9+
import com.bitwarden.ui.platform.feature.qrcodescan.util.QrCodeAnalyzer
910
import com.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme
1011
import com.bitwarden.ui.platform.manager.IntentManager
1112
import com.bitwarden.ui.platform.theme.BitwardenTheme
@@ -28,6 +29,7 @@ abstract class AuthenticatorComposeTest : BaseComposeTest() {
2829
intentManager: IntentManager = mockk(),
2930
exitManager: ExitManager = mockk(),
3031
biometricsManager: BiometricsManager = mockk(),
32+
qrCodeAnalyzer: QrCodeAnalyzer = mockk(),
3133
test: @Composable () -> Unit,
3234
) {
3335
setTestContent {
@@ -37,6 +39,7 @@ abstract class AuthenticatorComposeTest : BaseComposeTest() {
3739
intentManager = intentManager,
3840
exitManager = exitManager,
3941
biometricsManager = biometricsManager,
42+
qrCodeAnalyzer = qrCodeAnalyzer,
4043
content = test,
4144
)
4245
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.bitwarden.ui.platform.composition
22

33
import androidx.compose.runtime.ProvidableCompositionLocal
44
import androidx.compose.runtime.compositionLocalOf
5+
import com.bitwarden.ui.platform.feature.qrcodescan.util.QrCodeAnalyzer
56
import com.bitwarden.ui.platform.manager.IntentManager
67

78
/**
@@ -10,3 +11,10 @@ import com.bitwarden.ui.platform.manager.IntentManager
1011
val LocalIntentManager: ProvidableCompositionLocal<IntentManager> = compositionLocalOf {
1112
error("CompositionLocal LocalIntentManager not present")
1213
}
14+
15+
/**
16+
* Provides access to the QR Code Analyzer throughout the app.
17+
*/
18+
val LocalQrCodeAnalyzer: ProvidableCompositionLocal<QrCodeAnalyzer> = compositionLocalOf {
19+
error("CompositionLocal LocalQrCodeAnalyzer not present")
20+
}

0 commit comments

Comments
 (0)