gnunet-svn
[Top][All Lists]
Advanced

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

[taler-taler-android] 10/11: [wallet] some dd37 fixes after merging


From: gnunet
Subject: [taler-taler-android] 10/11: [wallet] some dd37 fixes after merging
Date: Tue, 11 Jul 2023 16:23:38 +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 75d370fdef3d37290a98b2344e53831c68e44bd1
Author: Torsten Grote <t@grobox.de>
AuthorDate: Tue Jul 11 11:19:48 2023 -0300

    [wallet] some dd37 fixes after merging
---
 wallet/build.gradle                                |   2 +-
 .../wallet/deposit/TransactionDepositComposable.kt |  10 +-
 .../wallet/transactions/TransactionAdapter.kt      |  46 ++++-----
 .../transactions/TransactionDepositFragment.kt     |   5 +-
 .../transactions/TransactionDetailFragment.kt      |  92 ++++++++----------
 .../wallet/transactions/TransactionManager.kt      | 104 +++++++++++----------
 .../transactions/TransactionPaymentFragment.kt     |   1 -
 .../wallet/transactions/TransactionPeerFragment.kt |  12 ++-
 .../transactions/TransactionRefreshFragment.kt     |   1 -
 .../transactions/TransactionRefundFragment.kt      |   1 -
 .../wallet/transactions/TransactionTipFragment.kt  |   8 +-
 .../transactions/TransactionWithdrawalFragment.kt  |   6 +-
 .../net/taler/wallet/transactions/Transactions.kt  |  10 +-
 .../wallet/transactions/TransactionsFragment.kt    |  17 +++-
 .../wallet/transactions/TransitionsComposable.kt   |  29 +++---
 .../manual/ManualWithdrawSuccessFragment.kt        |   3 +
 wallet/src/main/res/menu/transactions_detail.xml   |  19 ----
 wallet/src/main/res/values/strings.xml             |   6 +-
 18 files changed, 184 insertions(+), 188 deletions(-)

diff --git a/wallet/build.gradle b/wallet/build.gradle
index 43cc8ca..bcfced9 100644
--- a/wallet/build.gradle
+++ b/wallet/build.gradle
@@ -19,7 +19,7 @@ plugins {
     id "kotlinx-serialization"
 }
 
