diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountBackupDialog.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountBackupDialog.kt index 40ec2ca58..503f54aaf 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountBackupDialog.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountBackupDialog.kt @@ -100,6 +100,7 @@ import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.amethyst.ui.theme.ButtonBorder import com.vitorpamplona.amethyst.ui.theme.ButtonPadding import com.vitorpamplona.amethyst.ui.theme.ThemeComparisonRow +import com.vitorpamplona.amethyst.ui.theme.grayText import com.vitorpamplona.amethyst.ui.theme.placeholderText import com.vitorpamplona.quartz.crypto.CryptoUtils import com.vitorpamplona.quartz.encoders.toHexKey @@ -470,51 +471,10 @@ private fun encryptCopyNSec( } @Composable -private fun QrCodeButton(accountViewModel: AccountViewModel) { - val context = LocalContext.current - - // store the dialog open or close state - var dialogOpen by remember { mutableStateOf(false) } - - val keyguardLauncher = - rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult -> - if (result.resultCode == Activity.RESULT_OK) { - dialogOpen = true - } - } - - IconButton( - onClick = { - authenticate( - title = stringRes(context, R.string.copy_my_secret_key), - context = context, - keyguardLauncher = keyguardLauncher, - onApproved = { dialogOpen = true }, - onError = { title, message -> accountViewModel.toast(title, message) }, - ) - }, - ) { - Icon( - painter = painterResource(R.drawable.ic_qrcode), - contentDescription = stringRes(id = R.string.show_npub_as_a_qr_code), - modifier = Modifier.size(24.dp), - tint = MaterialTheme.colorScheme.primary, - ) - } - - if (dialogOpen) { - ShowKeyQRDialog( - accountViewModel.account.settings.keyPair.privKey - ?.toNsec(), - onClose = { dialogOpen = false }, - ) - } -} - -@Composable -private fun QrCodeButtonEncrypted( +private fun QrCodeButtonBase( accountViewModel: AccountViewModel, - password: MutableState, + isEnabled: Boolean = true, + onDialogShow: () -> String?, ) { val context = LocalContext.current @@ -529,7 +489,7 @@ private fun QrCodeButtonEncrypted( } IconButton( - enabled = password.value.text.isNotBlank(), + enabled = isEnabled, onClick = { authenticate( title = stringRes(context, R.string.copy_my_secret_key), @@ -544,21 +504,45 @@ private fun QrCodeButtonEncrypted( painter = painterResource(R.drawable.ic_qrcode), contentDescription = stringRes(id = R.string.show_npub_as_a_qr_code), modifier = Modifier.size(24.dp), + tint = if (isEnabled) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.grayText, ) } if (dialogOpen) { - val key = - accountViewModel.account.settings.keyPair.privKey - ?.toHexKey() - ?.let { CryptoUtils.encryptNIP49(it, password.value.text) } ShowKeyQRDialog( - key, + onDialogShow(), onClose = { dialogOpen = false }, ) } } +@Composable +private fun QrCodeButton(accountViewModel: AccountViewModel) { + QrCodeButtonBase( + accountViewModel = accountViewModel, + onDialogShow = { + accountViewModel.account.settings.keyPair.privKey + ?.toNsec() + }, + ) +} + +@Composable +private fun QrCodeButtonEncrypted( + accountViewModel: AccountViewModel, + password: MutableState, +) { + QrCodeButtonBase( + accountViewModel = accountViewModel, + isEnabled = password.value.text.isNotBlank(), + onDialogShow = { + accountViewModel.account.settings.keyPair.privKey + ?.toHexKey() + ?.let { CryptoUtils.encryptNIP49(it, password.value.text) } + }, + ) +} + @Composable private fun ShowKeyQRDialog( qrCode: String?,