[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-taler-android] 03/11: [wallet] Handle "fail" DD37 action and prev
From: |
gnunet |
Subject: |
[taler-taler-android] 03/11: [wallet] Handle "fail" DD37 action and prevent non-deletable transactions from being deleted. |
Date: |
Tue, 11 Jul 2023 16:23:31 +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 b62bd90f86f6fc4ba9e1971df4818a65c9eedada
Author: Iván Ávalos <avalos@disroot.org>
AuthorDate: Tue Jun 20 11:35:26 2023 -0600
[wallet] Handle "fail" DD37 action and prevent non-deletable transactions
from being deleted.
---
.../wallet/transactions/TransactionDetailFragment.kt | 7 ++++++-
.../taler/wallet/transactions/TransactionManager.kt | 20 +++++++++++++++++---
.../wallet/transactions/TransitionsComposable.kt | 14 +++++++-------
wallet/src/main/res/drawable/ic_fail.xml | 5 +++++
wallet/src/main/res/values/strings.xml | 1 +
5 files changed, 36 insertions(+), 11 deletions(-)
diff --git
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt
index 1a709b0..b0f5e1b 100644
---
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt
+++
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt
@@ -83,7 +83,7 @@ abstract class TransactionDetailFragment : Fragment() {
protected fun onTransitionButton(t: Transaction, tt: TransactionAction) {
when (tt) {
- Delete, Abort -> {
+ Delete, Abort, Fail -> {
MaterialAlertDialogBuilder(requireContext(),
R.style.MaterialAlertDialog_Material3)
.setTitle(dialogTitle(tt)!!)
.setMessage(dialogMessage(tt)!!)
@@ -94,6 +94,7 @@ abstract class TransactionDetailFragment : Fragment() {
when (tt) {
Delete -> deleteTransaction(t)
Abort -> abortTransaction(t)
+ Fail -> failTransaction(t)
else -> {}
}
dialog.dismiss()
@@ -122,6 +123,10 @@ abstract class TransactionDetailFragment : Fragment() {
transactionManager.abortTransaction(t.transactionId)
}
+ private fun failTransaction(t: Transaction) {
+ transactionManager.failTransaction(t.transactionId)
+ }
+
private fun suspendTransaction(t: Transaction) {
transactionManager.suspendTransaction(t.transactionId)
}
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 dfe25ad..725f2c5 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
@@ -26,6 +26,7 @@ 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.TransactionAction.Delete
import net.taler.wallet.transactions.TransactionMajorState.Pending
import java.util.LinkedList
@@ -158,6 +159,16 @@ class TransactionManager(
}
}
+ fun failTransaction(transactionId: String) = scope.launch {
+ api.request<Unit>("failTransaction") {
+ put("transactionId", transactionId)
+ }.onError {
+ Log.e(TAG, "Error failTransaction $it")
+ }.onSuccess {
+ loadTransactions()
+ }
+ }
+
fun suspendTransaction(transactionId: String) = scope.launch {
api.request<Unit>("suspendTransaction") {
put("transactionId", transactionId)
@@ -179,9 +190,12 @@ class TransactionManager(
}
fun deleteTransactions(transactionIds: List<String>) {
- // TODO: do NOT delete non-deletable transactions
- transactionIds.forEach { id ->
- deleteTransaction(id)
+ allTransactions[selectedCurrency]?.filter { transaction ->
+ transaction.transactionId in transactionIds
+ }?.forEach { toBeDeletedTx ->
+ if (Delete in toBeDeletedTx.txActions) {
+ deleteTransaction(toBeDeletedTx.transactionId)
+ }
}
}
diff --git
a/wallet/src/main/java/net/taler/wallet/transactions/TransitionsComposable.kt
b/wallet/src/main/java/net/taler/wallet/transactions/TransitionsComposable.kt
index e66de47..3fb43fe 100644
---
a/wallet/src/main/java/net/taler/wallet/transactions/TransitionsComposable.kt
+++
b/wallet/src/main/java/net/taler/wallet/transactions/TransitionsComposable.kt
@@ -37,7 +37,7 @@ import net.taler.wallet.transactions.TransactionAction.*
@OptIn(ExperimentalLayoutApi::class)
@Composable
fun TransitionsComposable(t: Transaction, onTransition: (t: TransactionAction)
-> Unit) {
- FlowRow {
+ FlowRow {
t.txActions.forEach {
TransitionComposable(it, onTransition)
}
@@ -47,16 +47,16 @@ fun TransitionsComposable(t: Transaction, onTransition: (t:
TransactionAction) -
@Composable
fun TransitionComposable(t: TransactionAction, onClick: (t: TransactionAction)
-> Unit) {
// TODO: handle more transitions!
- if (t !in arrayOf(Delete, Retry, Abort, Resume, Suspend)) return
+ if (t !in arrayOf(Delete, Retry, Abort, Fail, Resume, Suspend)) return
Button(
modifier = Modifier.padding(16.dp),
colors = ButtonDefaults.buttonColors(containerColor = when(t) {
Delete -> MaterialTheme.colorScheme.error
Retry -> MaterialTheme.colorScheme.primary
Abort -> MaterialTheme.colorScheme.error
+ Fail -> MaterialTheme.colorScheme.error
Resume -> MaterialTheme.colorScheme.primary
Suspend -> MaterialTheme.colorScheme.primary
- else -> error("Unsupported")
}),
onClick = { onClick(t) },
) {
@@ -66,18 +66,18 @@ fun TransitionComposable(t: TransactionAction, onClick: (t:
TransactionAction) -
Delete -> painterResource(id = R.drawable.ic_delete)
Retry -> painterResource(id = R.drawable.ic_retry)
Abort -> painterResource(id = R.drawable.ic_cancel)
+ Fail -> painterResource(id = R.drawable.ic_fail)
Resume -> painterResource(id = R.drawable.ic_resume)
Suspend -> painterResource(id = R.drawable.ic_suspend)
- else -> error("Unsupported")
},
contentDescription = null,
tint = when (t) {
Delete -> MaterialTheme.colorScheme.onError
Retry -> MaterialTheme.colorScheme.onPrimary
Abort -> MaterialTheme.colorScheme.onError
+ Fail -> MaterialTheme.colorScheme.onError
Resume -> MaterialTheme.colorScheme.onPrimary
Suspend -> MaterialTheme.colorScheme.onPrimary
- else -> error("Unsupported")
},
)
Text(
@@ -86,17 +86,17 @@ fun TransitionComposable(t: TransactionAction, onClick: (t:
TransactionAction) -
Delete -> stringResource(R.string.transactions_delete)
Retry -> stringResource(R.string.transactions_retry)
Abort -> stringResource(R.string.transactions_abort)
+ Fail -> stringResource(id = R.string.transactions_fail)
Resume -> stringResource(R.string.transactions_resume)
Suspend -> stringResource(R.string.transactions_suspend)
- else -> error("Unsupported")
},
color = when (t) {
Delete -> MaterialTheme.colorScheme.onError
Retry -> MaterialTheme.colorScheme.onPrimary
Abort -> MaterialTheme.colorScheme.onError
+ Fail -> MaterialTheme.colorScheme.onError
Resume -> MaterialTheme.colorScheme.onPrimary
Suspend -> MaterialTheme.colorScheme.onPrimary
- else -> error("Unsupported")
},
)
}
diff --git a/wallet/src/main/res/drawable/ic_fail.xml
b/wallet/src/main/res/drawable/ic_fail.xml
new file mode 100644
index 0000000..a25c5ed
--- /dev/null
+++ b/wallet/src/main/res/drawable/ic_fail.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#000000"
+ android:viewportHeight="24" android:viewportWidth="24"
+ android:width="24dp"
xmlns:android="http://schemas.android.com/apk/res/android">
+ <path android:fillColor="@android:color/white"
android:pathData="M14.69,2.21L4.33,11.49c-0.64,0.58 -0.28,1.65
0.58,1.73L13,14l-4.85,6.76c-0.22,0.31 -0.19,0.74 0.08,1.01h0c0.3,0.3 0.77,0.31
1.08,0.02l10.36,-9.28c0.64,-0.58 0.28,-1.65
-0.58,-1.73L11,10l4.85,-6.76c0.22,-0.31 0.19,-0.74 -0.08,-1.01l0,0C15.47,1.93
15,1.92 14.69,2.21z"/>
+</vector>
diff --git a/wallet/src/main/res/values/strings.xml
b/wallet/src/main/res/values/strings.xml
index 716d537..4facfc8 100644
--- a/wallet/src/main/res/values/strings.xml
+++ b/wallet/src/main/res/values/strings.xml
@@ -87,6 +87,7 @@ GNU Taler is immune against many types of fraud, such as
phishing of credit card
<string name="transactions_delete">Delete</string>
<string name="transactions_retry">Retry</string>
<string name="transactions_abort">Abort</string>
+ <string name="transactions_fail">Fail</string>
<string name="transactions_suspend">Suspend</string>
<string name="transactions_resume">Resume</string>
<string name="transactions_select_all">Select All</string>
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-taler-android] branch master updated (e7959e8 -> ef51462), gnunet, 2023/07/11
- [taler-taler-android] 01/11: [wallet] Initial work for DD37 transitions, gnunet, 2023/07/11
- [taler-taler-android] 03/11: [wallet] Handle "fail" DD37 action and prevent non-deletable transactions from being deleted.,
gnunet <=
- [taler-taler-android] 04/11: [wallet] Better error handling for tx actions., gnunet, 2023/07/11
- [taler-taler-android] 02/11: [wallet] Implemented DD37 with the new txActions field, gnunet, 2023/07/11
- [taler-taler-android] 07/11: [wallet] Make DD37 dialog data non-nullable and rename callback, gnunet, 2023/07/11
- [taler-taler-android] 11/11: [wallet] release 0.9.3+p4, gnunet, 2023/07/11
- [taler-taler-android] 09/11: [wallet] Fully remove deprecated status fields, gnunet, 2023/07/11
- [taler-taler-android] 08/11: [wallet] Show suspend/resume only in devMode and rename "fail" to "cancel" in UI, gnunet, 2023/07/11
- [taler-taler-android] 06/11: [wallet] Bump wallet-core to 0.9.3-dev.11, gnunet, 2023/07/11
- [taler-taler-android] 05/11: [wallet] DD37 fixes, gnunet, 2023/07/11
- [taler-taler-android] 10/11: [wallet] some dd37 fixes after merging, gnunet, 2023/07/11