gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]