summaryrefslogtreecommitdiff
path: root/wallet/src/main/java/net/taler/wallet/payment/PayTemplateFragment.kt
diff options
context:
space:
mode:
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/payment/PayTemplateFragment.kt')
-rw-r--r--wallet/src/main/java/net/taler/wallet/payment/PayTemplateFragment.kt46
1 files changed, 34 insertions, 12 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/payment/PayTemplateFragment.kt b/wallet/src/main/java/net/taler/wallet/payment/PayTemplateFragment.kt
index 080d319..1812db0 100644
--- a/wallet/src/main/java/net/taler/wallet/payment/PayTemplateFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/payment/PayTemplateFragment.kt
@@ -21,14 +21,19 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
import androidx.compose.ui.platform.ComposeView
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
+import androidx.lifecycle.asFlow
import androidx.navigation.NavOptions
import androidx.navigation.fragment.findNavController
+import net.taler.common.showError
import net.taler.wallet.MainViewModel
import net.taler.wallet.R
import net.taler.wallet.compose.TalerSurface
+import net.taler.wallet.showError
class PayTemplateFragment : Fragment() {
@@ -46,13 +51,19 @@ class PayTemplateFragment : Fragment() {
return ComposeView(requireContext()).apply {
setContent {
+ val payStatus by model.paymentManager.payStatus
+ .asFlow()
+ .collectAsState(initial = PayStatus.None)
TalerSurface {
PayTemplateComposable(
uri = uri,
currencies = model.getCurrencies(),
- fragment = this@PayTemplateFragment,
- model = model,
+ payStatus = payStatus,
+ onCreateAmount = { text, currency ->
+ model.createAmount(text, currency)
+ },
onSubmit = { createOrder(it) },
+ onError = { this@PayTemplateFragment.showError(it) },
)
}
}
@@ -66,18 +77,29 @@ class PayTemplateFragment : Fragment() {
if (uri.queryParameterNames?.isEmpty() == true) {
createOrder(emptyMap())
}
- }
- private fun createOrder(params: Map<String, String>) {
- model.paymentManager.preparePayForTemplate(uriString, params).invokeOnCompletion {
- // TODO maybe better to observe/collect payStatus instead of invokeOnCompletion
- // and then only reacting to one of the possible payStatus values
- if (model.paymentManager.payStatus.value is PayStatus.Prepared) {
- val navOptions = NavOptions.Builder()
- .setPopUpTo(R.id.nav_main, true)
- .build()
- findNavController().navigate(R.id.action_global_promptPayment, null, navOptions)
+ model.paymentManager.payStatus.observe(viewLifecycleOwner) { payStatus ->
+ when (payStatus) {
+ is PayStatus.Prepared -> {
+ val navOptions = NavOptions.Builder()
+ .setPopUpTo(R.id.nav_main, true)
+ .build()
+ findNavController()
+ .navigate(R.id.action_global_promptPayment, null, navOptions)
+ }
+ is PayStatus.Error -> {
+ if (model.devMode.value == true) {
+ showError(payStatus.error)
+ } else {
+ showError(R.string.payment_template_error, payStatus.error.userFacingMsg)
+ }
+ }
+ else -> {}
}
}
}
+
+ private fun createOrder(params: Map<String, String>) {
+ model.paymentManager.preparePayForTemplate(uriString, params)
+ }
}