summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorsten Grote <t@grobox.de>2020-08-05 14:31:10 -0300
committerTorsten Grote <t@grobox.de>2020-08-05 14:31:10 -0300
commitb1acd03f70a33f069a321c6755943421330d2d8d (patch)
tree44a4775ab769a8686e16338c1a7eeefe704d8e14
parent35f7ed512ed7445362d6caee1bf60441f4ce979e (diff)
downloadtaler-android-b1acd03f70a33f069a321c6755943421330d2d8d.tar.gz
taler-android-b1acd03f70a33f069a321c6755943421330d2d8d.tar.bz2
taler-android-b1acd03f70a33f069a321c6755943421330d2d8d.zip
[wallet] show more user-friendly error messages for operations
-rw-r--r--wallet/src/main/java/net/taler/wallet/Utils.kt17
-rw-r--r--wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt8
-rw-r--r--wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt2
-rw-r--r--wallet/src/main/java/net/taler/wallet/refund/RefundManager.kt1
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt5
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt4
-rw-r--r--wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt4
-rw-r--r--wallet/src/main/res/values-fr/strings.xml2
-rw-r--r--wallet/src/main/res/values/strings.xml2
9 files changed, 33 insertions, 12 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/Utils.kt b/wallet/src/main/java/net/taler/wallet/Utils.kt
index e2992458..ea01552f 100644
--- a/wallet/src/main/java/net/taler/wallet/Utils.kt
+++ b/wallet/src/main/java/net/taler/wallet/Utils.kt
@@ -30,6 +30,7 @@ import android.widget.Toast
import android.widget.Toast.LENGTH_LONG
import androidx.annotation.RequiresApi
import com.google.zxing.integration.android.IntentIntegrator
+import org.json.JSONObject
fun scanQrCode(activity: Activity) {
IntentIntegrator(activity).apply {
@@ -90,6 +91,22 @@ private fun connectToWifiDeprecated(context: Context, ssid: String) {
}
}
+fun getErrorString(json: JSONObject): String {
+ return StringBuilder().apply {
+ append(json.getString("talerErrorCode"))
+ append(" ")
+ append(json.getString("message"))
+ json.optJSONObject("details")?.let { details ->
+ details.optJSONObject("errorResponse")?.let { errorResponse ->
+ append("\n\n")
+ append(errorResponse.optString("code"))
+ append(" ")
+ append(errorResponse.optString("hint"))
+ }
+ }
+ }.toString()
+}
+
fun cleanExchange(exchange: String) = exchange.let {
if (it.startsWith("https://")) it.substring(8) else it
}.trimEnd('/')
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 2427afb1..db21da4f 100644
--- a/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt
@@ -26,6 +26,7 @@ import net.taler.common.Amount
import net.taler.common.ContractTerms
import net.taler.wallet.TAG
import net.taler.wallet.backend.WalletBackendApi
+import net.taler.wallet.getErrorString
import net.taler.wallet.payment.PayStatus.AlreadyPaid
import net.taler.wallet.payment.PayStatus.InsufficientBalance
import net.taler.wallet.payment.PreparePayResponse.AlreadyConfirmedResponse
@@ -71,7 +72,7 @@ class PaymentManager(
val args = JSONObject(mapOf("talerPayUri" to url))
walletBackendApi.sendRequest("preparePay", args) { isError, result ->
if (isError) {
- handleError("preparePay", result.toString(2))
+ handleError("preparePay", getErrorString(result))
return@sendRequest
}
val response: PreparePayResponse = mapper.readValue(result.toString())
@@ -84,6 +85,7 @@ class PaymentManager(
}
}
+ // TODO validate product images (or leave to wallet-core?)
private fun getContractTerms(json: JSONObject): ContractTerms {
val terms: ContractTerms = mapper.readValue(json.getString("contractTermsRaw"))
// validate product images
@@ -101,7 +103,7 @@ class PaymentManager(
val args = JSONObject(mapOf("proposalId" to proposalId))
walletBackendApi.sendRequest("confirmPay", args) { isError, result ->
if (isError) {
- handleError("preparePay", result.toString())
+ handleError("preparePay", getErrorString(result))
return@sendRequest
}
mPayStatus.postValue(PayStatus.Success(currency))
@@ -124,7 +126,7 @@ class PaymentManager(
walletBackendApi.sendRequest("abortProposal", args) { isError, result ->
if (isError) {
- handleError("abortProposal", result.toString(2))
+ handleError("abortProposal", getErrorString(result))
Log.e(TAG, "received error response to abortProposal")
return@sendRequest
}
diff --git a/wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt b/wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt
index 7027687e..df778ed5 100644
--- a/wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt
@@ -34,7 +34,7 @@ class PendingOperationsManager(private val walletBackendApi: WalletBackendApi) {
internal fun getPending() {
walletBackendApi.sendRequest("getPendingOperations") { isError, result ->
if (isError) {
- Log.i(TAG, "got getPending error result: $result")
+ Log.i(TAG, "got getPending error result: ${result.toString(2)}")
return@sendRequest
}
Log.i(TAG, "got getPending result")
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 21c634e9..55934868 100644
--- a/wallet/src/main/java/net/taler/wallet/refund/RefundManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/refund/RefundManager.kt
@@ -36,6 +36,7 @@ class RefundManager(private val walletBackendApi: WalletBackendApi) {
walletBackendApi.sendRequest("applyRefund", args) { isError, result ->
if (isError) {
Log.e(TAG, "Refund Error: $result")
+ // TODO show error string
liveData.postValue(RefundStatus.Error)
} else {
Log.e(TAG, "Refund Success: $result")
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 bd37b37b..8ec39141 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
@@ -27,12 +27,13 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import net.taler.wallet.backend.WalletBackendApi
+import net.taler.wallet.getErrorString
import org.json.JSONObject
import java.util.HashMap
import java.util.LinkedList
sealed class TransactionsResult {
- object Error : TransactionsResult()
+ class Error(val msg: String) : TransactionsResult()
class Success(val transactions: List<Transaction>) : TransactionsResult()
}
@@ -72,7 +73,7 @@ class TransactionManager(
searchQuery?.let { request.put("search", it) }
walletBackendApi.sendRequest("getTransactions", request) { isError, result ->
if (isError) {
- liveData.postValue(TransactionsResult.Error)
+ liveData.postValue(TransactionsResult.Error(getErrorString(result)))
mProgress.postValue(false)
} else {
val currencyToUpdate = if (searchQuery == null) currency else null
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 2ae58c32..8d47a3fd 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt
@@ -160,9 +160,9 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode.
}
private fun onTransactionsResult(result: TransactionsResult) = when (result) {
- TransactionsResult.Error -> {
+ is TransactionsResult.Error -> {
list.fadeOut()
- emptyState.text = getString(R.string.transactions_error)
+ emptyState.text = getString(R.string.transactions_error, result.msg)
emptyState.fadeIn()
}
is TransactionsResult.Success -> {
diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt
index e14a747f..6fb93901 100644
--- a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt
@@ -26,6 +26,7 @@ import net.taler.wallet.TAG
import net.taler.wallet.backend.WalletBackendApi
import net.taler.wallet.exchanges.ExchangeFees
import net.taler.wallet.exchanges.ExchangeItem
+import net.taler.wallet.getErrorString
import net.taler.wallet.withdraw.WithdrawStatus.ReceivedDetails
import org.json.JSONObject
@@ -196,8 +197,7 @@ class WithdrawManager(
@UiThread
private fun handleError(operation: String, result: JSONObject) {
Log.e(TAG, "Error $operation ${result.toString(2)}")
- val message = if (result.has("message")) result.getString("message") else null
- withdrawStatus.value = WithdrawStatus.Error(message)
+ withdrawStatus.value = WithdrawStatus.Error(getErrorString(result))
}
}
diff --git a/wallet/src/main/res/values-fr/strings.xml b/wallet/src/main/res/values-fr/strings.xml
index c4cac458..a96e23a6 100644
--- a/wallet/src/main/res/values-fr/strings.xml
+++ b/wallet/src/main/res/values-fr/strings.xml
@@ -26,7 +26,7 @@
<string name="balances_inbound_label">entrant</string>
<string name="transactions_title">Transactions</string>
<string name="transactions_empty">Vous n\'avez aucune transaction</string>
- <string name="transactions_error">Impossible de charger les transactions</string>
+ <string name="transactions_error">Impossible de charger les transactions\n\n%s</string>
<string name="transactions_detail_title">Transaction</string>
<string name="transactions_detail_title_balance">Solde : %s</string>
<string name="transactions_delete">Supprimer</string>
diff --git a/wallet/src/main/res/values/strings.xml b/wallet/src/main/res/values/strings.xml
index 1e629a60..1715ab37 100644
--- a/wallet/src/main/res/values/strings.xml
+++ b/wallet/src/main/res/values/strings.xml
@@ -70,7 +70,7 @@ GNU Taler is immune against many types of fraud, such as phishing of credit card
<string name="transactions_title">Transactions</string>
<string name="transactions_empty">You don\'t have any transactions</string>
<string name="transactions_empty_search">No transactions found. Try a different search.</string>
- <string name="transactions_error">Could not load transactions</string>
+ <string name="transactions_error">Could not load transactions\n\n%s</string>
<string name="transactions_detail_title">Transaction</string>
<string name="transactions_detail_title_balance">Balance: %s</string>
<string name="transactions_delete">Delete</string>