gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-taler-android] 01/03: [wallet] Show errors as JSON


From: gnunet
Subject: [taler-taler-android] 01/03: [wallet] Show errors as JSON
Date: Wed, 28 Jun 2023 14:07:40 +0200

This is an automated email from the git hooks/post-receive script.

torsten-grote pushed a commit to branch master
in repository taler-android.

commit 43c30b4482b68a8b5073afec66b68b07b30be436
Author: Iván Ávalos <avalos@disroot.org>
AuthorDate: Fri Apr 28 23:03:38 2023 -0600

    [wallet] Show errors as JSON
    
    bug 0007606
---
 .../src/main/java/net/taler/wallet/MainActivity.kt |  7 +++++-
 .../main/java/net/taler/wallet/MainViewModel.kt    |  2 +-
 wallet/src/main/java/net/taler/wallet/Utils.kt     | 25 ++++++++++++++++++++++
 .../net/taler/wallet/deposit/DepositFragment.kt    |  7 +++++-
 .../net/taler/wallet/deposit/DepositManager.kt     |  6 +++---
 .../java/net/taler/wallet/deposit/DepositState.kt  |  3 ++-
 .../wallet/deposit/MakeBitcoinDepositComposable.kt |  2 +-
 .../taler/wallet/deposit/MakeDepositComposable.kt  |  2 +-
 .../taler/wallet/exchanges/ExchangeListFragment.kt |  6 ++++++
 .../net/taler/wallet/exchanges/ExchangeManager.kt  |  8 ++++++-
 .../net/taler/wallet/payment/PaymentManager.kt     |  4 ++--
 .../taler/wallet/payment/PromptPaymentFragment.kt  |  6 +++++-
 .../wallet/peer/IncomingPullPaymentFragment.kt     |  3 +++
 .../wallet/peer/IncomingPushPaymentFragment.kt     |  3 +++
 .../net/taler/wallet/peer/OutgoingPullFragment.kt  | 13 +++++++++++
 .../net/taler/wallet/peer/OutgoingPushFragment.kt  | 13 +++++++++++
 .../java/net/taler/wallet/refund/RefundManager.kt  |  5 +++--
 .../wallet/transactions/TransactionManager.kt      |  5 +++--
 .../wallet/transactions/TransactionsFragment.kt    |  2 +-
 19 files changed, 104 insertions(+), 18 deletions(-)

diff --git a/wallet/src/main/java/net/taler/wallet/MainActivity.kt 
b/wallet/src/main/java/net/taler/wallet/MainActivity.kt
index bf95475..c9901a6 100644
--- a/wallet/src/main/java/net/taler/wallet/MainActivity.kt
+++ b/wallet/src/main/java/net/taler/wallet/MainActivity.kt
@@ -139,6 +139,7 @@ class MainActivity : AppCompatActivity(), 
OnNavigationItemSelectedListener,
             }
             if (it) barcodeLauncher.launch(scanOptions)
         })
+
     }
 
     @Deprecated("Deprecated in Java")
