gnunet-svn
[Top][All Lists]
Advanced

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

[taler-taler-android] branch master updated: Add a button to cancel manu


From: gnunet
Subject: [taler-taler-android] branch master updated: Add a button to cancel manual withdrawal
Date: Wed, 08 Dec 2021 19:49:21 +0100

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

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

The following commit(s) were added to refs/heads/master by this push:
     new 5c52566  Add a button to cancel manual withdrawal
5c52566 is described below

commit 5c525667c77d945abb85e5f0b2469fb5af376fce
Author: Torsten Grote <t@grobox.de>
AuthorDate: Wed Dec 8 15:46:15 2021 -0300

    Add a button to cancel manual withdrawal
---
 .../wallet/transactions/TransactionManager.kt      | 14 +++++++++-
 .../transactions/TransactionWithdrawalFragment.kt  |  1 +
 .../withdraw/ManualWithdrawSuccessFragment.kt      | 31 +++++++++++++++++++---
 .../net/taler/wallet/withdraw/WithdrawManager.kt   |  7 +++--
 wallet/src/main/res/values/strings.xml             |  1 +
 5 files changed, 47 insertions(+), 7 deletions(-)

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 6b5a79b..ea257a8 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
@@ -16,12 +16,14 @@
 
 package net.taler.wallet.transactions
 
+import android.util.Log
 import androidx.annotation.UiThread
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.switchMap
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.launch
+import net.taler.wallet.TAG
 import net.taler.wallet.backend.WalletBackendApi
 import java.util.HashMap
 import java.util.LinkedList
@@ -33,7 +35,7 @@ sealed class TransactionsResult {
 
 class TransactionManager(
     private val api: WalletBackendApi,
-    private val scope: CoroutineScope
+    private val scope: CoroutineScope,
 ) {
 
     private val mProgress = MutableLiveData<Boolean>()
@@ -88,4 +90,14 @@ class TransactionManager(
         }
     }
 
+    fun deleteTransaction(transactionId: String)  = scope.launch {
+        api.request<Unit>("deleteTransaction") {
+            put("transactionId", transactionId)
+        }.onError {
+            Log.e(TAG, "Error deleteTransaction $it")
+        }.onSuccess {
+            // no op
+        }
+    }
+
 }
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 319aa7e..a11f8ba 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt
@@ -69,6 +69,7 @@ class TransactionWithdrawalFragment : 
TransactionDetailFragment() {
                     exchangeBaseUrl = t.exchangeBaseUrl,
                     // TODO what if there's more than one or no URI?
                     uriStr = t.withdrawalDetails.exchangePaytoUris[0],
+                    transactionId = t.transactionId,
                 )
                 withdrawManager.viewManualWithdrawal(status)
                 
findNavController().navigate(R.id.action_nav_transactions_detail_withdrawal_to_nav_exchange_manual_withdrawal_success)
diff --git 
a/wallet/src/main/java/net/taler/wallet/withdraw/ManualWithdrawSuccessFragment.kt
 
b/wallet/src/main/java/net/taler/wallet/withdraw/ManualWithdrawSuccessFragment.kt
index cb22c04..4ea3e73 100644
--- 
a/wallet/src/main/java/net/taler/wallet/withdraw/ManualWithdrawSuccessFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/withdraw/ManualWithdrawSuccessFragment.kt
@@ -35,6 +35,7 @@ import androidx.compose.foundation.layout.wrapContentWidth
 import androidx.compose.foundation.rememberScrollState
 import androidx.compose.foundation.verticalScroll
 import androidx.compose.material.Button
+import androidx.compose.material.ButtonDefaults
 import androidx.compose.material.Icon
 import androidx.compose.material.IconButton
 import androidx.compose.material.MaterialTheme
@@ -44,6 +45,7 @@ import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.filled.ContentCopy
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Alignment.Companion.CenterHorizontally
+import androidx.compose.ui.Alignment.Companion.End
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.alpha
 import androidx.compose.ui.platform.ComposeView
@@ -56,6 +58,7 @@ import androidx.compose.ui.unit.dp
 import androidx.core.content.getSystemService
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.activityViewModels
+import androidx.navigation.fragment.findNavController
 import com.google.android.material.composethemeadapter.MdcTheme
 import net.taler.common.startActivitySafe
 import net.taler.lib.common.Amount
