commit e891d289067e5c289ca41937440d63a3171d02bc
parent 7c46babc236ff4b953322463d391d0b57dbe02b7
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date: Fri, 4 Sep 2026 19:11:18 +0200
add previews
Diffstat:
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 = {}
+ )
+ }
+}