gnunet-svn
[Top][All Lists]
Advanced

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

[taler-taler-android] branch master updated (4a5b7f7 -> 074032c)


From: gnunet
Subject: [taler-taler-android] branch master updated (4a5b7f7 -> 074032c)
Date: Thu, 03 Nov 2022 15:51:02 +0100

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 4a5b7f7  [wallet] Upgrade to v0.9.0-dev.33
     new 6bf5236  [wallet] Improve flow for making a bank deposit
     new 074032c  [wallet] Show more deposit info in transaction list item

The 2 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:
 .../net/taler/wallet/deposit/DepositFragment.kt    | 36 ++++++--
 .../net/taler/wallet/deposit/DepositManager.kt     | 20 +++--
 .../java/net/taler/wallet/deposit/DepositState.kt  |  3 +
 .../wallet/deposit/TransactionDepositComposable.kt | 95 ++++++++++++++++++++++
 .../transactions/DeleteTransactionComposable.kt    | 55 +++++++++++++
 .../transactions/TransactionDepositFragment.kt     | 61 +-------------
 .../wallet/transactions/TransactionPeerFragment.kt | 26 +-----
 wallet/src/main/res/navigation/nav_graph.xml       |  4 +
 8 files changed, 203 insertions(+), 97 deletions(-)
 create mode 100644 
wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt
 create mode 100644 
wallet/src/main/java/net/taler/wallet/transactions/DeleteTransactionComposable.kt

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 2793e56..31dc03d 100644
--- a/wallet/src/main/java/net/taler/wallet/deposit/DepositFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/deposit/DepositFragment.kt
@@ -51,8 +51,11 @@ import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.activityViewModels
+import androidx.lifecycle.lifecycleScope
+import androidx.navigation.fragment.findNavController
 import com.google.android.material.composethemeadapter.MdcTheme
 import net.taler.common.Amount
+import net.taler.common.showError
 import net.taler.wallet.MainViewModel
 import net.taler.wallet.R
 import net.taler.wallet.compose.collectAsStateLifecycleAware
@@ -94,6 +97,19 @@ class DepositFragment : Fragment() {
         }
     }
 
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        lifecycleScope.launchWhenStarted {
+            depositManager.depositState.collect { state ->
+                if (state is DepositState.Error) {
+                    showError(state.msg)
+                } else if (state is DepositState.Success) {
+                    
findNavController().navigate(R.id.action_nav_deposit_to_nav_main)
+                }
+            }
+        }
+    }
+
     override fun onStart() {
         super.onStart()
         activity?.setTitle(R.string.send_deposit_title)
@@ -189,23 +205,30 @@ private fun MakeDepositComposable(
                 )
             }
         )
+        val amountTitle = if (state.effectiveDepositAmount == null) {
+            R.string.amount_chosen
+        } else R.string.send_deposit_amount_effective
         Text(
             modifier = Modifier.padding(horizontal = 16.dp),
-            text = stringResource(id = R.string.amount_chosen),
+            text = stringResource(id = amountTitle),
         )
