taler-android

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

commit e891d289067e5c289ca41937440d63a3171d02bc
parent 7c46babc236ff4b953322463d391d0b57dbe02b7
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date:   Fri,  4 Sep 2026 19:11:18 +0200

add previews

Diffstat:
Mwallet/src/main/java/net/taler/wallet/contacts/AliasRegistrationScreen.kt | 113++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------
Mwallet/src/main/java/net/taler/wallet/contacts/ContactScreen.kt | 62++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mwallet/src/main/java/net/taler/wallet/mailbox/MailboxScreen.kt | 42++++++++++++++++++++++++++++++++++++++++++
3 files changed, 196 insertions(+), 21 deletions(-)

diff --git a/wallet/src/main/java/net/taler/wallet/contacts/AliasRegistrationScreen.kt b/wallet/src/main/java/net/taler/wallet/contacts/AliasRegistrationScreen.kt @@ -47,8 +47,11 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import net.taler.wallet.R +import net.taler.wallet.compose.TalerSurface +import net.taler.wallet.mailbox.MailboxConfiguration import net.taler.wallet.mailbox.MailboxResult import net.taler.wallet.main.MainViewModel @@ -58,6 +61,37 @@ fun AliasRegistrationScreen( model: MainViewModel, onNavigateBack: () -> Unit, ) { + val mailboxState by model.mailboxManager.mailbox.collectAsState() + val registerResult by model.contactManager.registerResult.collectAsState() + + DisposableEffect(Unit) { + onDispose { + model.contactManager.resetRegistration() + } + } + + AliasRegistrationContent( + mailboxState = mailboxState, + registerResult = registerResult, + onNavigateBack = onNavigateBack, + onRegister = { alias, aliasType, taldirBaseUri, targetUri, durationMonths -> + model.contactManager.taldirRegister(alias, aliasType, taldirBaseUri, targetUri, durationMonths) + }, + onComplete = { alias, aliasType, taldirBaseUri, targetUri, solution -> + model.contactManager.completeTaldirRegister(alias, aliasType, taldirBaseUri, targetUri, solution) + } + ) +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun AliasRegistrationContent( + mailboxState: MailboxResult, + registerResult: RegisterResult, + onNavigateBack: () -> Unit, + onRegister: (String, String, String, String, Int) -> Unit, + onComplete: (String, String, String, String, String) -> Unit, +) { var aliasType by remember { mutableStateOf("email") } var aliasTypeExpanded by remember { mutableStateOf(false) } var alias by remember { mutableStateOf("") } @@ -65,20 +99,11 @@ fun AliasRegistrationScreen( var solution by remember { mutableStateOf("") } val taldirBaseUri = "https://taldir.gnunet.org" - val mailboxState by model.mailboxManager.mailbox.collectAsState() - val registerResult by model.contactManager.registerResult.collectAsState() - val aliasTypeOptions = listOf( stringResource(R.string.alias_registration_alias_email), stringResource(R.string.alias_registration_alias_phone), ) - DisposableEffect(Unit) { - onDispose { - model.contactManager.resetRegistration() - } - } - Scaffold( topBar = { TopAppBar( @@ -174,12 +199,12 @@ fun AliasRegistrationScreen( Button( onClick = { mailboxAddress?.let { targetUri -> - model.contactManager.taldirRegister( - alias = alias, - aliasType = aliasType, - taldirBaseUri = taldirBaseUri, - targetUri = targetUri, - durationMonths = durationMonths.toIntOrNull() ?: 12 + onRegister( + alias, + aliasType, + taldirBaseUri, + targetUri, + durationMonths.toIntOrNull() ?: 12 ) } }, @@ -219,12 +244,12 @@ fun AliasRegistrationScreen( Button( onClick = { mailboxAddress?.let { targetUri -> - model.contactManager.completeTaldirRegister( - alias = alias, - aliasType = aliasType, - taldirBaseUri = taldirBaseUri, - targetUri = targetUri, - solution = solution + onComplete( + alias, + aliasType, + taldirBaseUri, + targetUri, + solution ) } }, @@ -264,3 +289,49 @@ fun AliasRegistrationScreen( } } } + +@Preview +@Composable +fun AliasRegistrationContentPreview() { + TalerSurface { + AliasRegistrationContent( + mailboxState = MailboxResult.Success( + MailboxConfiguration( + mailboxBaseUrl = "https://mailbox.taler.net", + privateKey = "", + privateEncryptionKey = "", + hAddress = "alice", + expiration = net.taler.common.Timestamp.fromMillis(0) + ), + emptyList() + ), + registerResult = RegisterResult.Idle, + onNavigateBack = {}, + onRegister = { _, _, _, _, _ -> }, + onComplete = { _, _, _, _, _ -> } + ) + } +} + +@Preview +@Composable +fun AliasRegistrationContentSuccessPreview() { + TalerSurface { + AliasRegistrationContent( + mailboxState = MailboxResult.Success( + MailboxConfiguration( + mailboxBaseUrl = "https://mailbox.taler.net", + privateKey = "", + privateEncryptionKey = "", + hAddress = "alice", + expiration = net.taler.common.Timestamp.fromMillis(0) + ), + emptyList() + ), + registerResult = RegisterResult.Success(validFor = null), + onNavigateBack = {}, + onRegister = { _, _, _, _, _ -> }, + onComplete = { _, _, _, _, _ -> } + ) + } +} diff --git a/wallet/src/main/java/net/taler/wallet/contacts/ContactScreen.kt b/wallet/src/main/java/net/taler/wallet/contacts/ContactScreen.kt @@ -58,12 +58,14 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.core.net.toUri import net.taler.wallet.NavigateCallback import net.taler.wallet.R import net.taler.wallet.WalletDestination import net.taler.wallet.balances.ScopeInfo +import net.taler.wallet.compose.TalerSurface import net.taler.wallet.main.MainViewModel import net.taler.wallet.transactions.TransactionStateFilter.Nonfinal @@ -473,3 +475,63 @@ fun ContactItem( } } } + +@Preview +@Composable +fun ContactItemPreview() { + TalerSurface { + ContactItem( + contact = ContactEntry( + alias = "alice@taler.net", + aliasType = "email", + mailboxBaseUri = "https://mailbox.taler.net/", + mailboxAddress = "alice", + source = "manual", + petname = "Alice", + ), + onDelete = {}, + onSelect = null + ) + } +} + +@Preview +@Composable +fun ContactListPreview() { + TalerSurface { + ContactList( + contacts = listOf( + ContactEntry( + alias = "alice@taler.net", + aliasType = "email", + mailboxBaseUri = "https://mailbox.taler.net/", + mailboxAddress = "alice", + source = "manual", + petname = "Alice", + ), + ContactEntry( + alias = "bob@taler.net", + aliasType = "email", + mailboxBaseUri = "https://mailbox.taler.net/", + mailboxAddress = "bob", + source = "manual", + petname = "Bob", + ), + ), + onDelete = {} + ) + } +} + +@Preview +@Composable +fun AddContactDialogPreview() { + TalerSurface { + AddContactDialog( + onDismiss = {}, + onAdd = { _, _, _, _, _, _ -> }, + onLookup = { _, _ -> }, + lookupResult = LookupResult.Idle + ) + } +} diff --git a/wallet/src/main/java/net/taler/wallet/mailbox/MailboxScreen.kt b/wallet/src/main/java/net/taler/wallet/mailbox/MailboxScreen.kt @@ -61,12 +61,15 @@ import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import kotlinx.coroutines.launch +import net.taler.common.Timestamp import net.taler.lib.android.toAbsoluteTime import net.taler.wallet.NavigateCallback import net.taler.wallet.R import net.taler.wallet.WalletDestination +import net.taler.wallet.compose.TalerSurface import net.taler.wallet.main.MainViewModel @OptIn(ExperimentalMaterial3Api::class) @@ -271,3 +274,42 @@ fun MessageItem( } } } + +@Preview +@Composable +fun MessageItemPreview() { + TalerSurface { + MessageItem( + message = MailboxMessageRecord( + originMailboxBaseUrl = "https://mailbox.taler.net/", + downloadedAt = Timestamp.now(), + talerUri = "taler://pay-push/...", + ), + onNavigate = { _, _ -> }, + onDelete = {} + ) + } +} + +@Preview +@Composable +fun MessageListPreview() { + TalerSurface { + MessageList( + messages = listOf( + MailboxMessageRecord( + originMailboxBaseUrl = "https://mailbox.taler.net/", + downloadedAt = Timestamp.now(), + talerUri = "taler://pay-push/...", + ), + MailboxMessageRecord( + originMailboxBaseUrl = "https://mailbox.demo.taler.net/", + downloadedAt = Timestamp.now(), + talerUri = "taler://pay-pull/...", + ), + ), + onNavigate = { _, _ -> }, + onDelete = {} + ) + } +}