gnunet-svn
[Top][All Lists]
Advanced

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

[taler-taler-android] branch master updated (2e255f7 -> 4d2b5a6)


From: gnunet
Subject: [taler-taler-android] branch master updated (2e255f7 -> 4d2b5a6)
Date: Wed, 28 Jun 2023 14:07:39 +0200

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

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

    from 2e255f7  [wallet] rename InitiatePeerPushDebitResponse
     new 43c30b4  [wallet] Show errors as JSON
     new 615b7da  [wallet] Handle add and list exchange errors separately
     new 4d2b5a6  [wallet] small JSON error fixup

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../src/main/java/net/taler/wallet/MainActivity.kt |  6 ++++-
 .../main/java/net/taler/wallet/MainViewModel.kt    |  2 +-
 wallet/src/main/java/net/taler/wallet/Utils.kt     | 27 +++++++++++++++++++++-
 .../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 | 16 ++++++++++++-
 .../net/taler/wallet/exchanges/ExchangeManager.kt  | 15 ++++++++----
 .../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 +-
 wallet/src/main/res/values/strings.xml             |  1 +
 20 files changed, 117 insertions(+), 24 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..e0c2419 100644
--- a/wallet/src/main/java/net/taler/wallet/MainActivity.kt
+++ b/wallet/src/main/java/net/taler/wallet/MainActivity.kt
@@ -295,7 +295,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 == true) {
+                    showError(status.error)
+                } else {
+                    showError(R.string.refund_error, 
status.error.userFacingMsg)
+                }
             }
             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..d1cdf8c 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)
-}
\ No newline at end of file
+}
+
+fun Fragment.showError(error: TalerErrorInfo) {
+    @Suppress("OPT_IN_USAGE")
+    val json = Json {
+        prettyPrint = true
+        prettyPrintIndent = "  "
+    }
+    val message = json.encodeToString(error)
+    showError(message)
+}
+
+fun FragmentActivity.showError(error: TalerErrorInfo) {
+    @Suppress("OPT_IN_USAGE")
+    val json = Json {
+        prettyPrint = true
+        prettyPrintIndent = "  "
+    }
+    val message = json.encodeToString(error)
+    showError(message)
+}
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..439ec2f 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 {
 
@@ -69,7 +70,16 @@ open class ExchangeListFragment : Fragment(), 
ExchangeClickListener {
             onExchangeUpdate(exchanges)
         }
         exchangeManager.addError.observe(viewLifecycleOwner, EventObserver { 
error ->
-            if (error) onAddExchangeFailed()
+            onAddExchangeFailed()
+            if (model.devMode.value == true) {
+                showError(error)
+            }
+        })
+        exchangeManager.listError.observe(viewLifecycleOwner, EventObserver { 
error ->
+            onListExchangeFailed()
+            if (model.devMode.value == true) {
+                showError(error)
+            }
         })
     }
 
@@ -88,6 +98,10 @@ open class ExchangeListFragment : Fragment(), 
ExchangeClickListener {
         Toast.makeText(requireContext(), R.string.exchange_add_error, 
LENGTH_LONG).show()
     }
 
+    private fun onListExchangeFailed() {
+        Toast.makeText(requireContext(), R.string.exchange_list_error, 
LENGTH_LONG).show()
+    }
+
     override fun onExchangeSelected(item: ExchangeItem) {
         throw AssertionError("must not get triggered here")
     }
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..65f5c5c 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
@@ -46,8 +47,11 @@ class ExchangeManager(
     private val mExchanges = MutableLiveData<List<ExchangeItem>>()
     val exchanges: LiveData<List<ExchangeItem>> get() = list()
 
-    private val mAddError = MutableLiveData<Event<Boolean>>()
-    val addError: LiveData<Event<Boolean>> = mAddError
+    private val mAddError = MutableLiveData<Event<TalerErrorInfo>>()
+    val addError: LiveData<Event<TalerErrorInfo>> = mAddError
+
+    private val mListError = MutableLiveData<Event<TalerErrorInfo>>()
+    val listError: LiveData<Event<TalerErrorInfo>> = mListError
 
     var withdrawalExchange: ExchangeItem? = null
 
@@ -56,7 +60,8 @@ class ExchangeManager(
         scope.launch {
             val response = api.request("listExchanges", 
ExchangeListResponse.serializer())
             response.onError {
-                throw AssertionError("Wallet core failed to return exchanges! 
${it.userFacingMsg}")
+                mProgress.value = false
+                mListError.value = it.toEvent()
             }.onSuccess {
                 Log.d(TAG, "Exchange list: ${it.exchanges}")
                 mProgress.value = false
@@ -71,9 +76,9 @@ class ExchangeManager(
         api.request<Unit>("addExchange") {
             put("exchangeBaseUrl", exchangeUrl)
         }.onError {
-            mProgress.value = false
             Log.e(TAG, "Error adding exchange: $it")
-            mAddError.value = true.toEvent()
+            mProgress.value = false
+            mAddError.value = it.toEvent()
         }.onSuccess {
             mProgress.value = false
             Log.d(TAG, "Exchange $exchangeUrl added")
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 -> {
diff --git a/wallet/src/main/res/values/strings.xml 
b/wallet/src/main/res/values/strings.xml
index 70b89c5..185a723 100644
--- a/wallet/src/main/res/values/strings.xml
+++ b/wallet/src/main/res/values/strings.xml
@@ -207,6 +207,7 @@ GNU Taler is immune against many types of fraud, such as 
phishing of credit card
     <string name="exchange_list_add">Add exchange</string>
     <string name="exchange_add_url">Enter address of exchange</string>
     <string name="exchange_add_error">Could not add exchange</string>
+    <string name="exchange_list_error">Could not list exchanges</string>
     <string name="exchange_menu_manual_withdraw">Withdraw</string>
 
     <string name="exchange_fee_withdrawal_fee_label">Withdrawal Fee:</string>

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