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:
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