add button to show qrcode with you private key

This commit is contained in:
greenart7c3
2024-02-19 17:20:35 -03:00
parent bb6b7cbb58
commit d79c0ffb9d
3 changed files with 108 additions and 3 deletions
@@ -6,7 +6,6 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
@@ -34,13 +33,13 @@ fun QrCodeDrawer(contents: String, modifier: Modifier = Modifier) {
createQrCode(contents = contents)
}
val foregroundColor = MaterialTheme.colorScheme.onSurface
val foregroundColor = Color.Black
Box(
modifier = modifier
.defaultMinSize(48.dp, 48.dp)
.aspectRatio(1f)
.background(MaterialTheme.colorScheme.background)
.background(Color.White)
) {
Canvas(modifier = Modifier.fillMaxSize()) {
// Calculate the height and width of each column/row
@@ -18,13 +18,18 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Key
import androidx.compose.material.icons.filled.QrCode
import androidx.compose.material3.Button
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ClipboardManager
@@ -38,8 +43,10 @@ import androidx.compose.ui.window.DialogProperties
import com.greenart7c3.nostrsigner.R
import com.greenart7c3.nostrsigner.models.Account
import com.greenart7c3.nostrsigner.service.Biometrics
import com.greenart7c3.nostrsigner.ui.QrCodeDrawer
import com.greenart7c3.nostrsigner.ui.components.CloseButton
import com.greenart7c3.nostrsigner.ui.theme.ButtonBorder
import com.greenart7c3.nostrsigner.ui.theme.Size35dp
import com.halilibo.richtext.markdown.Markdown
import com.halilibo.richtext.ui.RichTextStyle
import com.halilibo.richtext.ui.material3.Material3RichText
@@ -89,6 +96,7 @@ fun AccountBackupDialog(account: Account, onClose: () -> Unit) {
Spacer(modifier = Modifier.height(30.dp))
NSecCopyButton(account)
NSecQrButton(account)
NPubCopyButton(account)
}
}
@@ -96,6 +104,102 @@ fun AccountBackupDialog(account: Account, onClose: () -> Unit) {
}
}
@Composable
private fun NSecQrButton(
account: Account
) {
val context = LocalContext.current
val scope = rememberCoroutineScope()
var showDialog by remember {
mutableStateOf(false)
}
if (showDialog) {
QrCodeDialog(
content = account.keyPair.privKey!!.toNsec()
) {
showDialog = false
}
}
val keyguardLauncher =
rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
if (result.resultCode == Activity.RESULT_OK) {
showDialog = true
}
}
Button(
modifier = Modifier.padding(horizontal = 3.dp),
onClick = {
Biometrics.authenticate(
title = context.getString(R.string.show_qr_code),
context = context,
scope = scope,
keyguardLauncher = keyguardLauncher
) {
showDialog = true
}
},
shape = ButtonBorder,
contentPadding = PaddingValues(vertical = 6.dp, horizontal = 16.dp)
) {
Icon(
tint = MaterialTheme.colorScheme.onPrimary,
imageVector = Icons.Default.QrCode,
contentDescription = stringResource(R.string.shows_qr_code_with_you_private_key),
modifier = Modifier.padding(end = 5.dp)
)
Text(
stringResource(id = R.string.show_qr_code),
color = MaterialTheme.colorScheme.onPrimary
)
}
}
@Composable
private fun QrCodeDialog(content: String, onClose: () -> Unit) {
Dialog(
onDismissRequest = onClose,
properties = DialogProperties(usePlatformDefaultWidth = false)
) {
Surface(modifier = Modifier.fillMaxSize()) {
Column(
modifier = Modifier
.background(MaterialTheme.colorScheme.background)
.fillMaxSize()
) {
Row(
modifier = Modifier
.fillMaxWidth()
.padding(10.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
CloseButton(onCancel = onClose)
}
Column(
modifier = Modifier
.fillMaxSize()
.padding(horizontal = 30.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Row(
horizontalArrangement = Arrangement.Center,
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = Size35dp)
) {
QrCodeDrawer(content)
}
}
}
}
}
}
@Composable
private fun NSecCopyButton(
account: Account
+2
View File
@@ -74,4 +74,6 @@
<string name="opensats_uri">https://opensats.org</string>
<string name="amber_github_uri">https://github.com/greenart7c3/amber</string>
<string name="made_possible_by">Made possible by</string>
<string name="show_qr_code">Show QR Code</string>
<string name="shows_qr_code_with_you_private_key">Shows QR Code with you private key</string>
</resources>