taler-android

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

commit a6bf4911bbdc58cb74d224fecd6dfeeb906486a4
parent 7ff1ee54e2445c4c82362de7a66c11c350b8dbc2
Author: Iván Ávalos <avalos@disroot.org>
Date:   Thu, 29 May 2025 14:49:33 +0200

[wallet] redirect to tx details after incoming p2p confirm

Diffstat:
Mwallet/src/main/java/net/taler/wallet/peer/IncomingComposable.kt | 2+-
Mwallet/src/main/java/net/taler/wallet/peer/IncomingPullPaymentFragment.kt | 40+++++++++++++++++++++++++++-------------
Mwallet/src/main/java/net/taler/wallet/peer/IncomingPushPaymentFragment.kt | 7++++++-
Mwallet/src/main/java/net/taler/wallet/peer/IncomingState.kt | 4+++-
Mwallet/src/main/java/net/taler/wallet/peer/PeerManager.kt | 4++--
Mwallet/src/main/res/navigation/nav_graph.xml | 8++++++++
6 files changed, 47 insertions(+), 18 deletions(-)

diff --git a/wallet/src/main/java/net/taler/wallet/peer/IncomingComposable.kt b/wallet/src/main/java/net/taler/wallet/peer/IncomingComposable.kt @@ -95,7 +95,7 @@ fun IncomingComposable( is IncomingAccepting -> PeerPullTermsComposable(s, onAccept, data) is IncomingTerms -> PeerPullTermsComposable(s, onAccept, data) is IncomingError -> PeerPullErrorComposable(s) - IncomingAccepted -> { + is IncomingAccepted -> { // we navigate away, don't show anything } } diff --git a/wallet/src/main/java/net/taler/wallet/peer/IncomingPullPaymentFragment.kt b/wallet/src/main/java/net/taler/wallet/peer/IncomingPullPaymentFragment.kt @@ -23,8 +23,11 @@ import android.view.ViewGroup import androidx.compose.ui.platform.ComposeView import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle import androidx.navigation.fragment.findNavController +import kotlinx.coroutines.launch import net.taler.common.showError import net.taler.wallet.MainViewModel import net.taler.wallet.R @@ -35,25 +38,13 @@ import net.taler.wallet.showError class IncomingPullPaymentFragment : Fragment() { private val model: MainViewModel by activityViewModels() private val peerManager get() = model.peerManager + private val transactionManager get() = model.transactionManager override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?, ): View { - lifecycleScope.launchWhenResumed { - peerManager.incomingPullState.collect { - if (it is IncomingAccepted) { - findNavController().navigate(R.id.action_promptPullPayment_to_nav_main) - } else if (it is IncomingError) { - if (model.devMode.value == true) { - showError(it.info) - } else { - showError(it.info.userFacingMsg) - } - } - } - } return ComposeView(requireContext()).apply { setContent { TalerSurface { @@ -66,6 +57,29 @@ class IncomingPullPaymentFragment : Fragment() { } } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + lifecycleScope.launch { + viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) { + peerManager.incomingPullState.collect { + if (it is IncomingAccepted) { + if (transactionManager.selectTransaction(it.transactionId)) { + findNavController().navigate(R.id.action_promptPullPayment_to_transaction_detail_peer) + } else { + findNavController().navigate(R.id.action_promptPullPayment_to_nav_main) + } + } else if (it is IncomingError) { + if (model.devMode.value == true) { + showError(it.info) + } else { + showError(it.info.userFacingMsg) + } + } + } + } + } + } + override fun onStart() { super.onStart() activity?.setTitle(R.string.pay_peer_title) diff --git a/wallet/src/main/java/net/taler/wallet/peer/IncomingPushPaymentFragment.kt b/wallet/src/main/java/net/taler/wallet/peer/IncomingPushPaymentFragment.kt @@ -42,6 +42,7 @@ class IncomingPushPaymentFragment : Fragment() { private val model: MainViewModel by activityViewModels() private val peerManager get() = model.peerManager private val exchangeManager get() = model.exchangeManager + private val transactionManager get() = model.transactionManager override fun onCreateView( inflater: LayoutInflater, @@ -72,7 +73,11 @@ class IncomingPushPaymentFragment : Fragment() { peerManager.incomingPushState.collect { Log.d(TAG, "incomingPushState is $it") if (it is IncomingAccepted) { - findNavController().navigate(R.id.action_promptPushPayment_to_nav_main) + if (transactionManager.selectTransaction(it.transactionId)) { + findNavController().navigate(R.id.action_promptPushPayment_to_transaction_detail_peer) + } else { + findNavController().navigate(R.id.action_promptPushPayment_to_nav_main) + } } else if (it is IncomingError) { if (model.devMode.value == true) { showError(it.info) diff --git a/wallet/src/main/java/net/taler/wallet/peer/IncomingState.kt b/wallet/src/main/java/net/taler/wallet/peer/IncomingState.kt @@ -47,7 +47,9 @@ class IncomingTosReview( class IncomingAccepting(s: IncomingTerms) : IncomingTerms(s.amountRaw, s.amountEffective, s.contractTerms, s.id) -data object IncomingAccepted : IncomingState() +data class IncomingAccepted( + val transactionId: String, +) : IncomingState() data class IncomingError( val info: TalerErrorInfo, diff --git a/wallet/src/main/java/net/taler/wallet/peer/PeerManager.kt b/wallet/src/main/java/net/taler/wallet/peer/PeerManager.kt @@ -260,7 +260,7 @@ class PeerManager( api.request<Unit>("confirmPeerPullDebit") { put("transactionId", terms.id) }.onSuccess { - _incomingPullState.value = IncomingAccepted + _incomingPullState.value = IncomingAccepted(terms.id) }.onError { error -> Log.e(TAG, "got confirmPeerPullDebit error result $error") _incomingPullState.value = IncomingError(error) @@ -317,7 +317,7 @@ class PeerManager( api.request<Unit>("confirmPeerPushCredit") { put("transactionId", terms.id) }.onSuccess { - _incomingPushState.value = IncomingAccepted + _incomingPushState.value = IncomingAccepted(terms.id) }.onError { error -> Log.e(TAG, "got confirmPeerPushCredit error result $error") _incomingPushState.value = IncomingError(error) diff --git a/wallet/src/main/res/navigation/nav_graph.xml b/wallet/src/main/res/navigation/nav_graph.xml @@ -183,6 +183,10 @@ android:id="@+id/action_promptPullPayment_to_nav_main" app:destination="@id/nav_main" app:popUpTo="@id/nav_main" /> + <action + android:id="@+id/action_promptPullPayment_to_transaction_detail_peer" + app:destination="@id/nav_transactions_detail_peer" + app:popUpTo="@id/nav_main" /> </fragment> <fragment @@ -193,6 +197,10 @@ android:id="@+id/action_promptPushPayment_to_nav_main" app:destination="@id/nav_main" app:popUpTo="@id/nav_main" /> + <action + android:id="@+id/action_promptPushPayment_to_transaction_detail_peer" + app:destination="@id/nav_transactions_detail_peer" + app:popUpTo="@id/nav_main" /> </fragment> <fragment