@@ -295,7 +296,11 @@ class MainActivity : AppCompatActivity(), 
OnNavigationItemSelectedListener,
         model.showProgressBar.value = false
         when (status) {
             is RefundStatus.Error -> {
-                showError(R.string.refund_error, status.msg)
+                if (model.devMode.value == false) {
+                    showError(R.string.refund_error, 
status.error.userFacingMsg)
+                } else {
+                    showError(status.error)
+                }
             }
             is RefundStatus.Success -> {
                 val amount = status.response.amountRefundGranted
diff --git a/wallet/src/main/java/net/taler/wallet/MainViewModel.kt 
b/wallet/src/main/java/net/taler/wallet/MainViewModel.kt
index 2ad6f6b..e8b9d02 100644
--- a/wallet/src/main/java/net/taler/wallet/MainViewModel.kt
+++ b/wallet/src/main/java/net/taler/wallet/MainViewModel.kt
@@ -34,6 +34,7 @@ import net.taler.common.toEvent
 import net.taler.wallet.accounts.AccountManager
 import net.taler.wallet.backend.NotificationPayload
 import net.taler.wallet.backend.NotificationReceiver
+import net.taler.wallet.backend.TalerErrorInfo
 import net.taler.wallet.backend.VersionReceiver
 import net.taler.wallet.backend.WalletBackendApi
 import net.taler.wallet.backend.WalletCoreVersion
@@ -121,7 +122,6 @@ class MainViewModel(
         val response = api.request("getBalances", BalanceResponse.serializer())
         showProgressBar.value = false
         response.onError {
-            // TODO expose in UI
             Log.e(TAG, "Error retrieving balances: $it")
         }
         response.onSuccess {
diff --git a/wallet/src/main/java/net/taler/wallet/Utils.kt 
b/wallet/src/main/java/net/taler/wallet/Utils.kt
index 435aa96..9dfe541 100644
--- a/wallet/src/main/java/net/taler/wallet/Utils.kt
+++ b/wallet/src/main/java/net/taler/wallet/Utils.kt
@@ -32,8 +32,13 @@ import android.widget.Toast.LENGTH_LONG
 import androidx.annotation.RequiresApi
 import androidx.browser.customtabs.CustomTabsIntent
 import androidx.core.content.getSystemService
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentActivity
+import kotlinx.serialization.encodeToString
+import kotlinx.serialization.json.Json
 import net.taler.common.Amount
 import net.taler.common.AmountParserException
+import net.taler.common.showError
 import net.taler.common.startActivitySafe
 import net.taler.wallet.backend.TalerErrorCode.WALLET_WITHDRAWAL_KYC_REQUIRED
 import net.taler.wallet.backend.TalerErrorInfo
@@ -124,4 +129,24 @@ fun launchInAppBrowser(context: Context, url: String) {
     val intent = builder.build().intent
     intent.data = Uri.parse(url)
     context.startActivitySafe(intent)
+}
+
+fun Fragment.showError(error: TalerErrorInfo) {
+    @Suppress("OPT_IN_USAGE")
+    val json = Json {
+        prettyPrint = true
+        prettyPrintIndent = "  "
+    }
+    val message = json.encodeToString(error)
+    this@showError.showError(message)
+}
+
+fun FragmentActivity.showError(error: TalerErrorInfo) {
+    @Suppress("OPT_IN_USAGE")
+    val json = Json {
+        prettyPrint = true
+        prettyPrintIndent = "  "
+    }
+    val message = json.encodeToString(error)
+    this@showError.showError(message)
 }
\ No newline at end of file
diff --git a/wallet/src/main/java/net/taler/wallet/deposit/DepositFragment.kt 
b/wallet/src/main/java/net/taler/wallet/deposit/DepositFragment.kt
index c4b302f..d773293 100644
--- a/wallet/src/main/java/net/taler/wallet/deposit/DepositFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/deposit/DepositFragment.kt
@@ -32,6 +32,7 @@ import net.taler.wallet.MainViewModel
 import net.taler.wallet.R
 import net.taler.wallet.compose.TalerSurface
 import net.taler.wallet.compose.collectAsStateLifecycleAware
+import net.taler.wallet.showError
 
 class DepositFragment : Fragment() {
     private val model: MainViewModel by activityViewModels()
@@ -80,7 +81,11 @@ class DepositFragment : Fragment() {
         lifecycleScope.launchWhenStarted {
             depositManager.depositState.collect { state ->
                 if (state is DepositState.Error) {
-                    showError(state.msg)
+                    if (model.devMode.value == false) {
+                        showError(state.error.userFacingMsg)
+                    } else {
+                        showError(state.error)
+                    }
                 } else if (state is DepositState.Success) {
                     
findNavController().navigate(R.id.action_nav_deposit_to_nav_main)
                 }
diff --git a/wallet/src/main/java/net/taler/wallet/deposit/DepositManager.kt 
b/wallet/src/main/java/net/taler/wallet/deposit/DepositManager.kt
index 91f7ad5..35cca1c 100644
--- a/wallet/src/main/java/net/taler/wallet/deposit/DepositManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/deposit/DepositManager.kt
@@ -58,7 +58,7 @@ class DepositManager(
                     put("iban", iban)
                 }.onError {
                     Log.e(TAG, "Error validateIban $it")
-                    mDepositState.value = DepositState.Error(it.userFacingMsg)
+                    mDepositState.value = DepositState.Error(it)
                 }.onSuccess { response ->
                     if (response.valid) {
                         // only prepare/make deposit, if IBAN is valid
@@ -112,7 +112,7 @@ class DepositManager(
                 put("amount", amount.toJSONString())
             }.onError {
                 Log.e(TAG, "Error prepareDeposit $it")
-                mDepositState.value = DepositState.Error(it.userFacingMsg)
+                mDepositState.value = DepositState.Error(it)
             }.onSuccess {
                 mDepositState.value = DepositState.FeesChecked(
                     totalDepositCost = it.totalDepositCost,
@@ -138,7 +138,7 @@ class DepositManager(
                 put("amount", amount.toJSONString())
             }.onError {
                 Log.e(TAG, "Error createDepositGroup $it")
-                mDepositState.value = DepositState.Error(it.userFacingMsg)
+                mDepositState.value = DepositState.Error(it)
             }.onSuccess {
                 mDepositState.value = DepositState.Success
             }
diff --git a/wallet/src/main/java/net/taler/wallet/deposit/DepositState.kt 
b/wallet/src/main/java/net/taler/wallet/deposit/DepositState.kt
index a019757..168378f 100644
--- a/wallet/src/main/java/net/taler/wallet/deposit/DepositState.kt
+++ b/wallet/src/main/java/net/taler/wallet/deposit/DepositState.kt
@@ -17,6 +17,7 @@
 package net.taler.wallet.deposit
 
 import net.taler.common.Amount
+import net.taler.wallet.backend.TalerErrorInfo
 
 sealed class DepositState {
 
@@ -43,6 +44,6 @@ sealed class DepositState {
 
     object Success : DepositState()
 
-    class Error(val msg: String) : DepositState()
+    class Error(val error: TalerErrorInfo) : DepositState()
 
 }
diff --git 
a/wallet/src/main/java/net/taler/wallet/deposit/MakeBitcoinDepositComposable.kt 
b/wallet/src/main/java/net/taler/wallet/deposit/MakeBitcoinDepositComposable.kt
index 4505762..d961f34 100644
--- 
a/wallet/src/main/java/net/taler/wallet/deposit/MakeBitcoinDepositComposable.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/deposit/MakeBitcoinDepositComposable.kt
@@ -123,7 +123,7 @@ fun MakeBitcoinDepositComposable(
                 modifier = Modifier.padding(16.dp),
                 fontSize = 18.sp,
                 color = MaterialTheme.colorScheme.error,
-                text = (state as? DepositState.Error)?.msg ?: "",
+                text = (state as? DepositState.Error)?.error?.userFacingMsg ?: 
"",
             )
         }
         val focusManager = LocalFocusManager.current
diff --git 
a/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt 
b/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt
index d47970f..d14ed96 100644
--- a/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt
+++ b/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt
@@ -200,7 +200,7 @@ fun MakeDepositComposable(
                 modifier = Modifier.padding(16.dp),
                 fontSize = 18.sp,
                 color = MaterialTheme.colorScheme.error,
-                text = (state as? DepositState.Error)?.msg ?: "",
+                text = (state as? DepositState.Error)?.error?.userFacingMsg ?: 
"",
             )
         }
         val focusManager = LocalFocusManager.current
diff --git 
a/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeListFragment.kt 
b/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeListFragment.kt
index 21e31f4..7e1b7cc 100644
--- a/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeListFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeListFragment.kt
@@ -33,6 +33,7 @@ import net.taler.common.fadeOut
 import net.taler.wallet.MainViewModel
 import net.taler.wallet.R
 import net.taler.wallet.databinding.FragmentExchangeListBinding
+import net.taler.wallet.showError
 
 open class ExchangeListFragment : Fragment(), ExchangeClickListener {
 
@@ -68,6 +69,11 @@ open class ExchangeListFragment : Fragment(), 
ExchangeClickListener {
         exchangeManager.exchanges.observe(viewLifecycleOwner) { exchanges ->
             onExchangeUpdate(exchanges)
         }
+        exchangeManager.errorEvent.observe(viewLifecycleOwner, EventObserver { 
error ->
+            if (model.devMode.value == true) {
+                showError(error)
+            }
+        })
         exchangeManager.addError.observe(viewLifecycleOwner, EventObserver { 
error ->
             if (error) onAddExchangeFailed()
         })
diff --git a/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt 
b/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt
index 4a57068..a97e188 100644
--- a/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt
@@ -28,6 +28,7 @@ import kotlinx.serialization.Serializable
 import net.taler.common.Event
 import net.taler.common.toEvent
 import net.taler.wallet.TAG
+import net.taler.wallet.backend.TalerErrorInfo
 import net.taler.wallet.backend.WalletBackendApi
 
 @Serializable
@@ -49,6 +50,9 @@ class ExchangeManager(
     private val mAddError = MutableLiveData<Event<Boolean>>()
     val addError: LiveData<Event<Boolean>> = mAddError
 
+    private val mErrorEvent = MutableLiveData<Event<TalerErrorInfo>>()
+    val errorEvent: LiveData<Event<TalerErrorInfo>> = mErrorEvent
+
     var withdrawalExchange: ExchangeItem? = null
 
     private fun list(): LiveData<List<ExchangeItem>> {
@@ -56,6 +60,7 @@ class ExchangeManager(
         scope.launch {
             val response = api.request("listExchanges", 
ExchangeListResponse.serializer())
             response.onError {
+                mErrorEvent.value = it.toEvent()
                 throw AssertionError("Wallet core failed to return exchanges! 
${it.userFacingMsg}")
             }.onSuccess {
                 Log.d(TAG, "Exchange list: ${it.exchanges}")
@@ -71,8 +76,9 @@ class ExchangeManager(
         api.request<Unit>("addExchange") {
             put("exchangeBaseUrl", exchangeUrl)
         }.onError {
-            mProgress.value = false
             Log.e(TAG, "Error adding exchange: $it")
+            mProgress.value = false
+            mErrorEvent.value = it.toEvent()
             mAddError.value = true.toEvent()
         }.onSuccess {
             mProgress.value = false
diff --git a/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt 
b/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt
index 53cb259..c280304 100644
--- a/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt
@@ -52,7 +52,7 @@ sealed class PayStatus {
 
     // TODO bring user to fulfilment URI
     object AlreadyPaid : PayStatus()
-    data class Error(val error: String) : PayStatus()
+    data class Error(val error: TalerErrorInfo) : PayStatus()
     data class Success(val currency: String) : PayStatus()
 }
 
@@ -121,7 +121,7 @@ class PaymentManager(
 
     private fun handleError(operation: String, error: TalerErrorInfo) {
         Log.e(TAG, "got $operation error result $error")
-        mPayStatus.value = PayStatus.Error(error.userFacingMsg)
+        mPayStatus.value = PayStatus.Error(error)
     }
 
 }
diff --git 
a/wallet/src/main/java/net/taler/wallet/payment/PromptPaymentFragment.kt 
b/wallet/src/main/java/net/taler/wallet/payment/PromptPaymentFragment.kt
index 7ed1bab..609adb4 100644
--- a/wallet/src/main/java/net/taler/wallet/payment/PromptPaymentFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/payment/PromptPaymentFragment.kt
@@ -35,6 +35,7 @@ import net.taler.common.fadeOut
 import net.taler.wallet.MainViewModel
 import net.taler.wallet.R
 import net.taler.wallet.databinding.FragmentPromptPaymentBinding
+import net.taler.wallet.showError
 
 /**
  * Show a payment and ask the user to accept/decline.
@@ -118,7 +119,10 @@ class PromptPaymentFragment : Fragment(), 
ProductImageClickListener {
             }
             is PayStatus.Error -> {
                 showLoading(false)
-                ui.details.errorView.text = getString(R.string.payment_error, 
payStatus.error)
+                if (model.devMode.value == true) {
+                    showError(payStatus.error)
+                }
+                ui.details.errorView.text = getString(R.string.payment_error, 
payStatus.error.userFacingMsg)
                 ui.details.errorView.fadeIn()
             }
             is PayStatus.None -> {
diff --git 
a/wallet/src/main/java/net/taler/wallet/peer/IncomingPullPaymentFragment.kt 
b/wallet/src/main/java/net/taler/wallet/peer/IncomingPullPaymentFragment.kt
index 3aa0963..87abb47 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/IncomingPullPaymentFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/IncomingPullPaymentFragment.kt
@@ -29,6 +29,7 @@ import net.taler.wallet.MainViewModel
 import net.taler.wallet.R
 import net.taler.wallet.compose.TalerSurface
 import net.taler.wallet.compose.collectAsStateLifecycleAware
+import net.taler.wallet.showError
 
 class IncomingPullPaymentFragment : Fragment() {
     private val model: MainViewModel by activityViewModels()
@@ -43,6 +44,8 @@ class IncomingPullPaymentFragment : Fragment() {
             peerManager.incomingPullState.collect {
                 if (it is IncomingAccepted) {
                     
findNavController().navigate(R.id.action_promptPullPayment_to_nav_main)
+                } else if (it is IncomingError) {
+                    showError(it.info)
                 }
             }
         }
diff --git 
a/wallet/src/main/java/net/taler/wallet/peer/IncomingPushPaymentFragment.kt 
b/wallet/src/main/java/net/taler/wallet/peer/IncomingPushPaymentFragment.kt
index 736ccd5..118104e 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/IncomingPushPaymentFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/IncomingPushPaymentFragment.kt
@@ -29,6 +29,7 @@ import net.taler.wallet.MainViewModel
 import net.taler.wallet.R
 import net.taler.wallet.compose.TalerSurface
 import net.taler.wallet.compose.collectAsStateLifecycleAware
+import net.taler.wallet.showError
 
 class IncomingPushPaymentFragment : Fragment() {
     private val model: MainViewModel by activityViewModels()
@@ -43,6 +44,8 @@ class IncomingPushPaymentFragment : Fragment() {
             peerManager.incomingPushState.collect {
                 if (it is IncomingAccepted) {
                     
findNavController().navigate(R.id.action_promptPushPayment_to_nav_main)
+                } else if (it is IncomingError) {
+                    showError(it.info)
                 }
             }
         }
diff --git a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullFragment.kt 
b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullFragment.kt
index 565aeb1..7b1eee8 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullFragment.kt
@@ -23,6 +23,7 @@ import android.view.ViewGroup
 import androidx.compose.ui.platform.ComposeView
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.activityViewModels
+import androidx.lifecycle.lifecycleScope
 import androidx.navigation.findNavController
 import net.taler.common.Amount
 import net.taler.wallet.MainViewModel
@@ -30,6 +31,7 @@ import net.taler.wallet.R
 import net.taler.wallet.compose.TalerSurface
 import net.taler.wallet.compose.collectAsStateLifecycleAware
 import net.taler.wallet.exchanges.ExchangeItem
+import net.taler.wallet.showError
 
 class OutgoingPullFragment : Fragment() {
     private val model: MainViewModel by activityViewModels()
@@ -66,6 +68,17 @@ class OutgoingPullFragment : Fragment() {
         }
     }
 
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        lifecycleScope.launchWhenStarted {
+            peerManager.pullState.collect {
+                if (it is OutgoingError && model.devMode.value == true) {
+                    showError(it.info)
+                }
+            }
+        }
+    }
+
     override fun onStart() {
         super.onStart()
         activity?.setTitle(R.string.receive_peer_title)
diff --git a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushFragment.kt 
b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushFragment.kt
index 255aee5..c586a1d 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushFragment.kt
@@ -24,6 +24,7 @@ import androidx.activity.OnBackPressedCallback
 import androidx.compose.ui.platform.ComposeView
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.activityViewModels
+import androidx.lifecycle.lifecycleScope
 import androidx.navigation.findNavController
 import androidx.navigation.fragment.findNavController
 import net.taler.common.Amount
@@ -31,6 +32,7 @@ import net.taler.wallet.MainViewModel
 import net.taler.wallet.R
 import net.taler.wallet.compose.TalerSurface
 import net.taler.wallet.compose.collectAsStateLifecycleAware
+import net.taler.wallet.showError
 
 class OutgoingPushFragment : Fragment() {
     private val model: MainViewModel by activityViewModels()
@@ -80,6 +82,17 @@ class OutgoingPushFragment : Fragment() {
         }
     }
 
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        lifecycleScope.launchWhenStarted {
+            peerManager.pushState.collect {
+                if (it is OutgoingError && model.devMode.value == true) {
+                    showError(it.info)
+                }
+            }
+        }
+    }
+
     override fun onStart() {
         super.onStart()
         activity?.setTitle(R.string.send_peer_title)
diff --git a/wallet/src/main/java/net/taler/wallet/refund/RefundManager.kt 
b/wallet/src/main/java/net/taler/wallet/refund/RefundManager.kt
index f3c41e8..29f18c7 100644
--- a/wallet/src/main/java/net/taler/wallet/refund/RefundManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/refund/RefundManager.kt
@@ -22,10 +22,11 @@ import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.launch
 import kotlinx.serialization.Serializable
 import net.taler.common.Amount
+import net.taler.wallet.backend.TalerErrorInfo
 import net.taler.wallet.backend.WalletBackendApi
 
 sealed class RefundStatus {
-    data class Error(val msg: String) : RefundStatus()
+    data class Error(val error: TalerErrorInfo) : RefundStatus()
     data class Success(val response: RefundResponse) : RefundStatus()
 }
 
@@ -48,7 +49,7 @@ class RefundManager(
             api.request("applyRefund", RefundResponse.serializer()) {
                 put("talerRefundUri", refundUri)
             }.onError {
-                liveData.postValue(RefundStatus.Error(it.userFacingMsg))
+                liveData.postValue(RefundStatus.Error(it))
             }.onSuccess {
                 liveData.postValue(RefundStatus.Success(it))
             }
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
index fcc7787..ed4c4da 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
@@ -24,12 +24,13 @@ import androidx.lifecycle.switchMap
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.launch
 import net.taler.wallet.TAG
+import net.taler.wallet.backend.TalerErrorInfo
 import net.taler.wallet.backend.WalletBackendApi
 import net.taler.wallet.transactions.ExtendedStatus.Pending
 import java.util.LinkedList
 
 sealed class TransactionsResult {
-    class Error(val msg: String) : TransactionsResult()
+    class Error(val error: TalerErrorInfo) : TransactionsResult()
     class Success(val transactions: List<Transaction>) : TransactionsResult()
 }
 
@@ -72,7 +73,7 @@ class TransactionManager(
             if (searchQuery != null) put("search", searchQuery)
             put("currency", currency)
         }.onError {
-            liveData.postValue(TransactionsResult.Error(it.userFacingMsg))
+            liveData.postValue(TransactionsResult.Error(it))
             mProgress.postValue(false)
         }.onSuccess { result ->
             val transactions = LinkedList(result.transactions)
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt
index 5dff704..bc3c722 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt
@@ -198,7 +198,7 @@ class TransactionsFragment : Fragment(), 
OnTransactionClickListener, ActionMode.
     private fun onTransactionsResult(result: TransactionsResult) = when 
(result) {
         is TransactionsResult.Error -> {
             ui.list.fadeOut()
-            ui.emptyState.text = getString(R.string.transactions_error, 
result.msg)
+            ui.emptyState.text = getString(R.string.transactions_error, 
result.error.userFacingMsg)
             ui.emptyState.fadeIn()
         }
         is TransactionsResult.Success -> {

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]