+        val shownAmount = if (state.effectiveDepositAmount == null) amount 
else {
+            state.effectiveDepositAmount
+        }
         Text(
             modifier = Modifier.padding(16.dp),
             fontSize = 24.sp,
             color = colorResource(R.color.green),
-            text = amount.toString(),
+            text = shownAmount.toString(),
         )
         AnimatedVisibility(visible = state.showFees) {
             Column(
                 modifier = Modifier.fillMaxWidth(),
                 horizontalAlignment = Alignment.CenterHorizontally,
             ) {
-                val effectiveAmount = state.effectiveDepositAmount
-                val fee = amount - (effectiveAmount ?: 
Amount.zero(amount.currency))
+                val totalAmount = state.totalDepositCost ?: amount
+                val effectiveAmount = state.effectiveDepositAmount ?: 
Amount.zero(amount.currency)
+                val fee = totalAmount - effectiveAmount
                 Text(
                     modifier = Modifier.padding(horizontal = 16.dp),
                     text = stringResource(id = R.string.withdraw_fees),
@@ -222,13 +245,13 @@ private fun MakeDepositComposable(
                 )
                 Text(
                     modifier = Modifier.padding(horizontal = 16.dp),
-                    text = stringResource(id = 
R.string.send_deposit_amount_effective),
+                    text = stringResource(id = R.string.send_amount),
                 )
                 Text(
                     modifier = Modifier.padding(16.dp),
                     fontSize = 24.sp,
                     color = colorResource(R.color.green),
-                    text = effectiveAmount.toString(),
+                    text = totalAmount.toString(),
                 )
             }
         }
@@ -263,6 +286,7 @@ fun PreviewMakeDepositComposable() {
     Surface {
         val state = DepositState.FeesChecked(
             effectiveDepositAmount = Amount.fromDouble("TESTKUDOS", 42.00),
+            totalDepositCost = Amount.fromDouble("TESTKUDOS", 42.23),
         )
         MakeDepositComposable(
             state = state,
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 a207691..81124ec 100644
--- a/wallet/src/main/java/net/taler/wallet/deposit/DepositManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/deposit/DepositManager.kt
@@ -53,11 +53,14 @@ class DepositManager(
             params = mapOf("receiver-name" to receiverName),
         ).paytoUri
 
-        if (depositState.value.showFees) {
-            val effectiveDepositAmount = 
depositState.value.effectiveDepositAmount
-                ?: Amount.zero(amount.currency)
-            makeDeposit(paytoUri, amount, effectiveDepositAmount)
-        } else {
+        if (depositState.value.showFees) makeDeposit(
+            paytoUri = paytoUri,
+            amount = amount,
+            totalDepositCost = depositState.value.totalDepositCost
+                ?: Amount.zero(amount.currency),
+            effectiveDepositAmount = depositState.value.effectiveDepositAmount
+                ?: Amount.zero(amount.currency),
+        ) else {
             prepareDeposit(paytoUri, amount)
         }
     }
@@ -73,6 +76,7 @@ class DepositManager(
                 mDepositState.value = DepositState.Error(it.userFacingMsg)
             }.onSuccess {
                 mDepositState.value = DepositState.FeesChecked(
+                    totalDepositCost = it.totalDepositCost,
                     effectiveDepositAmount = it.effectiveDepositAmount,
                 )
             }
@@ -82,9 +86,13 @@ class DepositManager(
     private fun makeDeposit(
         paytoUri: String,
         amount: Amount,
+        totalDepositCost: Amount,
         effectiveDepositAmount: Amount,
     ) {
-        mDepositState.value = 
DepositState.MakingDeposit(effectiveDepositAmount)
+        mDepositState.value = DepositState.MakingDeposit(
+            totalDepositCost = totalDepositCost,
+            effectiveDepositAmount = effectiveDepositAmount,
+        )
         scope.launch {
             api.request("createDepositGroup", 
CreateDepositGroupResponse.serializer()) {
                 put("depositPaytoUri", paytoUri)
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 1249155..918d74c 100644
--- a/wallet/src/main/java/net/taler/wallet/deposit/DepositState.kt
+++ b/wallet/src/main/java/net/taler/wallet/deposit/DepositState.kt
@@ -21,17 +21,20 @@ import net.taler.common.Amount
 sealed class DepositState {
 
     open val showFees: Boolean = false
+    open val totalDepositCost: Amount? = null
     open val effectiveDepositAmount: Amount? = null
 
     object Start : DepositState()
     object CheckingFees : DepositState()
     class FeesChecked(
+        override val totalDepositCost: Amount,
         override val effectiveDepositAmount: Amount,
     ) : DepositState() {
         override val showFees = true
     }
 
     class MakingDeposit(
+        override val totalDepositCost: Amount,
         override val effectiveDepositAmount: Amount,
     ) : DepositState() {
         override val showFees = true
diff --git 
a/wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt 
b/wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt
new file mode 100644
index 0000000..aa75c56
--- /dev/null
+++ 
b/wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt
@@ -0,0 +1,95 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2022 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/>
+ */
+
+package net.taler.wallet.deposit
+
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Surface
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import net.taler.common.Amount
+import net.taler.common.Timestamp
+import net.taler.common.toAbsoluteTime
+import net.taler.wallet.R
+import net.taler.wallet.transactions.AmountType
+import net.taler.wallet.transactions.DeleteTransactionComposable
+import net.taler.wallet.transactions.TransactionAmountComposable
+import net.taler.wallet.transactions.TransactionDeposit
+
+@Composable
+fun TransactionDepositComposable(t: TransactionDeposit, onDelete: () -> Unit) {
+    val scrollState = rememberScrollState()
+    Column(
+        modifier = Modifier
+            .fillMaxWidth()
+            .verticalScroll(scrollState),
+        horizontalAlignment = Alignment.CenterHorizontally,
+    ) {
+        val context = LocalContext.current
+        Text(
+            modifier = Modifier.padding(16.dp),
+            text = t.timestamp.ms.toAbsoluteTime(context).toString(),
+            style = MaterialTheme.typography.body1,
+        )
+        TransactionAmountComposable(
+            label = stringResource(id = R.string.transaction_paid),
+            amount = t.amountEffective,
+            amountType = AmountType.Negative,
+        )
+        TransactionAmountComposable(
+            label = stringResource(id = R.string.transaction_order_total),
+            amount = t.amountRaw,
+            amountType = AmountType.Neutral,
+        )
+        val fee = t.amountEffective - t.amountRaw
+        if (!fee.isZero()) {
+            TransactionAmountComposable(
+                label = stringResource(id = R.string.withdraw_fees),
+                amount = fee,
+                amountType = AmountType.Negative,
+            )
+        }
+        DeleteTransactionComposable(onDelete)
+    }
+}
+
+@Preview
+@Composable
+fun TransactionDepositComposablePreview() {
+    val t = TransactionDeposit(
+        transactionId = "transactionId",
+        timestamp = Timestamp(System.currentTimeMillis() - 360 * 60 * 1000),
+        pending = true,
+        depositGroupId = "fooBar",
+        amountRaw = Amount.fromDouble("TESTKUDOS", 42.1337),
+        amountEffective = Amount.fromDouble("TESTKUDOS", 42.23),
+        targetPaytoUri = "https://exchange.example.org/peer/pull/credit";,
+    )
+    Surface {
+        TransactionDepositComposable(t) {}
+    }
+}
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/DeleteTransactionComposable.kt
 
b/wallet/src/main/java/net/taler/wallet/transactions/DeleteTransactionComposable.kt
new file mode 100644
index 0000000..7b69e2b
--- /dev/null
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/DeleteTransactionComposable.kt
@@ -0,0 +1,55 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2022 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/>
+ */
+
+package net.taler.wallet.transactions
+
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material.Button
+import androidx.compose.material.ButtonDefaults
+import androidx.compose.material.Icon
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.res.colorResource
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.unit.dp
+import net.taler.wallet.R
+
+@Composable
+fun DeleteTransactionComposable(onDelete: () -> Unit) {
+    Button(
+        modifier = Modifier.padding(16.dp),
+        colors = ButtonDefaults.buttonColors(backgroundColor = 
colorResource(R.color.red)),
+        onClick = onDelete,
+    ) {
+        Row(verticalAlignment = Alignment.CenterVertically) {
+            Icon(
+                painter = painterResource(id = R.drawable.ic_delete),
+                contentDescription = null,
+                tint = Color.White,
+            )
+            Text(
+                modifier = Modifier.padding(start = 8.dp),
+                text = stringResource(R.string.transactions_delete),
+                color = Color.White,
+            )
+        }
+    }
+}
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 f721090..5443942 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
@@ -20,32 +20,10 @@ import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
-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.MaterialTheme
 import androidx.compose.material.Surface
-import androidx.compose.material.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Alignment.Companion.CenterHorizontally
-import androidx.compose.ui.Alignment.Companion.CenterVertically
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.platform.ComposeView
-import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.res.colorResource
-import androidx.compose.ui.res.painterResource
-import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.unit.dp
 import com.google.android.material.composethemeadapter.MdcTheme
-import net.taler.common.toAbsoluteTime
-import net.taler.wallet.R
+import net.taler.wallet.deposit.TransactionDepositComposable
 
 class TransactionDepositFragment : TransactionDetailFragment() {
 
@@ -66,40 +44,3 @@ class TransactionDepositFragment : 
TransactionDetailFragment() {
         }
     }
 }
-
-@Composable
-fun TransactionDepositComposable(t: TransactionDeposit, onDelete: () -> Unit) {
-    val scrollState = rememberScrollState()
-    Column(
-        modifier = Modifier
-            .fillMaxWidth()
-            .verticalScroll(scrollState),
-        horizontalAlignment = CenterHorizontally,
-    ) {
-        val context = LocalContext.current
-        Text(
-            modifier = Modifier.padding(16.dp),
-            text = t.timestamp.ms.toAbsoluteTime(context).toString(),
-            style = MaterialTheme.typography.body1,
-        )
-        // TODO
-        Button(
-            modifier = Modifier.padding(16.dp),
-            colors = ButtonDefaults.buttonColors(backgroundColor = 
colorResource(R.color.red)),
-            onClick = onDelete,
-        ) {
-            Row(verticalAlignment = CenterVertically) {
-                Icon(
-                    painter = painterResource(id = R.drawable.ic_delete),
-                    contentDescription = null,
-                    tint = Color.White,
-                )
-                Text(
-                    modifier = Modifier.padding(start = 8.dp),
-                    text = stringResource(R.string.transactions_delete),
-                    color = Color.White,
-                )
-            }
-        }
-    }
-}
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 749ec30..b03eb39 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt
@@ -21,27 +21,20 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
 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.MaterialTheme
 import androidx.compose.material.Surface
 import androidx.compose.material.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Alignment.Companion.CenterHorizontally
-import androidx.compose.ui.Alignment.Companion.CenterVertically
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.platform.ComposeView
 import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.res.colorResource
-import androidx.compose.ui.res.painterResource
-import androidx.compose.ui.res.stringResource
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
 import com.google.android.material.composethemeadapter.MdcTheme
@@ -95,24 +88,7 @@ fun TransactionPeerComposable(t: Transaction, onDelete: () 
-> Unit) {
             is TransactionPeerPushDebit -> 
TransactionPeerPushDebitComposable(t)
             else -> error("unexpected transaction: ${t::class.simpleName}")
         }
-        Button(
-            modifier = Modifier.padding(16.dp),
-            colors = ButtonDefaults.buttonColors(backgroundColor = 
colorResource(R.color.red)),
-            onClick = onDelete,
-        ) {
-            Row(verticalAlignment = CenterVertically) {
-                Icon(
-                    painter = painterResource(id = R.drawable.ic_delete),
-                    contentDescription = null,
-                    tint = Color.White,
-                )
-                Text(
-                    modifier = Modifier.padding(start = 8.dp),
-                    text = stringResource(R.string.transactions_delete),
-                    color = Color.White,
-                )
-            }
-        }
+        DeleteTransactionComposable(onDelete)
     }
 }
 
diff --git a/wallet/src/main/res/navigation/nav_graph.xml 
b/wallet/src/main/res/navigation/nav_graph.xml
index 3d253af..f1d189f 100644
--- a/wallet/src/main/res/navigation/nav_graph.xml
+++ b/wallet/src/main/res/navigation/nav_graph.xml
@@ -161,6 +161,10 @@
             android:defaultValue="@null"
             app:argType="string"
             app:nullable="true" />
+        <action
+            android:id="@+id/action_nav_deposit_to_nav_main"
+            app:destination="@id/nav_main"
+            app:popUpTo="@id/nav_main" />
     </fragment>
 
     <fragment

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