taler-android

Android apps for GNU Taler (wallet, PoS, cashier)
Log | Files | Refs | README | LICENSE

commit b292f85b3970fcd8bf9339944d075d5c62f65bd0
parent 0e0ae90fd92b0cd59cd46b1ba97cb9c6d389f736
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date:   Sun, 18 Oct 2026 17:55:05 +0200

Rename petname to nickname and choose after details

Diffstat:
Mwallet/src/main/java/net/taler/wallet/contacts/ContactScreen.kt | 88++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------
Mwallet/src/main/res/values/strings.xml | 2+-
2 files changed, 73 insertions(+), 17 deletions(-)

diff --git a/wallet/src/main/java/net/taler/wallet/contacts/ContactScreen.kt b/wallet/src/main/java/net/taler/wallet/contacts/ContactScreen.kt @@ -82,6 +82,8 @@ fun ContactScreen( val contactResult by contactManager.contacts.collectAsState() val lookupResult by contactManager.lookupResult.collectAsState() var showAddDialog by remember { mutableStateOf(false) } + var showNicknameDialog by remember { mutableStateOf(false) } + var pendingContact by remember { mutableStateOf<PendingContact?>(null) } var searchQuery by remember { mutableStateOf("") } var contactToConfirm by remember { mutableStateOf<ContactEntry?>(null) } @@ -225,7 +227,6 @@ fun ContactScreen( initialMailboxBaseUri = initialMailboxBaseUri, initialMailboxAddress = initialMailboxAddress, initialSource = initialSource, - initialPetname = initialPetname, onDismiss = { showAddDialog = false contactManager.resetLookup() @@ -236,9 +237,10 @@ fun ContactScreen( initialSource = "" initialPetname = "" }, - onAdd = { alias, aliasType, mailboxBaseUri, mailboxAddress, source, petname -> - contactManager.addContact(alias, aliasType, mailboxBaseUri, mailboxAddress, source, petname) + onProceed = { alias, aliasType, mailboxBaseUri, mailboxAddress, source -> showAddDialog = false + pendingContact = PendingContact(alias, aliasType, mailboxBaseUri, mailboxAddress, source) + showNicknameDialog = true }, onLookup = { alias, aliasType -> contactManager.taldirLookupAlias(alias, aliasType) @@ -247,8 +249,71 @@ fun ContactScreen( existingContacts = (contactResult as? ContactResult.Success)?.contacts ?: emptyList() ) } + + if (showNicknameDialog && pendingContact != null) { + val pending = pendingContact!! + var nickname by remember { mutableStateOf(initialPetname) } + + AlertDialog( + onDismissRequest = { + showNicknameDialog = false + pendingContact = null + }, + title = { Text(stringResource(R.string.contact_petname)) }, + text = { + OutlinedTextField( + value = nickname, + onValueChange = { nickname = it }, + label = { Text(stringResource(R.string.contact_petname)) }, + modifier = Modifier.fillMaxWidth() + ) + }, + confirmButton = { + Button( + onClick = { + contactManager.addContact( + alias = pending.alias, + aliasType = pending.aliasType, + mailboxBaseUri = pending.mailboxBaseUri, + mailboxAddress = pending.mailboxAddress, + source = pending.source, + petname = nickname, + ) + showNicknameDialog = false + pendingContact = null + contactManager.resetLookup() + initialAlias = "" + initialAliasType = "email" + initialMailboxBaseUri = "" + initialMailboxAddress = "" + initialSource = "" + initialPetname = "" + }, + enabled = nickname.isNotBlank() + ) { + Text(stringResource(R.string.ok)) + } + }, + dismissButton = { + TextButton(onClick = { + showNicknameDialog = false + pendingContact = null + }) { + Text(stringResource(R.string.cancel)) + } + } + ) + } } +data class PendingContact( + val alias: String, + val aliasType: String, + val mailboxBaseUri: String, + val mailboxAddress: String, + val source: String, +) + @OptIn(ExperimentalMaterial3Api::class) @Composable fun AddContactDialog( @@ -257,9 +322,8 @@ fun AddContactDialog( initialMailboxBaseUri: String = "", initialMailboxAddress: String = "", initialSource: String = "", - initialPetname: String = "", onDismiss: () -> Unit, - onAdd: (String, String, String, String, String, String) -> Unit, + onProceed: (String, String, String, String, String) -> Unit, onLookup: (String, String) -> Unit, lookupResult: LookupResult, existingContacts: List<ContactEntry> = emptyList(), @@ -271,7 +335,6 @@ fun AddContactDialog( mutableStateOf(if (initialMailboxBaseUri.isEmpty()) "" else "$initialMailboxBaseUri$initialMailboxAddress") } var source by remember { mutableStateOf(initialSource) } - var petname by remember { mutableStateOf(initialPetname) } val aliasTypeOptions = listOf( stringResource(R.string.alias_registration_alias_email), @@ -286,7 +349,6 @@ fun AddContactDialog( mailbox = if (initialMailboxBaseUri.isEmpty()) "" else "$initialMailboxBaseUri$initialMailboxAddress" } LaunchedEffect(initialSource) { source = initialSource } - LaunchedEffect(initialPetname) { petname = initialPetname } AlertDialog( onDismissRequest = onDismiss, @@ -294,12 +356,6 @@ fun AddContactDialog( text = { Column(modifier = Modifier.verticalScroll(rememberScrollState())) { OutlinedTextField( - value = petname, - onValueChange = { petname = it }, - label = { Text("Petname") }, - modifier = Modifier.fillMaxWidth().padding(bottom = 8.dp) - ) - OutlinedTextField( value = alias, onValueChange = { alias = it }, label = { Text("Alias") }, @@ -403,9 +459,9 @@ fun AddContactDialog( } else "" val addr = mailboxParts.last() val finalSource = source.ifBlank { "local" } - onAdd(alias, aliasType, base, addr, finalSource, petname) + onProceed(alias, aliasType, base, addr, finalSource) }, - enabled = alias.isNotBlank() && petname.isNotBlank() && mailbox.isNotBlank() && !isDuplicate + enabled = alias.isNotBlank() && mailbox.isNotBlank() && !isDuplicate ) { Text(stringResource(R.string.ok)) } @@ -528,7 +584,7 @@ fun AddContactDialogPreview() { TalerSurface { AddContactDialog( onDismiss = {}, - onAdd = { _, _, _, _, _, _ -> }, + onProceed = { _, _, _, _, _ -> }, onLookup = { _, _ -> }, lookupResult = LookupResult.Idle ) diff --git a/wallet/src/main/res/values/strings.xml b/wallet/src/main/res/values/strings.xml @@ -517,7 +517,7 @@ GNU Taler is immune to many types of fraud such as credit card data theft, phish <string name="contact_alias">Alias</string> <string name="contact_mailbox_address">Mailbox Address</string> <string name="contact_mailbox_base_uri">Mailbox Base URI</string> - <string name="contact_petname">Petname</string> + <string name="contact_petname">Nickname</string> <string name="contacts_title">Contacts</string> <!-- Settings -->