-def qtart_version = "0.9.3-dev.11"
+def qtart_version = "0.9.3-dev.12"
 
 static def versionCodeEpoch() {
     return (new Date().getTime() / 1000).toInteger()
diff --git 
a/wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt 
b/wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt
index 39235a4..1d5c91e 100644
--- 
a/wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt
@@ -50,7 +50,11 @@ import net.taler.wallet.transactions.TransactionState
 import net.taler.wallet.transactions.TransitionsComposable
 
 @Composable
-fun TransactionDepositComposable(t: TransactionDeposit, devMode: Boolean?, 
onTransition: (t: TransactionAction) -> Unit) {
+fun TransactionDepositComposable(
+    t: TransactionDeposit,
+    devMode: Boolean,
+    onTransition: (t: TransactionAction) -> Unit,
+) {
     val scrollState = rememberScrollState()
     Column(
         modifier = Modifier
@@ -82,8 +86,8 @@ fun TransactionDepositComposable(t: TransactionDeposit, 
devMode: Boolean?, onTra
                 amountType = AmountType.Negative,
             )
         }
-        TransitionsComposable(t, devMode == true, onTransition)
-        if (devMode == true && t.error != null) {
+        TransitionsComposable(t, devMode, onTransition)
+        if (devMode && t.error != null) {
             ErrorTransactionButton(error = t.error)
         }
     }
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionAdapter.kt 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionAdapter.kt
index 958ba0c..676a425 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionAdapter.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionAdapter.kt
@@ -37,19 +37,11 @@ import net.taler.common.toRelativeTime
 import net.taler.wallet.R
 import net.taler.wallet.transactions.TransactionAdapter.TransactionViewHolder
 import net.taler.wallet.transactions.TransactionMajorState.Aborted
-import net.taler.wallet.transactions.TransactionMajorState.Aborting
-import net.taler.wallet.transactions.TransactionMajorState.Deleted
-import net.taler.wallet.transactions.TransactionMajorState.Dialog
-import net.taler.wallet.transactions.TransactionMajorState.Done
 import net.taler.wallet.transactions.TransactionMajorState.Failed
-import net.taler.wallet.transactions.TransactionMajorState.None
 import net.taler.wallet.transactions.TransactionMajorState.Pending
-import net.taler.wallet.transactions.TransactionMajorState.Suspended
-import net.taler.wallet.transactions.TransactionMajorState.SuspendedAborting
-import net.taler.wallet.transactions.TransactionMajorState.Unknown
 
 internal class TransactionAdapter(
-    private val listener: OnTransactionClickListener
+    private val listener: OnTransactionClickListener,
 ) : Adapter<TransactionViewHolder>() {
 
     private var transactions: List<Transaction> = ArrayList()
@@ -109,9 +101,11 @@ internal class TransactionAdapter(
             time.text = transaction.timestamp.ms.toRelativeTime(context)
             bindAmount(transaction)
             pendingView.visibility = if (transaction.txState.major == Pending) 
VISIBLE else GONE
-            val bgColor = getColor(context,
+            val bgColor = getColor(
+                context,
                 if (selected) R.color.selectedBackground
-                else android.R.color.transparent)
+                else android.R.color.transparent
+            )
             root.setBackgroundColor(bgColor)
         }
 
@@ -127,21 +121,17 @@ internal class TransactionAdapter(
                 extraInfoView.visibility = VISIBLE
             } else {
                 when (transaction.txState.major) {
-                    Aborted -> R.string.payment_aborted
-                    Failed -> R.string.payment_failed
-                    None -> null
-                    Pending -> null
-                    Done -> null
-                    Aborting -> null
-                    Suspended -> null
-                    Dialog -> null
-                    SuspendedAborting -> null
-                    Deleted -> null
-                    Unknown -> null
-                }?.let {
-                    extraInfoView.setText(it)
-                } ?: {
-                    extraInfoView.visibility = GONE
+                    Aborted -> {
+                        extraInfoView.setText(R.string.payment_aborted)
+                        extraInfoView.visibility = VISIBLE
+                    }
+
+                    Failed -> {
+                        extraInfoView.setText(R.string.payment_failed)
+                        extraInfoView.visibility = VISIBLE
+                    }
+
+                    else -> extraInfoView.visibility = GONE
                 }
             }
         }
@@ -153,10 +143,12 @@ internal class TransactionAdapter(
                     amount.text = context.getString(R.string.amount_positive, 
amountStr)
                     amount.setTextColor(if (transaction.txState.major == 
Pending) amountColor else green)
                 }
+
                 AmountType.Negative -> {
                     amount.text = context.getString(R.string.amount_negative, 
amountStr)
                     amount.setTextColor(if (transaction.txState.major == 
Pending) amountColor else red)
                 }
+
                 AmountType.Neutral -> {
                     amount.text = amountStr
                     amount.setTextColor(amountColor)
@@ -176,7 +168,7 @@ internal class TransactionAdapter(
 
 internal class TransactionLookup(
     private val list: RecyclerView,
-    private val adapter: TransactionAdapter
+    private val adapter: TransactionAdapter,
 ) : ItemDetailsLookup<String>() {
     override fun getItemDetails(e: MotionEvent): ItemDetails<String>? {
         list.findChildViewUnder(e.x, e.y)?.let { view ->
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
index 59bcb9b..f23b8d7 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
@@ -35,7 +35,10 @@ class TransactionDepositFragment : 
TransactionDetailFragment() {
         setContent {
             TalerSurface {
                 val t = 
transactionManager.selectedTransaction.observeAsState().value
-                if (t is TransactionDeposit) TransactionDepositComposable(t, 
devMode.value) {
+                if (t is TransactionDeposit) TransactionDepositComposable(
+                    t = t,
+                    devMode = devMode,
+                ) {
                     onTransitionButtonClicked(t, it)
                 }
             }
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 103d8e6..d799b8e 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt
@@ -18,9 +18,7 @@ package net.taler.wallet.transactions
 
 import android.os.Bundle
 import android.util.Log
-import android.view.Menu
-import android.view.MenuInflater
-import android.view.MenuItem
+import android.view.View
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.activityViewModels
 import androidx.navigation.fragment.findNavController
@@ -28,22 +26,22 @@ import 
com.google.android.material.dialog.MaterialAlertDialogBuilder
 import net.taler.wallet.MainViewModel
 import net.taler.wallet.R
 import net.taler.wallet.TAG
-import net.taler.wallet.transactions.TransactionAction.*
+import net.taler.wallet.showError
+import net.taler.wallet.transactions.TransactionAction.Abort
+import net.taler.wallet.transactions.TransactionAction.Delete
+import net.taler.wallet.transactions.TransactionAction.Fail
+import net.taler.wallet.transactions.TransactionAction.Resume
+import net.taler.wallet.transactions.TransactionAction.Retry
+import net.taler.wallet.transactions.TransactionAction.Suspend
 
 abstract class TransactionDetailFragment : Fragment() {
 
     private val model: MainViewModel by activityViewModels()
-    val transactionManager by lazy { model.transactionManager }
-    val devMode by lazy { model.devMode }
+    protected val transactionManager by lazy { model.transactionManager }
+    protected val devMode get() = model.devMode.value == true
 
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-        setHasOptionsMenu(model.devMode.value == true)
-    }
-
-    @Deprecated("Deprecated in Java")
-    override fun onActivityCreated(savedInstanceState: Bundle?) {
-        super.onActivityCreated(savedInstanceState)
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
         transactionManager.selectedTransaction.observe(viewLifecycleOwner) {
             requireActivity().apply {
                 it?.generalTitleRes?.let {
@@ -53,30 +51,18 @@ abstract class TransactionDetailFragment : Fragment() {
         }
     }
 
-    @Deprecated("Deprecated in Java")
-    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
-        inflater.inflate(R.menu.transactions_detail, menu)
-    }
-
-    @Deprecated("Deprecated in Java")
-    override fun onOptionsItemSelected(item: MenuItem): Boolean {
-        return when (item.itemId) {
-            else -> super.onOptionsItemSelected(item)
-        }
-    }
-
     private fun dialogTitle(t: TransactionAction): Int = when (t) {
         Delete -> R.string.transactions_delete_dialog_title
         Abort -> R.string.transactions_abort_dialog_title
         Fail -> R.string.transactions_fail_dialog_title
-        else -> error("unsupported")
+        else -> error("unsupported action: $t")
     }
 
     private fun dialogMessage(t: TransactionAction): Int = when (t) {
         Delete -> R.string.transactions_delete_dialog_message
         Abort -> R.string.transactions_abort_dialog_message
         Fail -> R.string.transactions_fail_dialog_message
-        else -> error("unsupported")
+        else -> error("unsupported action: $t")
     }
 
     private fun dialogButton(t: TransactionAction): Int = when (t) {
@@ -86,38 +72,33 @@ abstract class TransactionDetailFragment : Fragment() {
         else -> error("unsupported")
     }
 
-    protected fun onTransitionButtonClicked(t: Transaction, tt: 
TransactionAction) {
-        when (tt) {
-            Delete, Abort, Fail -> {
-                MaterialAlertDialogBuilder(requireContext(), 
R.style.MaterialAlertDialog_Material3)
-                    .setTitle(dialogTitle(tt))
-                    .setMessage(dialogMessage(tt))
-                    .setNeutralButton(R.string.cancel) { dialog, _ ->
-                        dialog.cancel()
-                    }
-                    .setNegativeButton(dialogButton(tt)) { dialog, _ ->
-                        when (tt) {
-                            Delete -> deleteTransaction(t)
-                            Abort -> abortTransaction(t)
-                            Fail -> failTransaction(t)
-                            else -> {}
-                        }
-                        dialog.dismiss()
-                    }
-                    .show()
+    protected fun onTransitionButtonClicked(t: Transaction, ta: 
TransactionAction) = when (ta) {
+        Delete -> showDialog(ta) { deleteTransaction(t) }
+        Abort -> showDialog(ta) { abortTransaction(t) }
+        Fail -> showDialog(ta) { failTransaction(t) }
+        Retry -> retryTransaction(t)
+        Suspend -> suspendTransaction(t)
+        Resume -> resumeTransaction(t)
+    }
+
+    private fun showDialog(tt: TransactionAction, onAction: () -> Unit) {
+        MaterialAlertDialogBuilder(requireContext(), 
R.style.MaterialAlertDialog_Material3)
+            .setTitle(dialogTitle(tt))
+            .setMessage(dialogMessage(tt))
+            .setNeutralButton(R.string.cancel) { dialog, _ ->
+                dialog.cancel()
             }
-            else -> when (tt) {
-                Retry -> retryTransaction(t)
-                Suspend -> suspendTransaction(t)
-                Resume -> resumeTransaction(t)
-                else -> {}
+            .setNegativeButton(dialogButton(tt)) { dialog, _ ->
+                onAction()
+                dialog.dismiss()
             }
-        }
+            .show()
     }
 
     private fun deleteTransaction(t: Transaction) {
         transactionManager.deleteTransaction(t.transactionId) {
             Log.e(TAG, "Error deleteTransaction $it")
+            showError(it)
         }
         findNavController().popBackStack()
     }
@@ -125,30 +106,35 @@ abstract class TransactionDetailFragment : Fragment() {
     private fun retryTransaction(t: Transaction) {
         transactionManager.retryTransaction(t.transactionId) {
             Log.e(TAG, "Error retryTransaction $it")
+            showError(it)
         }
     }
 
     private fun abortTransaction(t: Transaction) {
         transactionManager.abortTransaction(t.transactionId) {
             Log.e(TAG, "Error abortTransaction $it")
+            showError(it)
         }
     }
 
     private fun failTransaction(t: Transaction) {
         transactionManager.failTransaction(t.transactionId) {
             Log.e(TAG, "Error failTransaction $it")
+            showError(it)
         }
     }
 
     private fun suspendTransaction(t: Transaction) {
         transactionManager.suspendTransaction(t.transactionId) {
             Log.e(TAG, "Error suspendTransaction $it")
+            showError(it)
         }
     }
 
     private fun resumeTransaction(t: Transaction) {
         transactionManager.resumeTransaction(t.transactionId) {
             Log.e(TAG, "Error resumeTransaction $it")
+            showError(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 ffaccc6..df62f31 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
@@ -128,66 +128,72 @@ class TransactionManager(
         mSelectedTransaction.postValue(transaction)
     }
 
-    fun deleteTransaction(transactionId: String, onError: (it: TalerErrorInfo) 
-> Unit) = scope.launch {
-        api.request<Unit>("deleteTransaction") {
-            put("transactionId", transactionId)
-        }.onError {
-            onError(it)
-        }.onSuccess {
-            // re-load transactions as our list is stale otherwise
-            loadTransactions()
+    fun deleteTransaction(transactionId: String, onError: (it: TalerErrorInfo) 
-> Unit) =
+        scope.launch {
+            api.request<Unit>("deleteTransaction") {
+                put("transactionId", transactionId)
+            }.onError {
+                onError(it)
+            }.onSuccess {
+                // re-load transactions as our list is stale otherwise
+                loadTransactions()
+            }
         }
-    }
 
-    fun retryTransaction(transactionId: String, onError: (it: TalerErrorInfo) 
-> Unit) = scope.launch {
-        api.request<Unit>("retryTransaction") {
-            put("transactionId", transactionId)
-        }.onError {
-            onError(it)
-        }.onSuccess {
-            loadTransactions()
+    fun retryTransaction(transactionId: String, onError: (it: TalerErrorInfo) 
-> Unit) =
+        scope.launch {
+            api.request<Unit>("retryTransaction") {
+                put("transactionId", transactionId)
+            }.onError {
+                onError(it)
+            }.onSuccess {
+                loadTransactions()
+            }
         }
-    }
 
-    fun abortTransaction(transactionId: String, onError: (it: TalerErrorInfo) 
-> Unit) = scope.launch {
-        api.request<Unit>("abortTransaction") {
-            put("transactionId", transactionId)
-        }.onError {
-            onError(it)
-        }.onSuccess {
-            loadTransactions()
+    fun abortTransaction(transactionId: String, onError: (it: TalerErrorInfo) 
-> Unit) =
+        scope.launch {
+            api.request<Unit>("abortTransaction") {
+                put("transactionId", transactionId)
+            }.onError {
+                onError(it)
+            }.onSuccess {
+                loadTransactions()
+            }
         }
-    }
 
-    fun failTransaction(transactionId: String, onError: (it: TalerErrorInfo) 
-> Unit) = scope.launch {
-        api.request<Unit>("failTransaction") {
-            put("transactionId", transactionId)
-        }.onError {
-            onError(it)
-        }.onSuccess {
-            loadTransactions()
+    fun failTransaction(transactionId: String, onError: (it: TalerErrorInfo) 
-> Unit) =
+        scope.launch {
+            api.request<Unit>("failTransaction") {
+                put("transactionId", transactionId)
+            }.onError {
+                onError(it)
+            }.onSuccess {
+                loadTransactions()
+            }
         }
-    }
 
-    fun suspendTransaction(transactionId: String, onError: (it: 
TalerErrorInfo) -> Unit) = scope.launch {
-        api.request<Unit>("suspendTransaction") {
-            put("transactionId", transactionId)
-        }.onError {
-            onError(it)
-        }.onSuccess {
-            loadTransactions()
+    fun suspendTransaction(transactionId: String, onError: (it: 
TalerErrorInfo) -> Unit) =
+        scope.launch {
+            api.request<Unit>("suspendTransaction") {
+                put("transactionId", transactionId)
+            }.onError {
+                onError(it)
+            }.onSuccess {
+                loadTransactions()
+            }
         }
-    }
 
-    fun resumeTransaction(transactionId: String, onError: (it: TalerErrorInfo) 
-> Unit) = scope.launch {
-        api.request<Unit>("resumeTransaction") {
-            put("transactionId", transactionId)
-        }.onError {
-            onError(it)
-        }.onSuccess {
-            loadTransactions()
+    fun resumeTransaction(transactionId: String, onError: (it: TalerErrorInfo) 
-> Unit) =
+        scope.launch {
+            api.request<Unit>("resumeTransaction") {
+                put("transactionId", transactionId)
+            }.onError {
+                onError(it)
+            }.onSuccess {
+                loadTransactions()
+            }
         }
-    }
 
     fun deleteTransactions(transactionIds: List<String>, onError: (it: 
TalerErrorInfo) -> Unit) {
         allTransactions[selectedCurrency]?.filter { transaction ->
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionPaymentFragment.kt
 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionPaymentFragment.kt
index 65cc0f4..27598ab 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionPaymentFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionPaymentFragment.kt
@@ -36,7 +36,6 @@ class TransactionPaymentFragment : 
TransactionDetailFragment() {
         setContent {
             TalerSurface {
                 val t = 
transactionManager.selectedTransaction.observeAsState().value
-                val devMode = devMode.observeAsState().value ?: false
                 if (t is TransactionPayment) TransactionPaymentComposable(t, 
devMode,
                     onFulfill = { url ->
                         launchInAppBrowser(requireContext(), url)
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt
index 2d79d77..c934d89 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt
@@ -56,7 +56,7 @@ class TransactionPeerFragment : TransactionDetailFragment() {
         setContent {
             TalerSurface {
                 val t = 
transactionManager.selectedTransaction.observeAsState(null).value
-                if (t != null) TransactionPeerComposable(t, devMode.value) {
+                if (t != null) TransactionPeerComposable(t, devMode) {
                     onTransitionButtonClicked(t, it)
                 }
             }
@@ -65,7 +65,11 @@ class TransactionPeerFragment : TransactionDetailFragment() {
 }
 
 @Composable
-fun TransactionPeerComposable(t: Transaction, devMode: Boolean?, onTransition: 
(t: TransactionAction) -> Unit) {
+fun TransactionPeerComposable(
+    t: Transaction,
+    devMode: Boolean,
+    onTransition: (t: TransactionAction) -> Unit,
+) {
     val scrollState = rememberScrollState()
     Column(
         modifier = Modifier
@@ -86,8 +90,8 @@ fun TransactionPeerComposable(t: Transaction, devMode: 
Boolean?, onTransition: (
             is TransactionPeerPushDebit -> 
TransactionPeerPushDebitComposable(t)
             else -> error("unexpected transaction: ${t::class.simpleName}")
         }
-        TransitionsComposable(t, devMode == true, onTransition)
-        if (devMode == true && t.error != null) {
+        TransitionsComposable(t, devMode, onTransition)
+        if (devMode && t.error != null) {
             ErrorTransactionButton(error = t.error!!)
         }
     }
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefreshFragment.kt
 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefreshFragment.kt
index f1f1ad7..da4b14d 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefreshFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefreshFragment.kt
@@ -59,7 +59,6 @@ class TransactionRefreshFragment : 
TransactionDetailFragment() {
         setContent {
             TalerSurface {
                 val t = 
transactionManager.selectedTransaction.observeAsState().value
-                val devMode = devMode.observeAsState().value ?: false
                 if (t is TransactionRefresh) TransactionRefreshComposable(t, 
devMode) {
                     onTransitionButtonClicked(t, it)
                 }
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefundFragment.kt
 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefundFragment.kt
index a2fe223..306febc 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefundFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefundFragment.kt
@@ -36,7 +36,6 @@ class TransactionRefundFragment : TransactionDetailFragment() 
{
         setContent {
             TalerSurface {
                 val t = 
transactionManager.selectedTransaction.observeAsState().value
-                val devMode = devMode.observeAsState().value ?: false
                 if (t is TransactionRefund) TransactionRefundComposable(t, 
devMode,
                     onFulfill = { url ->
                         launchInAppBrowser(requireContext(), url)
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionTipFragment.kt 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionTipFragment.kt
index 0870281..c15f931 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionTipFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionTipFragment.kt
@@ -59,7 +59,7 @@ class TransactionTipFragment : TransactionDetailFragment() {
         setContent {
             TalerSurface {
                 val t = 
transactionManager.selectedTransaction.observeAsState(null).value
-                if (t is TransactionTip) TransactionTipComposable(t, 
devMode.value) {
+                if (t is TransactionTip) TransactionTipComposable(t, devMode) {
                     onTransitionButtonClicked(t, it)
                 }
             }
@@ -68,7 +68,11 @@ class TransactionTipFragment : TransactionDetailFragment() {
 }
 
 @Composable
-fun TransactionTipComposable(t: TransactionTip, devMode: Boolean?, 
onTransition: (t: TransactionAction) -> Unit) {
+fun TransactionTipComposable(
+    t: TransactionTip,
+    devMode: Boolean?,
+    onTransition: (t: TransactionAction) -> Unit,
+) {
     val scrollState = rememberScrollState()
     Column(
         modifier = Modifier
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt
 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt
index 35207fa..52bd998 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt
@@ -28,6 +28,7 @@ import net.taler.wallet.MainViewModel
 import net.taler.wallet.R
 import net.taler.wallet.compose.TalerSurface
 import net.taler.wallet.launchInAppBrowser
+import net.taler.wallet.showError
 import net.taler.wallet.transactions.WithdrawalDetails.ManualTransfer
 import net.taler.wallet.transactions.WithdrawalDetails.TalerBankIntegrationApi
 import net.taler.wallet.withdraw.TransactionWithdrawalComposable
@@ -46,7 +47,6 @@ class TransactionWithdrawalFragment : 
TransactionDetailFragment(), ActionListene
         setContent {
             TalerSurface {
                 val t = 
transactionManager.selectedTransaction.observeAsState().value
-                val devMode = devMode.observeAsState().value ?: false
                 if (t is TransactionWithdrawal) 
TransactionWithdrawalComposable(
                     t = t,
                     devMode = devMode,
@@ -63,8 +63,9 @@ class TransactionWithdrawalFragment : 
TransactionDetailFragment(), ActionListene
             ActionListener.Type.COMPLETE_KYC -> {
                 tx.error?.getStringExtra("kycUrl")?.let { kycUrl ->
                     launchInAppBrowser(requireContext(), kycUrl)
-                }
+                } ?: tx.error?.let { showError(it) }
             }
+
             ActionListener.Type.CONFIRM_WITH_BANK -> {
                 if (tx !is TransactionWithdrawal) return
                 if (tx.withdrawalDetails !is TalerBankIntegrationApi) return
@@ -72,6 +73,7 @@ class TransactionWithdrawalFragment : 
TransactionDetailFragment(), ActionListene
                     launchInAppBrowser(requireContext(), url)
                 }
             }
+
             ActionListener.Type.CONFIRM_MANUAL -> {
                 if (tx !is TransactionWithdrawal) return
                 if (tx.withdrawalDetails !is ManualTransfer) return
diff --git a/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt 
b/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt
index 62e458b..b6b3587 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt
@@ -42,7 +42,7 @@ import net.taler.wallet.TAG
 import net.taler.wallet.backend.TalerErrorCode
 import net.taler.wallet.backend.TalerErrorInfo
 import net.taler.wallet.cleanExchange
-import net.taler.wallet.transactions.TransactionMajorState.Failed
+import net.taler.wallet.transactions.TransactionMajorState.None
 import net.taler.wallet.transactions.TransactionMajorState.Pending
 import net.taler.wallet.transactions.WithdrawalDetails.ManualTransfer
 import net.taler.wallet.transactions.WithdrawalDetails.TalerBankIntegrationApi
@@ -255,10 +255,6 @@ class TransactionRefund(
     override val txActions: List<TransactionAction>,
     val refundedTransactionId: String,
     val info: TransactionInfo,
-    /**
-     * Part of the refund that couldn't be applied because the refund 
permissions were expired
-     */
-    val amountInvalid: Amount? = null,
     override val error: TalerErrorInfo? = null,
     override val amountRaw: Amount,
     override val amountEffective: Amount,
@@ -476,8 +472,8 @@ class DummyTransaction(
     override val timestamp: Timestamp,
     override val error: TalerErrorInfo,
 ) : Transaction() {
-    override val txState: TransactionState = TransactionState(Failed)
-    override val txActions: List<TransactionAction> = 
listOf(TransactionAction.Delete)
+    override val txState: TransactionState = TransactionState(None)
+    override val txActions: List<TransactionAction> = emptyList()
     override val amountRaw: Amount = Amount.zero("TESTKUDOS")
     override val amountEffective: Amount = Amount.zero("TESTKUDOS")
     override val icon: Int = R.drawable.ic_bug_report
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 4ed5c57..032f2de 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt
@@ -46,6 +46,7 @@ import net.taler.wallet.TAG
 import net.taler.wallet.databinding.FragmentTransactionsBinding
 import net.taler.wallet.handleKyc
 import net.taler.wallet.launchInAppBrowser
+import net.taler.wallet.showError
 
 interface OnTransactionClickListener {
     fun onTransactionClicked(transaction: Transaction)
@@ -191,8 +192,12 @@ class TransactionsFragment : Fragment(), 
OnTransactionClickListener, ActionMode.
             }
         } else if (transaction is TransactionWithdrawal && 
!transaction.confirmed) {
             if (transaction.withdrawalDetails is 
WithdrawalDetails.TalerBankIntegrationApi &&
-                transaction.withdrawalDetails.bankConfirmationUrl != null) {
-                launchInAppBrowser(requireContext(), 
transaction.withdrawalDetails.bankConfirmationUrl)
+                transaction.withdrawalDetails.bankConfirmationUrl != null
+            ) {
+                launchInAppBrowser(
+                    context = requireContext(),
+                    url = transaction.withdrawalDetails.bankConfirmationUrl,
+                )
             }
         }
     }
@@ -203,6 +208,7 @@ class TransactionsFragment : Fragment(), 
OnTransactionClickListener, ActionMode.
             ui.emptyState.text = getString(R.string.transactions_error, 
result.error.userFacingMsg)
             ui.emptyState.fadeIn()
         }
+
         is TransactionsResult.Success -> {
             if (result.transactions.isEmpty()) {
                 val isSearch = transactionManager.searchQuery.value != null
@@ -241,7 +247,10 @@ class TransactionsFragment : Fragment(), 
OnTransactionClickListener, ActionMode.
         when (item.itemId) {
             R.id.transaction_delete -> {
                 tracker?.selection?.toList()?.let { transactionIds ->
-                    MaterialAlertDialogBuilder(requireContext(), 
R.style.MaterialAlertDialog_Material3)
+                    MaterialAlertDialogBuilder(
+                        requireContext(),
+                        R.style.MaterialAlertDialog_Material3,
+                    )
                         .setTitle(R.string.transactions_delete)
                         
.setMessage(R.string.transactions_delete_selected_dialog_message)
                         .setNeutralButton(R.string.cancel) { dialog, _ ->
@@ -250,6 +259,7 @@ class TransactionsFragment : Fragment(), 
OnTransactionClickListener, ActionMode.
                         .setNegativeButton(R.string.transactions_delete) { 
dialog, _ ->
                             
transactionManager.deleteTransactions(transactionIds) {
                                 Log.e(TAG, "Error deleteTransaction $it")
+                                showError(it)
                             }
                             dialog.dismiss()
                         }
@@ -257,6 +267,7 @@ class TransactionsFragment : Fragment(), 
OnTransactionClickListener, ActionMode.
                 }
                 mode.finish()
             }
+
             R.id.transaction_select_all -> transactionAdapter.selectAll()
         }
         return true
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 cead75d..424cc2a 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransitionsComposable.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransitionsComposable.kt
@@ -16,6 +16,7 @@
 
 package net.taler.wallet.transactions
 
+import androidx.compose.foundation.layout.Arrangement.Center
 import androidx.compose.foundation.layout.ExperimentalLayoutApi
 import androidx.compose.foundation.layout.FlowRow
 import androidx.compose.foundation.layout.Row
@@ -36,11 +37,15 @@ import net.taler.wallet.transactions.TransactionAction.*
 
 @OptIn(ExperimentalLayoutApi::class)
 @Composable
-fun TransitionsComposable(t: Transaction, devMode: Boolean, onTransition: (t: 
TransactionAction) -> Unit) {
-    FlowRow {
+fun TransitionsComposable(
+    t: Transaction,
+    devMode: Boolean,
+    onTransition: (t: TransactionAction) -> Unit,
+) {
+    FlowRow(horizontalArrangement = Center) {
         t.txActions.forEach {
             if (it in arrayOf(Resume, Suspend)) {
-                if(devMode) TransitionComposable(it, onTransition)
+                if (devMode) TransitionComposable(it, onTransition)
             } else {
                 TransitionComposable(it, onTransition)
             }
@@ -52,14 +57,16 @@ fun TransitionsComposable(t: Transaction, devMode: Boolean, 
onTransition: (t: Tr
 fun TransitionComposable(t: TransactionAction, onClick: (t: TransactionAction) 
-> Unit) {
     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
-        }),
+        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
+            }
+        ),
         onClick = { onClick(t) },
     ) {
         Row(verticalAlignment = Alignment.CenterVertically) {
diff --git 
a/wallet/src/main/java/net/taler/wallet/withdraw/manual/ManualWithdrawSuccessFragment.kt
 
b/wallet/src/main/java/net/taler/wallet/withdraw/manual/ManualWithdrawSuccessFragment.kt
index 3b9b4a5..fa3f38b 100644
--- 
a/wallet/src/main/java/net/taler/wallet/withdraw/manual/ManualWithdrawSuccessFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/withdraw/manual/ManualWithdrawSuccessFragment.kt
@@ -31,6 +31,7 @@ import net.taler.wallet.MainViewModel
 import net.taler.wallet.R
 import net.taler.wallet.TAG
 import net.taler.wallet.compose.TalerSurface
+import net.taler.wallet.showError
 import net.taler.wallet.withdraw.WithdrawStatus
 
 class ManualWithdrawSuccessFragment : Fragment() {
@@ -55,6 +56,7 @@ class ManualWithdrawSuccessFragment : Fragment() {
             {
                 transactionManager.deleteTransaction(tid) {
                     Log.e(TAG, "Error deleteTransaction $it")
+                    showError(it)
                 }
                 
findNavController().navigate(R.id.action_nav_exchange_manual_withdrawal_success_to_nav_main)
             }
@@ -65,6 +67,7 @@ class ManualWithdrawSuccessFragment : Fragment() {
                     is WithdrawStatus.ManualTransferRequiredBitcoin -> {
                         ScreenBitcoin(status, onBankAppClick, onCancelClick)
                     }
+
                     is WithdrawStatus.ManualTransferRequiredIBAN -> {
                         ScreenIBAN(status, onBankAppClick, onCancelClick)
                     }
diff --git a/wallet/src/main/res/menu/transactions_detail.xml 
b/wallet/src/main/res/menu/transactions_detail.xml
deleted file mode 100644
index d4568d4..0000000
--- a/wallet/src/main/res/menu/transactions_detail.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><!--
-  ~ This file is part of GNU Taler
-  ~ (C) 2020 Taler Systems S.A.
-  ~
-  ~ GNU Taler is free software; you can redistribute it and/or modify it under 
the
-  ~ terms of the GNU General Public License as published by the Free Software
-  ~ Foundation; either version 3, or (at your option) any later version.
-  ~
-  ~ GNU Taler is distributed in the hope that it will be useful, but WITHOUT 
ANY
-  ~ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
-  ~ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-  ~
-  ~ You should have received a copy of the GNU General Public License along 
with
-  ~ GNU Taler; see the file COPYING.  If not, see 
<http://www.gnu.org/licenses/>
-  -->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android";
-    xmlns:app="http://schemas.android.com/apk/res-auto";>
-</menu>
diff --git a/wallet/src/main/res/values/strings.xml 
b/wallet/src/main/res/values/strings.xml
index b0a0647..9e2b38d 100644
--- a/wallet/src/main/res/values/strings.xml
+++ b/wallet/src/main/res/values/strings.xml
@@ -87,7 +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">Cancel</string>
+    <string name="transactions_fail">Kill</string>
     <string name="transactions_suspend">Suspend</string>
     <string name="transactions_resume">Resume</string>
     <string name="transactions_select_all">Select All</string>
@@ -96,8 +96,8 @@ GNU Taler is immune against many types of fraud, such as 
phishing of credit card
     <string name="transactions_delete_selected_dialog_message">Are you sure 
you want to remove the selected transactions from your wallet?</string>
     <string name="transactions_abort_dialog_title">Abort Transaction</string>
     <string name="transactions_abort_dialog_message">Are you sure you want to 
abort this transaction? Funds still in transit might get lost.</string>
-    <string name="transactions_fail_dialog_title">Fail Transaction</string>
-    <string name="transactions_fail_dialog_message">Are you sure you want to 
cancel this transaction? Funds still in transit might get lost.</string>
+    <string name="transactions_fail_dialog_title">Kill Transaction</string>
+    <string name="transactions_fail_dialog_message">Are you sure you want to 
kill this transaction? Funds still in transit WILL GET LOST.</string>
     <string name="transactions_cancel_dialog_message">Are you sure you want to 
cancel this withdrawal? Funds still in transit might get lost.</string>
 
     <!-- Transactions -->

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