11package to.bitkit.ui.components
22
3+ import androidx.compose.foundation.layout.Arrangement
34import androidx.compose.foundation.layout.Column
45import androidx.compose.foundation.layout.Spacer
6+ import androidx.compose.foundation.layout.fillMaxSize
57import androidx.compose.foundation.layout.height
68import androidx.compose.foundation.layout.size
79import androidx.compose.material3.Icon
810import androidx.compose.runtime.Composable
11+ import androidx.compose.runtime.getValue
12+ import androidx.compose.runtime.mutableStateOf
13+ import androidx.compose.runtime.remember
14+ import androidx.compose.runtime.rememberCoroutineScope
15+ import androidx.compose.runtime.setValue
916import androidx.compose.ui.Alignment
1017import androidx.compose.ui.Modifier
1118import androidx.compose.ui.res.painterResource
1219import androidx.compose.ui.res.stringResource
20+ import androidx.compose.ui.tooling.preview.Preview
1321import androidx.compose.ui.unit.dp
22+ import kotlinx.coroutines.delay
23+ import kotlinx.coroutines.launch
1424import to.bitkit.R
25+ import to.bitkit.ui.shared.util.clickableAlpha
26+ import to.bitkit.ui.theme.AppThemeSurface
1527import to.bitkit.ui.utils.BiometricPrompt
1628
1729@Composable
1830fun BiometricsView (
1931 onSuccess : (() -> Unit )? = null,
2032 onFailure : (() -> Unit )? = null,
2133) {
34+ var shouldShowPrompt by remember { mutableStateOf(true ) }
35+ val scope = rememberCoroutineScope()
36+
2237 Column (
2338 horizontalAlignment = Alignment .CenterHorizontally ,
39+ verticalArrangement = Arrangement .Center ,
40+ modifier = Modifier
41+ .fillMaxSize()
42+ .clickableAlpha {
43+ // trick to show biometric prompt again on UI click
44+ scope.launch {
45+ shouldShowPrompt = false
46+ delay(5 )
47+ shouldShowPrompt = true
48+ }
49+ }
2450 ) {
25- BiometricPrompt (
26- onSuccess = { onSuccess?.invoke() },
27- onError = { onFailure?.invoke() },
28- )
51+ if (shouldShowPrompt) {
52+ BiometricPrompt (
53+ onSuccess = { onSuccess?.invoke() },
54+ onError = { onFailure?.invoke() },
55+ )
56+ }
2957 Icon (
3058 painter = painterResource(R .drawable.ic_fingerprint),
3159 contentDescription = null ,
@@ -40,3 +68,11 @@ fun BiometricsView(
4068 )
4169 }
4270}
71+
72+ @Preview(showBackground = true )
73+ @Composable
74+ private fun Preview () {
75+ AppThemeSurface {
76+ BiometricsView ()
77+ }
78+ }
0 commit comments