@@ -2,59 +2,60 @@ package to.bitkit.ui.components
22
33import androidx.compose.foundation.layout.Box
44import androidx.compose.foundation.layout.Column
5- import androidx.compose.foundation.layout.Spacer
65import androidx.compose.foundation.layout.fillMaxSize
7- import androidx.compose.foundation.layout.height
86import androidx.compose.foundation.layout.padding
9- import androidx.compose.foundation.layout.size
10- import androidx.compose.material3.Icon
117import androidx.compose.runtime.Composable
128import androidx.compose.runtime.getValue
139import androidx.compose.runtime.mutableStateOf
1410import androidx.compose.runtime.saveable.rememberSaveable
1511import androidx.compose.runtime.setValue
1612import androidx.compose.ui.Alignment
1713import androidx.compose.ui.Modifier
18- import androidx.compose.ui.res.painterResource
1914import androidx.compose.ui.res.stringResource
2015import androidx.compose.ui.tooling.preview.Preview
2116import androidx.compose.ui.unit.dp
17+ import androidx.lifecycle.compose.collectAsStateWithLifecycle
2218import to.bitkit.R
19+ import to.bitkit.ui.appViewModel
2320import to.bitkit.ui.theme.AppThemeSurface
24- import to.bitkit.ui.utils.BiometricPrompt
2521import to.bitkit.ui.utils.rememberBiometricAuthSupported
2622
2723@Composable
2824fun AuthCheckView (
2925 onSuccess : (() -> Unit )? = null,
3026 isBiometrySupported : Boolean = rememberBiometricAuthSupported(),
3127) {
28+ val app = appViewModel ? : return
29+ val isBiometricsEnabled by app.isBiometricEnabled.collectAsStateWithLifecycle()
30+
31+ AuthCheckViewContent (
32+ onSuccess = onSuccess,
33+ isBiometricsEnabled = isBiometricsEnabled,
34+ isBiometrySupported = isBiometrySupported,
35+ )
36+ }
37+
38+ @Composable
39+ private fun AuthCheckViewContent (
40+ onSuccess : (() -> Unit )? = null,
41+ isBiometricsEnabled : Boolean ,
42+ isBiometrySupported : Boolean ,
43+ ) {
44+ var showBio by rememberSaveable { mutableStateOf(isBiometricsEnabled) }
45+
3246 Box (
3347 contentAlignment = Alignment .Center ,
3448 modifier = Modifier .fillMaxSize()
3549 ) {
3650 Column (
3751 horizontalAlignment = Alignment .CenterHorizontally ,
3852 ) {
39- var showBio by rememberSaveable { mutableStateOf(true ) }
4053
4154 if (showBio && isBiometrySupported) {
42- BiometricPrompt (
55+ BiometricsView (
4356 onSuccess = { onSuccess?.invoke() },
44- onError = { showBio = false },
45- )
46-
47- val subtitleText = let {
48- val biometricsName = stringResource(R .string.security__bio)
49- stringResource(R .string.security__bio_auth_with).replace(" {biometricsName}" , biometricsName)
50- }
51- Icon (
52- painter = painterResource(R .drawable.ic_fingerprint),
53- contentDescription = null ,
54- modifier = Modifier .size(64 .dp),
57+ onFailure = { showBio = false },
5558 )
56- Spacer (modifier = Modifier .height(16 .dp))
57- Subtitle (text = subtitleText)
5859 } else {
5960 Subtitle (text = " TODO: Pin code auth" )
6061 PrimaryButton (
@@ -68,12 +69,25 @@ fun AuthCheckView(
6869 }
6970}
7071
71- @Preview
72+ @Preview(showBackground = true )
73+ @Composable
74+ private fun PreviewBio () {
75+ AppThemeSurface {
76+ AuthCheckViewContent (
77+ onSuccess = {},
78+ isBiometricsEnabled = true ,
79+ isBiometrySupported = true ,
80+ )
81+ }
82+ }
83+
84+ @Preview(showBackground = true )
7285@Composable
73- fun AuthCheckPreview () {
86+ private fun PreviewPin () {
7487 AppThemeSurface {
75- AuthCheckView (
88+ AuthCheckViewContent (
7689 onSuccess = {},
90+ isBiometricsEnabled = false ,
7791 isBiometrySupported = true ,
7892 )
7993 }
0 commit comments