[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.
- [taler-taler-android] branch master updated (4a5b7f7 -> 074032c),
gnunet <=