[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-taler-android] branch master updated (905c632 -> a5d6420)
From: |
gnunet |
Subject: |
[taler-taler-android] branch master updated (905c632 -> a5d6420) |
Date: |
Fri, 06 Jan 2023 17:24:06 +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 905c632 [wallet] Allow to restrict coins to age when withdrawing
new ab1f17d [wallet] Deposit to bitcoin address if currency is BITCOINBTC
new a5d6420 [wallet] Also log payload of wallet-core API requests
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/accounts/KnownBankAccounts.kt | 20 +-
.../net/taler/wallet/backend/WalletBackendApi.kt | 8 +-
.../net/taler/wallet/deposit/DepositFragment.kt | 201 +--------------------
.../net/taler/wallet/deposit/DepositManager.kt | 17 +-
.../wallet/deposit/MakeBitcoinDepositComposable.kt | 158 ++++++++++++++++
...DepositFragment.kt => MakeDepositComposable.kt} | 93 +---------
wallet/src/main/res/values/strings.xml | 2 +
7 files changed, 211 insertions(+), 288 deletions(-)
create mode 100644
wallet/src/main/java/net/taler/wallet/deposit/MakeBitcoinDepositComposable.kt
copy wallet/src/main/java/net/taler/wallet/deposit/{DepositFragment.kt =>
MakeDepositComposable.kt} (70%)
diff --git
a/wallet/src/main/java/net/taler/wallet/accounts/KnownBankAccounts.kt
b/wallet/src/main/java/net/taler/wallet/accounts/KnownBankAccounts.kt
index 35dd45a..de8676c 100644
--- a/wallet/src/main/java/net/taler/wallet/accounts/KnownBankAccounts.kt
+++ b/wallet/src/main/java/net/taler/wallet/accounts/KnownBankAccounts.kt
@@ -90,8 +90,24 @@ class PaytoUriBitcoin(
@SerialName("segwitAddrs")
val segwitAddresses: List<String>,
override val targetPath: String,
- override val params: Map<String, String>,
+ override val params: Map<String, String> = emptyMap(),
) : PaytoUri(
isKnown = true,
targetType = "bitcoin",
-)
+) {
+ val paytoUri: String
+ get() = Uri.Builder()
+ .scheme("payto")
+ .authority(targetType)
+ .apply {
+ segwitAddresses.forEach { address ->
+ appendPath(address)
+ }
+ }
+ .apply {
+ params.forEach { (key, value) ->
+ appendQueryParameter(key, value)
+ }
+ }
+ .build().toString()
+}
diff --git a/wallet/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt
b/wallet/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt
index 76aceb2..b07b717 100644
--- a/wallet/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt
+++ b/wallet/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt
@@ -44,7 +44,7 @@ import kotlin.coroutines.suspendCoroutine
class WalletBackendApi(
private val app: Application,
- private val notificationHandler: ((payload: JSONObject) -> Unit)
+ private val notificationHandler: ((payload: JSONObject) -> Unit),
) {
private var walletBackendMessenger: Messenger? = null
private val queuedMessages = LinkedList<Message>()
@@ -121,10 +121,10 @@ class WalletBackendApi(
fun sendRequest(
operation: String,
args: JSONObject? = null,
- onResponse: (isError: Boolean, message: JSONObject) -> Unit = { _, _
-> }
+ onResponse: (isError: Boolean, message: JSONObject) -> Unit = { _, _
-> },
) {
val requestID = nextRequestID.incrementAndGet()
- Log.i(TAG, "sending request for operation $operation ($requestID)")
+ Log.i(TAG, "sending request for operation $operation
($requestID)\n${args?.toString(2)}")
val msg = Message.obtain(null, MSG_COMMAND)
handlers[requestID] = onResponse
msg.replyTo = incomingMessenger
@@ -145,7 +145,7 @@ class WalletBackendApi(
suspend inline fun <reified T> request(
operation: String,
serializer: KSerializer<T>? = null,
- noinline args: (JSONObject.() -> JSONObject)? = null
+ noinline args: (JSONObject.() -> JSONObject)? = null,
): WalletResponse<T> = withContext(Dispatchers.Default) {
suspendCoroutine { cont ->
val json = Json {
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 5d209ac..c4b302f 100644
--- a/wallet/src/main/java/net/taler/wallet/deposit/DepositFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/deposit/DepositFragment.kt
@@ -20,41 +20,14 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import androidx.compose.animation.AnimatedVisibility
-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.Button
-import androidx.compose.material.OutlinedTextField
-import androidx.compose.material.Surface
-import androidx.compose.material.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.saveable.rememberSaveable
-import androidx.compose.runtime.setValue
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.focus.FocusRequester
-import androidx.compose.ui.focus.focusRequester
-import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.ComposeView
-import androidx.compose.ui.platform.LocalFocusManager
-import androidx.compose.ui.res.colorResource
-import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.tooling.preview.Preview
-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 net.taler.common.Amount
import net.taler.common.showError
+import net.taler.wallet.CURRENCY_BTC
import net.taler.wallet.MainViewModel
import net.taler.wallet.R
import net.taler.wallet.compose.TalerSurface
@@ -83,7 +56,14 @@ class DepositFragment : Fragment() {
setContent {
TalerSurface {
val state =
depositManager.depositState.collectAsStateLifecycleAware()
- MakeDepositComposable(
+ if (amount.currency == CURRENCY_BTC)
MakeBitcoinDepositComposable(
+ state = state.value,
+ amount = amount,
+ bitcoinAddress = null,
+ onMakeDeposit = { amount, bitcoinAddress ->
+ depositManager.onDepositButtonClicked(amount,
bitcoinAddress)
+ },
+ ) else MakeDepositComposable(
state = state.value,
amount = amount,
presetName = receiverName,
@@ -129,166 +109,3 @@ class DepositFragment : Fragment() {
depositManager.onDepositButtonClicked(amount, receiverName, iban, bic)
}
}
-
-@Composable
-private fun MakeDepositComposable(
- state: DepositState,
- amount: Amount,
- presetName: String? = null,
- presetIban: String? = null,
- onMakeDeposit: (Amount, String, String, String) -> Unit,
-) {
- val scrollState = rememberScrollState()
- Column(
- modifier = Modifier
- .fillMaxWidth()
- .verticalScroll(scrollState),
- horizontalAlignment = Alignment.CenterHorizontally,
- ) {
- var name by rememberSaveable { mutableStateOf(presetName ?: "") }
- var iban by rememberSaveable { mutableStateOf(presetIban ?: "") }
- var bic by rememberSaveable { mutableStateOf("") }
- val focusRequester = remember { FocusRequester() }
- OutlinedTextField(
- modifier = Modifier
- .padding(16.dp)
- .focusRequester(focusRequester),
- value = name,
- enabled = !state.showFees,
- onValueChange = { input ->
- name = input
- },
- isError = name.isBlank(),
- label = {
- Text(
- stringResource(R.string.send_deposit_name),
- color = if (name.isBlank()) {
- colorResource(R.color.red)
- } else Color.Unspecified,
- )
- }
- )
- LaunchedEffect(Unit) {
- focusRequester.requestFocus()
- }
- OutlinedTextField(
- modifier = Modifier
- .padding(16.dp),
- value = iban,
- enabled = !state.showFees,
- onValueChange = { input ->
- iban = input
- },
- isError = iban.isBlank(),
- label = {
- Text(
- text = stringResource(R.string.send_deposit_iban),
- color = if (iban.isBlank()) {
- colorResource(R.color.red)
- } else Color.Unspecified,
- )
- }
- )
- OutlinedTextField(
- modifier = Modifier
- .padding(16.dp),
- value = bic,
- enabled = !state.showFees,
- onValueChange = { input ->
- bic = input
- },
- label = {
- Text(
- text = stringResource(R.string.send_deposit_bic),
- )
- }
- )
- 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 = 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 = shownAmount.toString(),
- )
- AnimatedVisibility(visible = state.showFees) {
- Column(
- modifier = Modifier.fillMaxWidth(),
- horizontalAlignment = Alignment.CenterHorizontally,
- ) {
- 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),
- )
- Text(
- modifier = Modifier.padding(16.dp),
- fontSize = 24.sp,
- color = colorResource(if (fee.isZero()) R.color.green else
R.color.red),
- text = if (fee.isZero()) {
- fee.toString()
- } else {
- stringResource(R.string.amount_negative,
fee.toString())
- },
- )
- Text(
- modifier = Modifier.padding(horizontal = 16.dp),
- text = stringResource(id = R.string.send_amount),
- )
- Text(
- modifier = Modifier.padding(16.dp),
- fontSize = 24.sp,
- color = colorResource(R.color.green),
- text = totalAmount.toString(),
- )
- }
- }
- AnimatedVisibility(visible = state is DepositState.Error) {
- Text(
- modifier = Modifier.padding(16.dp),
- fontSize = 18.sp,
- color = colorResource(R.color.red),
- text = (state as? DepositState.Error)?.msg ?: "",
- )
- }
- val focusManager = LocalFocusManager.current
- Button(
- modifier = Modifier.padding(16.dp),
- enabled = iban.isNotBlank(),
- onClick = {
- focusManager.clearFocus()
- onMakeDeposit(amount, name, iban, bic)
- },
- ) {
- Text(text = stringResource(
- if (state.showFees) R.string.send_deposit_create_button
- else R.string.send_deposit_check_fees_button
- ))
- }
- }
-}
-
-@Preview
-@Composable
-fun PreviewMakeDepositComposable() {
- Surface {
- val state = DepositState.FeesChecked(
- effectiveDepositAmount = Amount.fromDouble("TESTKUDOS", 42.00),
- totalDepositCost = Amount.fromDouble("TESTKUDOS", 42.23),
- )
- MakeDepositComposable(
- state = state,
- amount = Amount.fromDouble("TESTKUDOS", 42.23)) { _, _, _, _ ->
- }
- }
-}
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 81124ec..0f10b5f 100644
--- a/wallet/src/main/java/net/taler/wallet/deposit/DepositManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/deposit/DepositManager.kt
@@ -26,6 +26,7 @@ import kotlinx.coroutines.launch
import kotlinx.serialization.Serializable
import net.taler.common.Amount
import net.taler.wallet.TAG
+import net.taler.wallet.accounts.PaytoUriBitcoin
import net.taler.wallet.accounts.PaytoUriIban
import net.taler.wallet.backend.WalletBackendApi
@@ -52,16 +53,28 @@ class DepositManager(
targetPath = "",
params = mapOf("receiver-name" to receiverName),
).paytoUri
+ makeDeposit(amount, paytoUri)
+ }
+
+ @UiThread
+ fun onDepositButtonClicked(amount: Amount, bitcoinAddress: String) {
+ val paytoUri: String = PaytoUriBitcoin(
+ segwitAddresses = listOf(bitcoinAddress),
+ targetPath = bitcoinAddress,
+ ).paytoUri
+ makeDeposit(amount, paytoUri)
+ }
+ private fun makeDeposit(amount: Amount, uri: String) {
if (depositState.value.showFees) makeDeposit(
- paytoUri = paytoUri,
+ paytoUri = uri,
amount = amount,
totalDepositCost = depositState.value.totalDepositCost
?: Amount.zero(amount.currency),
effectiveDepositAmount = depositState.value.effectiveDepositAmount
?: Amount.zero(amount.currency),
) else {
- prepareDeposit(paytoUri, amount)
+ prepareDeposit(uri, amount)
}
}
diff --git
a/wallet/src/main/java/net/taler/wallet/deposit/MakeBitcoinDepositComposable.kt
b/wallet/src/main/java/net/taler/wallet/deposit/MakeBitcoinDepositComposable.kt
new file mode 100644
index 0000000..1ff3423
--- /dev/null
+++
b/wallet/src/main/java/net/taler/wallet/deposit/MakeBitcoinDepositComposable.kt
@@ -0,0 +1,158 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2023 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.animation.AnimatedVisibility
+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.Button
+import androidx.compose.material.OutlinedTextField
+import androidx.compose.material.Surface
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment.Companion.CenterHorizontally
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.focus.FocusRequester
+import androidx.compose.ui.focus.focusRequester
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalFocusManager
+import androidx.compose.ui.res.colorResource
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import net.taler.common.Amount
+import net.taler.wallet.CURRENCY_BTC
+import net.taler.wallet.R
+import net.taler.wallet.transactions.AmountType
+import net.taler.wallet.transactions.TransactionAmountComposable
+
+@Composable
+fun MakeBitcoinDepositComposable(
+ state: DepositState,
+ amount: Amount,
+ bitcoinAddress: String? = null,
+ onMakeDeposit: (Amount, String) -> Unit,
+) {
+ val scrollState = rememberScrollState()
+ Column(
+ modifier = Modifier
+ .fillMaxWidth()
+ .verticalScroll(scrollState),
+ horizontalAlignment = CenterHorizontally,
+ ) {
+ var address by rememberSaveable { mutableStateOf(bitcoinAddress ?: "")
}
+ val focusRequester = remember { FocusRequester() }
+ OutlinedTextField(
+ modifier = Modifier
+ .padding(16.dp)
+ .focusRequester(focusRequester),
+ value = address,
+ enabled = !state.showFees,
+ onValueChange = { input ->
+ address = input
+ },
+ isError = address.isBlank(),
+ label = {
+ Text(
+ stringResource(R.string.send_deposit_bitcoin_address),
+ color = if (address.isBlank()) {
+ colorResource(R.color.red)
+ } else Color.Unspecified,
+ )
+ }
+ )
+ LaunchedEffect(Unit) {
+ focusRequester.requestFocus()
+ }
+ val amountTitle = if (state.effectiveDepositAmount == null) {
+ R.string.amount_chosen
+ } else R.string.send_deposit_amount_effective
+ TransactionAmountComposable(
+ label = stringResource(id = amountTitle),
+ amount = state.effectiveDepositAmount ?: amount,
+ amountType = AmountType.Positive,
+ )
+ AnimatedVisibility(visible = state.showFees) {
+ Column(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalAlignment = CenterHorizontally,
+ ) {
+ val totalAmount = state.totalDepositCost ?: amount
+ val effectiveAmount = state.effectiveDepositAmount ?:
Amount.zero(amount.currency)
+ val fee = totalAmount - effectiveAmount
+ TransactionAmountComposable(
+ label = stringResource(id = R.string.withdraw_fees),
+ amount = fee,
+ amountType = AmountType.Negative,
+ )
+ TransactionAmountComposable(
+ label = stringResource(id = R.string.send_amount),
+ amount = totalAmount,
+ amountType = AmountType.Positive,
+ )
+ }
+ }
+ AnimatedVisibility(visible = state is DepositState.Error) {
+ Text(
+ modifier = Modifier.padding(16.dp),
+ fontSize = 18.sp,
+ color = colorResource(R.color.red),
+ text = (state as? DepositState.Error)?.msg ?: "",
+ )
+ }
+ val focusManager = LocalFocusManager.current
+ Button(
+ modifier = Modifier.padding(16.dp),
+ enabled = address.isNotBlank(),
+ onClick = {
+ focusManager.clearFocus()
+ // TODO validate bitcoin address
+ onMakeDeposit(amount, address)
+ },
+ ) {
+ Text(text = stringResource(
+ if (state.showFees) R.string.send_deposit_bitcoin_create_button
+ else R.string.send_deposit_check_fees_button
+ ))
+ }
+ }
+}
+
+@Preview
+@Composable
+fun PreviewMakeBitcoinDepositComposable() {
+ Surface {
+ val state = DepositState.FeesChecked(
+ effectiveDepositAmount = Amount.fromDouble(CURRENCY_BTC, 42.00),
+ totalDepositCost = Amount.fromDouble(CURRENCY_BTC, 42.23),
+ )
+ MakeBitcoinDepositComposable(
+ state = state,
+ amount = Amount.fromDouble(CURRENCY_BTC, 42.23)) { _, _ ->
+ }
+ }
+}
diff --git a/wallet/src/main/java/net/taler/wallet/deposit/DepositFragment.kt
b/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt
similarity index 70%
copy from wallet/src/main/java/net/taler/wallet/deposit/DepositFragment.kt
copy to wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt
index 5d209ac..8b5cac1 100644
--- a/wallet/src/main/java/net/taler/wallet/deposit/DepositFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt
@@ -1,6 +1,6 @@
/*
* This file is part of GNU Taler
- * (C) 2022 Taler Systems S.A.
+ * (C) 2023 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
@@ -16,10 +16,6 @@
package net.taler.wallet.deposit
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
@@ -37,101 +33,22 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
-import androidx.compose.ui.Alignment
+import androidx.compose.ui.Alignment.Companion.CenterHorizontally
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
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 net.taler.common.Amount
-import net.taler.common.showError
-import net.taler.wallet.MainViewModel
import net.taler.wallet.R
-import net.taler.wallet.compose.TalerSurface
-import net.taler.wallet.compose.collectAsStateLifecycleAware
-
-class DepositFragment : Fragment() {
- private val model: MainViewModel by activityViewModels()
- private val depositManager get() = model.depositManager
-
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?,
- ): View {
- val amount = arguments?.getString("amount")?.let {
- Amount.fromJSONString(it)
- } ?: error("no amount passed")
- val receiverName = arguments?.getString("receiverName")
- val iban = arguments?.getString("IBAN")
- val bic = arguments?.getString("BIC") ?: ""
-
- if (receiverName != null && iban != null) {
- onDepositButtonClicked(amount, receiverName, iban, bic)
- }
- return ComposeView(requireContext()).apply {
- setContent {
- TalerSurface {
- val state =
depositManager.depositState.collectAsStateLifecycleAware()
- MakeDepositComposable(
- state = state.value,
- amount = amount,
- presetName = receiverName,
- presetIban = iban,
- onMakeDeposit =
this@DepositFragment::onDepositButtonClicked,
- )
- }
- }
- }
- }
-
- 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)
- }
-
- override fun onDestroy() {
- super.onDestroy()
- if (!requireActivity().isChangingConfigurations) {
- depositManager.resetDepositState()
- }
- }
-
- private fun onDepositButtonClicked(
- amount: Amount,
- receiverName: String,
- iban: String,
- bic: String,
- ) {
- depositManager.onDepositButtonClicked(amount, receiverName, iban, bic)
- }
-}
@Composable
-private fun MakeDepositComposable(
+fun MakeDepositComposable(
state: DepositState,
amount: Amount,
presetName: String? = null,
@@ -143,7 +60,7 @@ private fun MakeDepositComposable(
modifier = Modifier
.fillMaxWidth()
.verticalScroll(scrollState),
- horizontalAlignment = Alignment.CenterHorizontally,
+ horizontalAlignment = CenterHorizontally,
) {
var name by rememberSaveable { mutableStateOf(presetName ?: "") }
var iban by rememberSaveable { mutableStateOf(presetIban ?: "") }
@@ -222,7 +139,7 @@ private fun MakeDepositComposable(
AnimatedVisibility(visible = state.showFees) {
Column(
modifier = Modifier.fillMaxWidth(),
- horizontalAlignment = Alignment.CenterHorizontally,
+ horizontalAlignment = CenterHorizontally,
) {
val totalAmount = state.totalDepositCost ?: amount
val effectiveAmount = state.effectiveDepositAmount ?:
Amount.zero(amount.currency)
diff --git a/wallet/src/main/res/values/strings.xml
b/wallet/src/main/res/values/strings.xml
index 0595fa0..cb80922 100644
--- a/wallet/src/main/res/values/strings.xml
+++ b/wallet/src/main/res/values/strings.xml
@@ -134,9 +134,11 @@ GNU Taler is immune against many types of fraud, such as
phishing of credit card
<string name="send_deposit_iban">IBAN</string>
<string name="send_deposit_bic">BIC/SWIFT</string>
<string name="send_deposit_name">Account holder</string>
+ <string name="send_deposit_bitcoin_address">Bitcoin address</string>
<string name="send_deposit_check_fees_button">Check fees</string>
<string name="send_deposit_amount_effective">Effective Amount</string>
<string name="send_deposit_create_button">Make deposit</string>
+ <string name="send_deposit_bitcoin_create_button">Transfer Bitcoin</string>
<string name="send_peer">To another wallet</string>
<string name="send_peer_bitcoin">To another Taler wallet</string>
<string name="send_peer_title">Send money to another wallet</string>
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-taler-android] branch master updated (905c632 -> a5d6420),
gnunet <=