@@ -64,6 +67,7 @@ import net.taler.wallet.R
 
 class ManualWithdrawSuccessFragment : Fragment() {
     private val model: MainViewModel by activityViewModels()
+    private val transactionManager by lazy { model.transactionManager }
     private val withdrawManager by lazy { model.withdrawManager }
     override fun onCreateView(
         inflater: LayoutInflater, container: ViewGroup?,
@@ -78,10 +82,16 @@ class ManualWithdrawSuccessFragment : Fragment() {
         val onBankAppClick = if (componentName == null) null else {
             { startActivitySafe(intent) }
         }
+        val onCancelClick = if (status.transactionId == null) null else {
+            {
+                transactionManager.deleteTransaction(status.transactionId)
+                
findNavController().navigate(R.id.action_nav_exchange_manual_withdrawal_success_to_nav_main)
+            }
+        }
         setContent {
             MdcTheme {
                 Surface {
-                    Screen(status, onBankAppClick)
+                    Screen(status, onBankAppClick, onCancelClick)
                 }
             }
         }
@@ -97,6 +107,7 @@ class ManualWithdrawSuccessFragment : Fragment() {
 private fun Screen(
     status: WithdrawStatus.ManualTransferRequired,
     bankAppClick: (() -> Unit)?,
+    onCancelClick: (() -> Unit)?,
 ) {
     val scrollState = rememberScrollState()
     Column(modifier = Modifier
@@ -146,6 +157,17 @@ private fun Screen(
                 Text(text = 
stringResource(R.string.withdraw_manual_ready_bank_button))
             }
         }
+        if (onCancelClick != null) {
+            Button(
+                onClick = onCancelClick,
+                colors = ButtonDefaults.buttonColors(backgroundColor = 
colorResource(R.color.red)),
+                modifier = Modifier
+                    .padding(vertical = 16.dp)
+                    .align(End),
+            ) {
+                Text(text = 
stringResource(R.string.withdraw_manual_ready_cancel))
+            }
+        }
     }
 }
 
@@ -171,7 +193,7 @@ fun DetailRow(label: String, content: String, copy: Boolean 
= true) {
             text = content,
             style = MaterialTheme.typography.body1,
             modifier = Modifier
-                .padding(vertical = 8.dp)
+                .padding(bottom = 8.dp)
                 .weight(0.7f)
                 .then(if (copy) Modifier else Modifier.alpha(0.7f))
         )
@@ -187,8 +209,9 @@ fun PreviewScreen() {
             uri = Uri.parse("https://taler.net";),
             iban = "ASDQWEASDZXCASDQWE",
             subject = "Taler Withdrawal 
P2T19EXRBY4B145JRNZ8CQTD7TCS03JE9VZRCEVKVWCP930P56WG",
-            amountRaw = Amount("KUDOS", 10, 0)
-        )) {}
+            amountRaw = Amount("KUDOS", 10, 0),
+            transactionId = "",
+        ), {}) {}
     }
 }
 
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 858d63e..fbb5c18 100644
--- a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt
@@ -63,6 +63,7 @@ sealed class WithdrawStatus {
         val iban: String,
         val subject: String,
         val amountRaw: Amount,
+        val transactionId: String?,
     ) : WithdrawStatus()
 
     data class Error(val message: String?) : WithdrawStatus()
@@ -241,8 +242,7 @@ class WithdrawManager(
                 amount = status.amountRaw,
                 exchangeBaseUrl = status.exchangeBaseUrl,
                 // TODO what if there's more than one or no URI?
-                uriStr = 
"payto://iban/ASDQWEASDZXCASDQWE?amount=KUDOS%3A10&message=Taler+Withdrawal+P2T19EXRBY4B145JRNZ8CQTD7TCS03JE9VZRCEVKVWCP930P56WG",
 // response.exchangePaytoUris[0],
-                // 
"payto://x-taler-bank/bank.demo.taler.net/Exchange?amount=KUDOS%3A10&message=Taler+Withdrawal+P2T19EXRBY4B145JRNZ8CQTD7TCS03JE9VZRCEVKVWCP930P56WG"
+                uriStr = response.exchangePaytoUris[0],
             )
         }
     }
@@ -258,6 +258,7 @@ class WithdrawManager(
      * Don't call this from ongoing withdrawal processes as it destroys state.
      */
     fun viewManualWithdrawal(status: WithdrawStatus.ManualTransferRequired) {
+        require(status.transactionId != null) { "No transaction ID given" }
         withdrawStatus.value = status
     }
 
@@ -267,6 +268,7 @@ fun createManualTransferRequired(
     amount: Amount,
     exchangeBaseUrl: String,
     uriStr: String,
+    transactionId: String? = null,
 ): WithdrawStatus.ManualTransferRequired {
     val uri = Uri.parse(uriStr)
     return WithdrawStatus.ManualTransferRequired(
@@ -275,5 +277,6 @@ fun createManualTransferRequired(
         iban = uri.lastPathSegment!!,
         subject = uri.getQueryParameter("message")!!,
         amountRaw = amount,
+        transactionId = transactionId,
     )
 }
diff --git a/wallet/src/main/res/values/strings.xml 
b/wallet/src/main/res/values/strings.xml
index d2f181c..7595060 100644
--- a/wallet/src/main/res/values/strings.xml
+++ b/wallet/src/main/res/values/strings.xml
@@ -122,6 +122,7 @@ GNU Taler is immune against many types of fraud, such as 
phishing of credit card
     <string name="withdraw_manual_ready_iban">IBAN</string>
     <string name="withdraw_manual_ready_subject">Subject</string>
     <string name="withdraw_manual_ready_bank_button">Open in banking 
app</string>
+    <string name="withdraw_manual_ready_cancel">Cancel withdrawal</string>
     <string name="withdraw_manual_ready_warning">Make sure to use the correct 
subject, otherwise the money will not arrive in this wallet.</string>
     <string name="withdraw_error_title">Withdrawal Error</string>
     <string name="withdraw_error_message">Withdrawing is currently not 
possible. Please try again later!</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]