commit 0e4ae9635d12ca36a791cf54d9686fb07047e769
parent 7ab101b0a5db61403d95d2c0271cd634e4722f44
Author: Iván Ávalos <avalos@disroot.org>
Date: Wed, 22 Jul 2026 22:30:52 +0200
[wallet] implement preparePayForTemplateV2
Diffstat:
2 files changed, 19 insertions(+), 21 deletions(-)
diff --git a/wallet/src/main/java/net/taler/wallet/payment/PayTemplateScreen.kt b/wallet/src/main/java/net/taler/wallet/payment/PayTemplateScreen.kt
@@ -24,9 +24,11 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
+import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.lifecycle.asFlow
+import kotlinx.coroutines.launch
import net.taler.wallet.NavigateCallback
import net.taler.wallet.R
import net.taler.wallet.WalletDestination
@@ -55,6 +57,16 @@ fun PayTemplateScreen(
val payStatus by paymentManager.payStatus.asFlow().collectAsStateLifecycleAware(PayStatus.None)
val balanceState by balanceManager.state.observeAsState(BalanceState.None)
val devMode by model.devMode.observeAsState(false)
+ val scope = rememberCoroutineScope()
+
+ suspend fun prepareTemplate(uri: String, params: TemplateParams) {
+ model.paymentManager.preparePayForTemplate(uri, params)
+ ?.let { transactionId ->
+ if (model.transactionManager.selectTransaction(transactionId)) {
+ onNavigate(WalletDestination.TransactionPayment, true)
+ }
+ }
+ }
LaunchedEffect(Unit) {
balanceManager.loadAssets()
@@ -78,7 +90,7 @@ fun PayTemplateScreen(
.intersect(s.supportedCurrencies.toSet())
.toList()
if (!s.details.isTemplateEditable(usableCurrencies)) {
- paymentManager.preparePayForTemplate(uri, s.details.toTemplateParams())
+ prepareTemplate(uri, s.details.toTemplateParams())
}
}
@@ -102,7 +114,7 @@ fun PayTemplateScreen(
payStatus = payStatus,
onCreateAmount = model::createAmount,
onSubmit = { params ->
- paymentManager.preparePayForTemplate(uri, params)
+ scope.launch { prepareTemplate(uri, params) }
},
onError = { errorMsg ->
onShowError(TalerErrorInfo.makeCustomError(errorMsg))
diff --git a/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt b/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt
@@ -117,7 +117,6 @@ class PaymentManager(
suspend fun preparePay(url: String): String? {
var transactionId: String? = null
- mPayStatus.value = PayStatus.Loading
api.request("preparePayForUriV2", PreparePayV2Response.serializer()) {
put("talerPayUri", url)
}.onError {
@@ -269,30 +268,17 @@ class PaymentManager(
}
}
- fun preparePayForTemplate(url: String, params: TemplateParams) = scope.launch {
- mPayStatus.value = PayStatus.Loading
- api.request("preparePayForTemplate", PreparePayResponse.serializer()) {
+ suspend fun preparePayForTemplate(url: String, params: TemplateParams): String? {
+ var transactionId: String? = null
+ api.request("preparePayForTemplateV2", PreparePayV2Response.serializer()) {
put("talerPayTemplateUri", url)
put("templateParams", JSONObject(BackendManager.json.encodeToString(params)))
}.onError {
handleError("preparePayForTemplate", it)
}.onSuccess { response ->
- mPayStatus.value = when (response) {
- is PaymentPossibleResponse -> response.toPayStatusPrepared()
- is PreparePayResponse.ChoiceSelection -> response.toPayStatusPrepared()
-
- is InsufficientBalanceResponse -> InsufficientBalance(
- transactionId = response.transactionId,
- contractTerms = response.contractTerms,
- amountRaw = response.amountRaw,
- balanceDetails = response.balanceDetails,
- )
-
- is AlreadyConfirmedResponse -> AlreadyPaid(
- transactionId = response.transactionId,
- )
- }
+ transactionId = response.transactionId
}
+ return transactionId
}
@UiThread