diff options
Diffstat (limited to 'wallet')
30 files changed, 308 insertions, 233 deletions
diff --git a/wallet/build.gradle b/wallet/build.gradle index 40136fc..93f4a49 100644 --- a/wallet/build.gradle +++ b/wallet/build.gradle @@ -41,8 +41,8 @@ android { applicationId "net.taler.wallet" minSdkVersion 24 targetSdkVersion 33 - versionCode 40 - versionName "0.10.1" + versionCode 41 + versionName "0.10.2" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { diff --git a/wallet/src/main/java/net/taler/wallet/balances/BalanceAdapter.kt b/wallet/src/main/java/net/taler/wallet/balances/BalanceAdapter.kt index f40def4..aabef4b 100644 --- a/wallet/src/main/java/net/taler/wallet/balances/BalanceAdapter.kt +++ b/wallet/src/main/java/net/taler/wallet/balances/BalanceAdapter.kt @@ -61,8 +61,7 @@ class BalanceAdapter(private val listener: BalanceClickListener) : Adapter<Balan private val amountView: TextView = v.findViewById(R.id.balanceAmountView) private val scopeView: TextView = v.findViewById(R.id.scopeView) private val balanceInboundAmount: TextView = v.findViewById(R.id.balanceInboundAmount) - private val balanceInboundLabel: TextView = v.findViewById(R.id.balanceInboundLabel) - private val pendingView: TextView = v.findViewById(R.id.pendingView) + private val balanceOutboundAmount: TextView = v.findViewById(R.id.balanceOutboundAmount) fun bind(item: BalanceItem) { v.setOnClickListener { listener.onBalanceClick(item.scopeInfo) } @@ -71,11 +70,17 @@ class BalanceAdapter(private val listener: BalanceClickListener) : Adapter<Balan val amountIncoming = item.pendingIncoming if (amountIncoming.isZero()) { balanceInboundAmount.visibility = GONE - balanceInboundLabel.visibility = GONE } else { balanceInboundAmount.visibility = VISIBLE - balanceInboundLabel.visibility = VISIBLE - balanceInboundAmount.text = v.context.getString(R.string.amount_positive, amountIncoming.toString(showSymbol = false)) + balanceInboundAmount.text = v.context.getString(R.string.balances_inbound_amount, amountIncoming.toString(showSymbol = false)) + } + + val amountOutgoing = item.pendingOutgoing + if (amountOutgoing.isZero()) { + balanceOutboundAmount.visibility = GONE + } else { + balanceOutboundAmount.visibility = VISIBLE + balanceOutboundAmount.text = v.context.getString(R.string.balances_outbound_amount, amountOutgoing.toString(showSymbol = false)) } val scopeInfo = item.scopeInfo @@ -90,8 +95,6 @@ class BalanceAdapter(private val listener: BalanceClickListener) : Adapter<Balan VISIBLE } } - - pendingView.visibility = if (item.hasPending) VISIBLE else GONE } } diff --git a/wallet/src/main/java/net/taler/wallet/deposit/MakeBitcoinDepositComposable.kt b/wallet/src/main/java/net/taler/wallet/deposit/MakeBitcoinDepositComposable.kt index 3fa0d98..ec869f9 100644 --- a/wallet/src/main/java/net/taler/wallet/deposit/MakeBitcoinDepositComposable.kt +++ b/wallet/src/main/java/net/taler/wallet/deposit/MakeBitcoinDepositComposable.kt @@ -104,12 +104,14 @@ fun MakeBitcoinDepositComposable( ) { 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, - ) + if (totalAmount > effectiveAmount) { + 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, diff --git a/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt b/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt index 9333ce1..b5d2409 100644 --- a/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt +++ b/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt @@ -134,13 +134,15 @@ fun MakeDepositComposable( ) { val totalAmount = state.totalDepositCost ?: amount val effectiveAmount = state.effectiveDepositAmount ?: Amount.zero(amount.currency) - val fee = totalAmount - effectiveAmount + if (totalAmount > effectiveAmount) { + val fee = totalAmount - effectiveAmount - TransactionAmountComposable( - label = stringResource(R.string.withdraw_fees), - amount = fee.withSpec(amount.spec), - amountType = if (fee.isZero()) Positive else Negative, - ) + TransactionAmountComposable( + label = stringResource(R.string.withdraw_fees), + amount = fee.withSpec(amount.spec), + amountType = Negative, + ) + } TransactionAmountComposable( label = stringResource(R.string.send_amount), diff --git a/wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt b/wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt index 817dfac..b2384dd 100644 --- a/wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt +++ b/wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt @@ -77,8 +77,8 @@ fun TransactionDepositComposable( amountType = AmountType.Neutral, ) - val fee = t.amountEffective - t.amountRaw - if (!fee.isZero()) { + if (t.amountEffective > t.amountRaw) { + val fee = t.amountEffective - t.amountRaw TransactionAmountComposable( label = stringResource(id = R.string.withdraw_fees), amount = fee.withSpec(spec), diff --git a/wallet/src/main/java/net/taler/wallet/payment/PayTemplateComposable.kt b/wallet/src/main/java/net/taler/wallet/payment/PayTemplateComposable.kt index 3ea04cc..ffa4875 100644 --- a/wallet/src/main/java/net/taler/wallet/payment/PayTemplateComposable.kt +++ b/wallet/src/main/java/net/taler/wallet/payment/PayTemplateComposable.kt @@ -18,6 +18,7 @@ package net.taler.wallet.payment import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -25,6 +26,7 @@ import androidx.compose.ui.Alignment.Companion.Center import androidx.compose.ui.Modifier 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.ContractTerms import net.taler.wallet.AmountResult @@ -86,7 +88,7 @@ fun PayTemplateComposable( @Composable fun PayTemplateError(message: String) { Box( - modifier = Modifier.fillMaxSize(), + modifier = Modifier.padding(16.dp).fillMaxSize(), contentAlignment = Center, ) { Text( @@ -144,7 +146,7 @@ fun PayTemplateInsufficientBalancePreview() { } } -@Preview +@Preview(widthDp = 300) @Composable fun PayTemplateAlreadyPaidPreview() { TalerSurface { diff --git a/wallet/src/main/java/net/taler/wallet/payment/TransactionPaymentComposable.kt b/wallet/src/main/java/net/taler/wallet/payment/TransactionPaymentComposable.kt index 0f6d661..4304b54 100644 --- a/wallet/src/main/java/net/taler/wallet/payment/TransactionPaymentComposable.kt +++ b/wallet/src/main/java/net/taler/wallet/payment/TransactionPaymentComposable.kt @@ -82,8 +82,8 @@ fun TransactionPaymentComposable( amountType = AmountType.Neutral, ) - val fee = t.amountEffective - t.amountRaw - if (!fee.isZero()) { + if (t.amountEffective > t.amountRaw) { + val fee = t.amountEffective - t.amountRaw TransactionAmountComposable( label = stringResource(id = R.string.withdraw_fees), amount = fee.withSpec(spec), diff --git a/wallet/src/main/java/net/taler/wallet/peer/IncomingComposable.kt b/wallet/src/main/java/net/taler/wallet/peer/IncomingComposable.kt index 1ce0175..07bc48e 100644 --- a/wallet/src/main/java/net/taler/wallet/peer/IncomingComposable.kt +++ b/wallet/src/main/java/net/taler/wallet/peer/IncomingComposable.kt @@ -145,22 +145,26 @@ fun ColumnScope.PeerPullTermsComposable( ) } // this gets used for credit and debit, so fee calculation differs - val fee = if (data.isCredit) { + val fee = if (data.isCredit && terms.amountRaw > terms.amountEffective) { terms.amountRaw - terms.amountEffective - } else { + } else if (terms.amountEffective > terms.amountRaw) { terms.amountEffective - terms.amountRaw + } else null + + if (fee != null) { + val feeStr = if (data.isCredit) { + stringResource(R.string.amount_negative, fee) + } else { + stringResource(R.string.amount_positive, fee) + } + Text( + modifier = Modifier.align(End), + text = feeStr, + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.error, + ) } - val feeStr = if (data.isCredit) { - stringResource(R.string.amount_negative, fee) - } else { - stringResource(R.string.amount_positive, fee) - } - if (!fee.isZero()) Text( - modifier = Modifier.align(End), - text = feeStr, - style = MaterialTheme.typography.bodyLarge, - color = MaterialTheme.colorScheme.error, - ) + if (terms is IncomingAccepting) { CircularProgressIndicator( modifier = Modifier diff --git a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullComposable.kt b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullComposable.kt index 90b520e..a456303 100644 --- a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullComposable.kt +++ b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullComposable.kt @@ -148,9 +148,9 @@ fun OutgoingPullIntroComposable( amountType = AmountType.Positive, ) - if (state is OutgoingChecked) { + if (state is OutgoingChecked && state.amountRaw > state.amountEffective) { val fee = state.amountRaw - state.amountEffective - if (!fee.isZero()) TransactionAmountComposable( + TransactionAmountComposable( label = stringResource(id = R.string.withdraw_fees), amount = fee.withSpec(amount.spec), amountType = AmountType.Negative, diff --git a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushComposable.kt b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushComposable.kt index d39fdc8..7eba733 100644 --- a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushComposable.kt +++ b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushComposable.kt @@ -89,7 +89,7 @@ fun OutgoingPushIntroComposable( style = MaterialTheme.typography.titleLarge, ) - if (state is OutgoingChecked) { + if (state is OutgoingChecked && state.amountEffective > state.amountRaw) { val fee = state.amountEffective - state.amountRaw Text( modifier = Modifier.padding(vertical = 16.dp), diff --git a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullCredit.kt b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullCredit.kt index 3b15b6f..20d9a2f 100644 --- a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullCredit.kt +++ b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullCredit.kt @@ -54,8 +54,8 @@ fun ColumnScope.TransactionPeerPullCreditComposable(t: TransactionPeerPullCredit amountType = AmountType.Neutral, ) - val fee = t.amountRaw - t.amountEffective - if (!fee.isZero()) { + if (t.amountRaw > t.amountEffective) { + val fee = t.amountRaw - t.amountEffective TransactionAmountComposable( label = stringResource(id = R.string.withdraw_fees), amount = fee.withSpec(spec), diff --git a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullDebit.kt b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullDebit.kt index dadff4a..8c197b0 100644 --- a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullDebit.kt +++ b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullDebit.kt @@ -46,8 +46,8 @@ fun TransactionPeerPullDebitComposable(t: TransactionPeerPullDebit, spec: Curren amountType = AmountType.Neutral, ) - val fee = t.amountEffective - t.amountRaw - if (!fee.isZero()) { + if (t.amountEffective > t.amountRaw) { + val fee = t.amountEffective - t.amountRaw TransactionAmountComposable( label = stringResource(id = R.string.withdraw_fees), amount = fee.withSpec(spec), diff --git a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushCredit.kt b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushCredit.kt index dbf0fb9..b522563 100644 --- a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushCredit.kt +++ b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushCredit.kt @@ -46,8 +46,8 @@ fun TransactionPeerPushCreditComposable(t: TransactionPeerPushCredit, spec: Curr amountType = AmountType.Neutral, ) - val fee = t.amountRaw - t.amountEffective - if (!fee.isZero()) { + if (t.amountRaw > t.amountEffective) { + val fee = t.amountRaw - t.amountEffective TransactionAmountComposable( label = stringResource(id = R.string.withdraw_fees), amount = fee.withSpec(spec), diff --git a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushDebit.kt b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushDebit.kt index e592c3e..eedef94 100644 --- a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushDebit.kt +++ b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushDebit.kt @@ -65,8 +65,8 @@ fun ColumnScope.TransactionPeerPushDebitComposable(t: TransactionPeerPushDebit, amountType = AmountType.Neutral, ) - val fee = t.amountEffective - t.amountRaw - if (!fee.isZero()) { + if (t.amountEffective > t.amountRaw) { + val fee = t.amountEffective - t.amountRaw TransactionAmountComposable( label = stringResource(id = R.string.withdraw_fees), amount = fee.withSpec(spec), diff --git a/wallet/src/main/java/net/taler/wallet/refund/TransactionRefundComposable.kt b/wallet/src/main/java/net/taler/wallet/refund/TransactionRefundComposable.kt index 637b41a..c9a358f 100644 --- a/wallet/src/main/java/net/taler/wallet/refund/TransactionRefundComposable.kt +++ b/wallet/src/main/java/net/taler/wallet/refund/TransactionRefundComposable.kt @@ -81,8 +81,8 @@ fun TransactionRefundComposable( amount = t.amountRaw.withSpec(spec), amountType = AmountType.Neutral, ) - val fee = t.amountRaw - t.amountEffective - if (!fee.isZero()) { + if (t.amountRaw > t.amountEffective) { + val fee = t.amountRaw - t.amountEffective TransactionAmountComposable( label = stringResource(id = R.string.withdraw_fees), amount = fee.withSpec(spec), diff --git a/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt b/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt index 7ccdbde..2bd204c 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt @@ -17,6 +17,7 @@ package net.taler.wallet.transactions import android.content.Context +import android.net.Uri import android.util.Log import androidx.annotation.DrawableRes import androidx.annotation.IdRes @@ -354,10 +355,7 @@ class TransactionRefund( @Transient override val amountType = AmountType.Positive - override fun getTitle(context: Context): String { - val merchantName = paymentInfo?.merchant?.name ?: "null" - return context.getString(R.string.transaction_refund_from, merchantName) - } + override fun getTitle(context: Context) = paymentInfo?.merchant?.name ?: context.getString(R.string.transaction_refund) override val generalTitleRes = R.string.refund_title } @@ -404,7 +402,10 @@ class TransactionDeposit( @Transient override val amountType = AmountType.Negative override fun getTitle(context: Context): String { - return context.getString(R.string.transaction_deposit) + val uri = Uri.parse(targetPaytoUri) + return uri.getQueryParameter("receiver-name")?.let { receiverName -> + context.getString(R.string.transaction_deposit_to, receiverName) + } ?: context.getString(R.string.transaction_deposit) } override val generalTitleRes = R.string.transaction_deposit diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt index 5243427..d2d0c9c 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt @@ -26,6 +26,7 @@ import android.view.MenuItem import android.view.View import android.view.View.INVISIBLE import android.view.ViewGroup +import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView.OnQueryTextListener import androidx.fragment.app.Fragment @@ -44,6 +45,8 @@ import net.taler.wallet.MainViewModel import net.taler.wallet.R import net.taler.wallet.TAG import net.taler.wallet.balances.BalanceState.Success +import net.taler.wallet.balances.ScopeInfo +import net.taler.wallet.cleanExchange import net.taler.wallet.databinding.FragmentTransactionsBinding import net.taler.wallet.showError @@ -115,7 +118,7 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode. if (balances.size == 1) ui.mainFab.visibility = INVISIBLE balances.find { it.scopeInfo == scopeInfo }?.let { balance -> - ui.amount.text = balance.available.toString(showSymbol = false) + ui.actionsBar.amount.text = balance.available.toString(showSymbol = false) transactionAdapter.setCurrencySpec(balance.available.spec) } } @@ -125,10 +128,10 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode. transactionManager.transactions.observe(viewLifecycleOwner) { result -> onTransactionsResult(result) } - ui.sendButton.setOnClickListener { + ui.actionsBar.sendButton.setOnClickListener { findNavController().navigate(R.id.sendFunds) } - ui.receiveButton.setOnClickListener { + ui.actionsBar.receiveButton.setOnClickListener { findNavController().navigate(R.id.action_global_receiveFunds) } ui.mainFab.setOnClickListener { @@ -154,6 +157,8 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode. override fun onStart() { super.onStart() requireActivity().title = getString(R.string.transactions_detail_title_currency, scopeInfo.currency) + (requireActivity() as AppCompatActivity).supportActionBar?.subtitle = + (scopeInfo as? ScopeInfo.Exchange)?.url?.let { cleanExchange(it) } } private fun setupSearch(item: MenuItem) { @@ -261,6 +266,11 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode. return true } + override fun onStop() { + super.onStop() + (requireActivity() as AppCompatActivity).supportActionBar?.subtitle = null + } + override fun onDestroyActionMode(mode: ActionMode) { tracker?.clearSelection() actionMode = null diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt b/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt index 56f56f7..9983409 100644 --- a/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt @@ -175,8 +175,8 @@ class PromptWithdrawFragment : Fragment() { ui.chosenAmountView.text = amountRaw.toString() ui.chosenAmountView.fadeIn() - val fee = amountRaw - amountEffective - if (!fee.isZero()) { + if (amountRaw > amountEffective) { + val fee = amountRaw - amountEffective ui.feeLabel.fadeIn() ui.feeView.text = getString(R.string.amount_negative, fee.toString()) ui.feeView.fadeIn() diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/TransactionWithdrawalComposable.kt b/wallet/src/main/java/net/taler/wallet/withdraw/TransactionWithdrawalComposable.kt index 20f8280..8ffbc6e 100644 --- a/wallet/src/main/java/net/taler/wallet/withdraw/TransactionWithdrawalComposable.kt +++ b/wallet/src/main/java/net/taler/wallet/withdraw/TransactionWithdrawalComposable.kt @@ -81,14 +81,16 @@ fun TransactionWithdrawalComposable( ActionButton(tx = t, listener = actionListener) - TransactionAmountComposable( - label = stringResource(R.string.amount_chosen), - amount = t.amountRaw.withSpec(spec), - amountType = AmountType.Neutral, - ) + if (t.amountRaw != t.amountEffective) { + TransactionAmountComposable( + label = stringResource(R.string.amount_chosen), + amount = t.amountRaw.withSpec(spec), + amountType = AmountType.Neutral, + ) + } - val fee = t.amountRaw - t.amountEffective - if (!fee.isZero()) { + if (t.amountRaw > t.amountEffective) { + val fee = t.amountRaw - t.amountEffective TransactionAmountComposable( label = stringResource(id = R.string.withdraw_fees), amount = fee.withSpec(spec), diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/manual/ScreenTransfer.kt b/wallet/src/main/java/net/taler/wallet/withdraw/manual/ScreenTransfer.kt index 75d03b5..7f586c5 100644 --- a/wallet/src/main/java/net/taler/wallet/withdraw/manual/ScreenTransfer.kt +++ b/wallet/src/main/java/net/taler/wallet/withdraw/manual/ScreenTransfer.kt @@ -206,20 +206,20 @@ fun WithdrawalAmountTransfer( ) } - val fee = amountRaw - amountEffective - if (!fee.isZero()) { + if (amountRaw > amountEffective) { + val fee = amountRaw - amountEffective TransactionAmountComposable( label = stringResource(id = R.string.withdraw_fees), amount = fee, amountType = AmountType.Negative, ) - } - TransactionAmountComposable( - label = stringResource(id = R.string.withdraw_total), - amount = amountEffective, - amountType = AmountType.Positive, - ) + TransactionAmountComposable( + label = stringResource(id = R.string.withdraw_total), + amount = amountEffective, + amountType = AmountType.Positive, + ) + } } } diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/manual/TransferIBAN.kt b/wallet/src/main/java/net/taler/wallet/withdraw/manual/TransferIBAN.kt index d0bc893..1698530 100644 --- a/wallet/src/main/java/net/taler/wallet/withdraw/manual/TransferIBAN.kt +++ b/wallet/src/main/java/net/taler/wallet/withdraw/manual/TransferIBAN.kt @@ -73,11 +73,11 @@ fun TransferIBAN( .padding(all = 16.dp) ) + DetailRow(stringResource(R.string.withdraw_manual_ready_subject), transfer.subject) transfer.receiverName?.let { DetailRow(stringResource(R.string.withdraw_manual_ready_receiver), it) } DetailRow(stringResource(R.string.withdraw_manual_ready_iban), transfer.iban) - DetailRow(stringResource(R.string.withdraw_manual_ready_subject), transfer.subject) TransactionInfoComposable( label = stringResource(R.string.withdraw_exchange), diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/manual/TransferTaler.kt b/wallet/src/main/java/net/taler/wallet/withdraw/manual/TransferTaler.kt index 2ec43b9..089d0de 100644 --- a/wallet/src/main/java/net/taler/wallet/withdraw/manual/TransferTaler.kt +++ b/wallet/src/main/java/net/taler/wallet/withdraw/manual/TransferTaler.kt @@ -73,11 +73,11 @@ fun TransferTaler( .padding(all = 16.dp) ) + DetailRow(stringResource(R.string.withdraw_manual_ready_subject), transfer.subject) transfer.receiverName?.let { DetailRow(stringResource(R.string.withdraw_manual_ready_receiver), it) } DetailRow(stringResource(R.string.withdraw_manual_ready_account), transfer.account) - DetailRow(stringResource(R.string.withdraw_manual_ready_subject), transfer.subject) TransactionInfoComposable( label = stringResource(R.string.withdraw_exchange), diff --git a/wallet/src/main/res/drawable/ic_funds_receive.xml b/wallet/src/main/res/drawable/ic_funds_receive.xml new file mode 100644 index 0000000..f540e4e --- /dev/null +++ b/wallet/src/main/res/drawable/ic_funds_receive.xml @@ -0,0 +1,5 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp"> + + <path android:fillColor="@android:color/white" android:pathData="M20,12l-1.41,-1.41L13,16.17V4h-2v12.17l-5.58,-5.59L4,12l8,8 8,-8z"/> + +</vector> diff --git a/wallet/src/main/res/drawable/ic_funds_send.xml b/wallet/src/main/res/drawable/ic_funds_send.xml new file mode 100644 index 0000000..9696eb6 --- /dev/null +++ b/wallet/src/main/res/drawable/ic_funds_send.xml @@ -0,0 +1,5 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp"> + + <path android:fillColor="@android:color/white" android:pathData="M4,12l1.41,1.41L11,7.83V20h2V7.83l5.58,5.59L20,12l-8,-8 -8,8z"/> + +</vector> diff --git a/wallet/src/main/res/layout/balance_actions.xml b/wallet/src/main/res/layout/balance_actions.xml new file mode 100644 index 0000000..d071a78 --- /dev/null +++ b/wallet/src/main/res/layout/balance_actions.xml @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="utf-8"?><!-- + ~ This file is part of GNU Taler + ~ (C) 2024 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/> + --> + +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> + + <com.google.android.material.button.MaterialButton + android:id="@+id/sendButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="10dp" + android:layout_marginVertical="10dp" + android:paddingHorizontal="18dp" + android:text="@string/transactions_send_funds" + app:icon="@drawable/ic_funds_send" + tools:ignore="MissingConstraints" /> + + <com.google.android.material.button.MaterialButton + android:id="@+id/receiveButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginHorizontal="10dp" + android:layout_marginVertical="10dp" + android:paddingHorizontal="18dp" + android:text="@string/transactions_receive_funds" + app:icon="@drawable/ic_funds_receive" + tools:ignore="MissingConstraints" /> + + <androidx.constraintlayout.helper.widget.Flow + android:layout_width="0dp" + android:layout_height="wrap_content" + app:constraint_referenced_ids="sendButton,receiveButton" + android:paddingHorizontal="10dp" + app:flow_horizontalGap="10dp" + app:flow_horizontalBias="0" + app:flow_horizontalAlign="start" + app:flow_horizontalStyle="packed" + app:flow_wrapMode="chain" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toStartOf="@id/amountBarrier" + app:layout_constraintBottom_toBottomOf="@id/topBarrier"/> + + <androidx.constraintlayout.widget.Barrier + android:id="@+id/amountBarrier" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toTopOf="@id/divider" + app:barrierDirection="start"/> + + <LinearLayout + android:id="@+id/amountLayout" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="16dp" + android:orientation="vertical" + android:gravity="end" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toTopOf="@id/divider" + app:layout_constraintStart_toEndOf="@id/amountBarrier"> + + <TextView + android:id="@+id/balanceLabel" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + android:layout_marginEnd="16dp" + android:text="@string/transactions_balance" + android:textSize="14sp" /> + + <TextView + android:id="@+id/amount" + style="@style/TextAppearance.Material3.TitleLarge" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginEnd="16dp" + android:layout_marginBottom="8dp" + android:textStyle="bold" + tools:text="23.42" + tools:visibility="visible" /> + + </LinearLayout> + + <androidx.constraintlayout.widget.Barrier + android:id="@+id/topBarrier" + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:barrierDirection="bottom" + app:constraint_referenced_ids="sendButton,receiveButton,amountLayout" /> + + <com.google.android.material.divider.MaterialDivider + android:id="@+id/divider" + android:layout_width="match_parent" + android:layout_height="1dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/topBarrier" /> + +</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file diff --git a/wallet/src/main/res/layout/fragment_transactions.xml b/wallet/src/main/res/layout/fragment_transactions.xml index 8fa46f5..c417540 100644 --- a/wallet/src/main/res/layout/fragment_transactions.xml +++ b/wallet/src/main/res/layout/fragment_transactions.xml @@ -20,87 +20,40 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - <com.google.android.material.button.MaterialButton - android:id="@+id/sendButton" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginStart="10dp" - android:text="@string/transactions_send_funds" - app:layout_constraintBottom_toTopOf="@+id/divider" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + <androidx.core.widget.NestedScrollView + android:layout_width="match_parent" + android:layout_height="match_parent"> - <com.google.android.material.button.MaterialButton - android:id="@+id/receiveButton" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginHorizontal="10dp" - android:text="@string/transactions_receive_funds" - app:layout_constraintBottom_toTopOf="@+id/divider" - app:layout_constraintEnd_toStartOf="@+id/amount" - app:layout_constraintHorizontal_chainStyle="spread_inside" - app:layout_constraintStart_toEndOf="@+id/sendButton" - app:layout_constraintTop_toTopOf="parent" /> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> - <TextView - android:id="@+id/balanceLabel" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginTop="8dp" - android:layout_marginEnd="16dp" - android:text="@string/transactions_balance" - android:textSize="14sp" - app:layout_constraintBottom_toTopOf="@+id/amount" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="1.0" - app:layout_constraintStart_toEndOf="@+id/receiveButton" - app:layout_constraintTop_toTopOf="parent" /> + <FrameLayout + android:id="@+id/actionsFrame" + android:layout_height="wrap_content" + android:layout_width="match_parent"> + <include + android:id="@+id/actionsBar" + layout="@layout/balance_actions" + android:layout_height="wrap_content" + android:layout_width="match_parent"/> + </FrameLayout> - <TextView - android:id="@+id/amount" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginEnd="16dp" - android:layout_marginBottom="8dp" - android:textSize="24sp" - android:textStyle="bold" - app:layout_constrainedWidth="true" - app:layout_constraintBottom_toTopOf="@+id/divider" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="0.5" - app:layout_constraintStart_toEndOf="@+id/receiveButton" - app:layout_constraintTop_toBottomOf="@+id/balanceLabel" - tools:text="23.42" - tools:visibility="visible" /> - - <androidx.constraintlayout.widget.Barrier - android:id="@+id/topBarrier" - android:layout_width="match_parent" - android:layout_height="wrap_content" - app:barrierDirection="bottom" - app:constraint_referenced_ids="sendButton,receiveButton,amount" /> + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/list" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:nestedScrollingEnabled="false" + android:scrollbars="vertical" + android:visibility="invisible" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" + tools:listitem="@layout/list_item_transaction" + tools:visibility="visible" /> - <com.google.android.material.divider.MaterialDivider - android:id="@+id/divider" - android:layout_width="match_parent" - android:layout_height="1dp" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/topBarrier" /> + </LinearLayout> - <androidx.recyclerview.widget.RecyclerView - android:id="@+id/list" - android:layout_width="match_parent" - android:layout_height="0dp" - android:scrollbars="vertical" - android:visibility="invisible" - app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/divider" - tools:listitem="@layout/list_item_transaction" - tools:visibility="visible" /> + </androidx.core.widget.NestedScrollView> <TextView android:id="@+id/emptyState" @@ -115,7 +68,7 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/divider" + app:layout_constraintTop_toTopOf="parent" tools:visibility="visible" /> <ProgressBar @@ -128,7 +81,7 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/divider" + app:layout_constraintTop_toTopOf="parent" tools:visibility="visible" /> <com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton diff --git a/wallet/src/main/res/layout/fragment_uri_input.xml b/wallet/src/main/res/layout/fragment_uri_input.xml index 95c2297..6547625 100644 --- a/wallet/src/main/res/layout/fragment_uri_input.xml +++ b/wallet/src/main/res/layout/fragment_uri_input.xml @@ -68,7 +68,7 @@ android:layout_marginTop="16dp" android:layout_marginEnd="16dp" android:backgroundTint="@color/green" - android:text="@string/ok" + android:text="@string/open" android:textColor="@android:color/white" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/pasteButton" diff --git a/wallet/src/main/res/layout/list_item_balance.xml b/wallet/src/main/res/layout/list_item_balance.xml index 53e3d89..6e5e440 100644 --- a/wallet/src/main/res/layout/list_item_balance.xml +++ b/wallet/src/main/res/layout/list_item_balance.xml @@ -14,9 +14,9 @@ ~ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> --> -<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" + android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/selectableItemBackground" @@ -26,26 +26,16 @@ android:id="@+id/balanceAmountView" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginEnd="8dp" style="?textAppearanceDisplaySmall" - app:layout_constraintEnd_toStartOf="@+id/pendingView" - app:layout_constraintHorizontal_bias="0.0" - app:layout_constraintHorizontal_chainStyle="packed" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" tools:text="100.50" /> <TextView android:id="@+id/scopeView" - android:layout_width="0dp" + android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="8dp" style="?textAppearanceBodyMedium" android:visibility="gone" - app:layout_constraintTop_toBottomOf="@id/balanceAmountView" - app:layout_constraintBottom_toTopOf="@id/balanceInboundAmount" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toStartOf="@id/pendingView" tools:text="@string/balance_scope_exchange" tools:visibility="visible"/> @@ -54,40 +44,17 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/green" - android:textSize="20sp" style="?textAppearanceBodyLarge" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toStartOf="@+id/balanceInboundLabel" - app:layout_constraintHorizontal_bias="0.0" - app:layout_constraintHorizontal_chainStyle="packed" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/scopeView" - tools:text="+10 TESTKUDOS" + tools:text="+10 TESTKUDOS inbound" tools:visibility="visible" /> <TextView - android:id="@+id/balanceInboundLabel" + android:id="@+id/balanceOutboundAmount" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="8dp" - android:text="@string/balances_inbound_label" - android:textColor="@color/green" - style="?textAppearanceBodyMedium" - app:layout_constraintBottom_toBottomOf="@+id/balanceInboundAmount" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toEndOf="@+id/balanceInboundAmount" - app:layout_constraintTop_toTopOf="@+id/balanceInboundAmount" + android:textColor="?colorError" + style="?textAppearanceBodyLarge" + tools:text="-10 TESTKUDOS outbound" tools:visibility="visible" /> - <TextView - android:id="@+id/pendingView" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:background="@drawable/badge" - android:text="@string/transaction_pending" - android:textColor="?android:textColorPrimaryInverse" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent" /> - -</androidx.constraintlayout.widget.ConstraintLayout> +</LinearLayout> diff --git a/wallet/src/main/res/values-it/strings.xml b/wallet/src/main/res/values-it/strings.xml index fdc4594..61bb306 100644 --- a/wallet/src/main/res/values-it/strings.xml +++ b/wallet/src/main/res/values-it/strings.xml @@ -226,7 +226,7 @@ <string name="settings_db_export_error">Errore nell\'esportazione della banca dati</string> <string name="transactions_abort">Annulla</string> <string name="transactions_fail">Arresta</string> - <string name="transactions_abort_dialog_title">Annulla la Transazione</string> + <string name="transactions_abort_dialog_title">Annulla la transazione</string> <string name="transactions_fail_dialog_title">Annulla la Transazione</string> <string name="transactions_fail_dialog_message">Sei sicuro di voler annullare questa transazione? I fondi ancora in transito ANDRANNO PERSI.</string> <string name="transactions_abort_dialog_message">Sei sicuro di voler annullare questa transazione? I fondi ancora in transito potrebbero andare persi.</string> diff --git a/wallet/src/main/res/values/strings.xml b/wallet/src/main/res/values/strings.xml index 8466e2d..b0fa772 100644 --- a/wallet/src/main/res/values/strings.xml +++ b/wallet/src/main/res/values/strings.xml @@ -37,21 +37,22 @@ GNU Taler is immune against many types of fraud, such as phishing of credit card <string name="nav_header_subtitle">Wallet</string> <string name="nav_prompt_withdraw">Withdraw Digital Cash</string> - <string name="nav_exchange_tos">Exchange\'s Terms of Service</string> - <string name="nav_exchange_select">Select Exchange</string> - <string name="nav_exchange_fees">Exchange Fees</string> + <string name="nav_exchange_tos">PSP\'s Terms of Service</string> + <string name="nav_exchange_select">Select provider</string> + <string name="nav_exchange_fees">Provider fees</string> <string name="nav_error">Error</string> <string name="button_back">Go Back</string> <string name="button_scan_qr_code">Scan Taler QR Code</string> <string name="button_scan_qr_code_label">Scan QR code</string> - <string name="enter_uri">Enter Taler URI</string> + <string name="enter_uri">Enter taler:// URI</string> <string name="copy" tools:override="true">Copy</string> <string name="copy_uri">Copy Taler URI</string> <string name="paste">Paste</string> <string name="paste_invalid">Clipboard contains an invalid data type</string> <string name="uri_invalid">Not a valid Taler URI</string> <string name="ok">OK</string> + <string name="open">Open</string> <string name="cancel">Cancel</string> <string name="search">Search</string> <string name="menu">Menu</string> @@ -81,22 +82,23 @@ GNU Taler is immune against many types of fraud, such as phishing of credit card <string name="amount_chosen">Chosen Amount</string> <string name="amount_sent">Amount sent</string> <string name="amount_received">Amount received</string> - <string name="balances_inbound_label">inbound</string> + <string name="balances_inbound_amount">+%1$s inbound</string> + <string name="balances_outbound_amount">-%1$s outbound</string> <string name="balances_empty_state">There is no digital cash in your wallet.\n\nYou can get test money from the demo bank:\n\nhttps://bank.demo.taler.net</string> - <string name="balance_scope_exchange">Exchange: %1$s</string> + <string name="balance_scope_exchange">From %1$s</string> <string name="balance_scope_auditor">Auditor: %1$s</string> <string name="transactions_title">Transactions</string> <string name="transactions_balance">Balance</string> - <string name="transactions_send_funds">Send\nFunds</string> + <string name="transactions_send_funds">Send</string> <string name="transactions_send_funds_title">Send %1$s</string> - <string name="transactions_receive_funds">Receive\nFunds</string> + <string name="transactions_receive_funds">Receive</string> <string name="transactions_receive_funds_title">Receive %1$s</string> <string name="transactions_empty">You don\'t have any transactions</string> <string name="transactions_empty_search">No transactions found. Try a different search.</string> <string name="transactions_error">Could not load transactions\n\n%s</string> <string name="transactions_detail_title">Transaction</string> - <string name="transactions_detail_title_currency">%s Transactions</string> + <string name="transactions_detail_title_currency">%s transactions</string> <string name="transactions_delete">Delete</string> <string name="transactions_retry">Retry</string> <string name="transactions_abort">Abort</string> @@ -117,12 +119,12 @@ GNU Taler is immune against many types of fraud, such as phishing of credit card <string name="transaction_paid">Paid</string> <string name="transaction_order_total">Total</string> <string name="transaction_order">Purchase</string> - <string name="transaction_order_id">Receipt #%1$s</string> + <string name="transaction_order_id">Order #%1$s</string> <string name="transaction_refund">Refund</string> - <string name="transaction_refund_from">Refund from %s</string> <string name="transaction_pending">PENDING</string> <string name="transaction_refresh">Coin expiry change fee</string> <string name="transaction_deposit">Deposit</string> + <string name="transaction_deposit_to">Deposit to %1$s</string> <string name="transaction_peer_push_debit">Push payment</string> <string name="transaction_peer_pull_credit">Invoice</string> <string name="transaction_peer_pull_debit">Invoice paid</string> @@ -183,7 +185,7 @@ GNU Taler is immune against many types of fraud, such as phishing of credit card <string name="send_peer_payment_instruction">Let the payee scan this QR code to receive:</string> <string name="send_peer_expiration_period">Expires in</string> <string name="send_peer_expiration_1d">1 day</string> - <string name="send_peer_expiration_7d">7 days</string> + <string name="send_peer_expiration_7d">1 week</string> <string name="send_peer_expiration_30d">30 days</string> <string name="send_peer_expiration_custom">Custom</string> <string name="send_peer_expiration_days">Days</string> @@ -202,21 +204,21 @@ GNU Taler is immune against many types of fraud, such as phishing of credit card <string name="withdraw_fees">Fee</string> <string name="withdraw_restrict_age">Restrict Usage to Age</string> <string name="withdraw_restrict_age_unrestricted">Unrestricted</string> - <string name="withdraw_exchange">Exchange</string> + <string name="withdraw_exchange">Provider</string> <string name="withdraw_bank">Bank</string> <string name="withdraw_button_confirm">Confirm Withdraw</string> <string name="withdraw_button_confirm_bank">Confirm with bank</string> <string name="withdraw_button_tos">Review Terms</string> <string name="withdraw_waiting_confirm">Waiting for confirmation</string> - <string name="withdraw_manual_title">Make a manual transfer to the exchange</string> + <string name="withdraw_manual_title">Make a manual transfer to the provider</string> <string name="withdraw_amount">How much to withdraw?</string> <string name="withdraw_amount_error">Enter valid amount</string> <string name="withdraw_manual_payment_options">Payment options supported by %1$s:\n\n%2$s</string> <string name="withdraw_manual_check_fees">Check fees</string> - <string name="withdraw_manual_ready_title">Exchange is ready for withdrawal!</string> - <string name="withdraw_manual_ready_intro">To complete the process you need to wire %s to the exchange bank account</string> + <string name="withdraw_manual_ready_title">Provider is ready for withdrawal!</string> + <string name="withdraw_manual_ready_intro">To complete the process you need to wire %s to the provider\'s bank account</string> <string name="withdraw_manual_ready_details_intro">Bank transfer details</string> - <string name="withdraw_manual_bitcoin_title">Bitcoin exchange ready for withdrawal</string> + <string name="withdraw_manual_bitcoin_title">Bitcoin provider ready for withdrawal</string> <string name="withdraw_manual_bitcoin_intro">Now make a split transaction with the following three outputs.</string> <string name="withdraw_manual_ready_iban">IBAN</string> <string name="withdraw_manual_ready_account">Account</string> @@ -232,24 +234,24 @@ GNU Taler is immune against many types of fraud, such as phishing of credit card <string name="withdraw_account_currency">Account #%1$d (%2$s)</string> <string name="withdraw_transfer">Transfer</string> <string name="withdraw_conversion">Conversion</string> - <string name="withdraw_conversion_support">This exchange supports currency conversion</string> + <string name="withdraw_conversion_support">This provider supports currency conversion</string> - <string name="exchange_settings_title">Exchanges</string> - <string name="exchange_settings_summary">Manage list of exchanges known to this wallet</string> - <string name="exchange_list_title">Exchanges</string> - <string name="exchange_list_empty">No exchanges known\n\nAdd one manually or withdraw digital cash!</string> + <string name="exchange_settings_title">Providers</string> + <string name="exchange_settings_summary">Manage list of providers known to this wallet</string> + <string name="exchange_list_title">Providers</string> + <string name="exchange_list_empty">No providers known\n\nAdd one manually or withdraw digital cash!</string> <string name="exchange_list_currency">Currency: %s</string> - <string name="exchange_list_add">Add exchange</string> - <string name="exchange_list_select">Select exchange</string> - <string name="exchange_delete">Delete exchange</string> + <string name="exchange_list_add">Add provider</string> + <string name="exchange_list_select">Select provider</string> + <string name="exchange_delete">Delete provider</string> <string name="exchange_delete_force">Force deletion (purge)</string> - <string name="exchange_dialog_delete_message">Are you sure you want to delete this exchange? Forcing this operation will result in a loss of funds.</string> + <string name="exchange_dialog_delete_message">Are you sure you want to delete this provider? Forcing this operation will result in a loss of funds.</string> <string name="exchange_reload">Reload information</string> - <string name="exchange_not_contacted">Exchange not contacted</string> - <string name="exchange_add_url">Enter address of exchange</string> - <string name="exchange_add_error">Could not add exchange</string> - <string name="exchange_list_error">Could not list exchanges</string> - <string name="exchange_list_add_dev">Add development exchanges</string> + <string name="exchange_not_contacted">Provider not contacted</string> + <string name="exchange_add_url">Enter address of provider</string> + <string name="exchange_add_error">Could not add provider</string> + <string name="exchange_list_error">Could not list providers</string> + <string name="exchange_list_add_dev">Add development providers</string> <string name="exchange_menu_manual_withdraw">Withdraw</string> <string name="exchange_fee_withdrawal_fee_label">Withdrawal Fee:</string> |