summaryrefslogtreecommitdiff
path: root/wallet
diff options
context:
space:
mode:
Diffstat (limited to 'wallet')
-rw-r--r--wallet/build.gradle4
-rw-r--r--wallet/src/main/java/net/taler/wallet/balances/BalanceAdapter.kt17
-rw-r--r--wallet/src/main/java/net/taler/wallet/deposit/MakeBitcoinDepositComposable.kt14
-rw-r--r--wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt14
-rw-r--r--wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt4
-rw-r--r--wallet/src/main/java/net/taler/wallet/payment/PayTemplateComposable.kt6
-rw-r--r--wallet/src/main/java/net/taler/wallet/payment/TransactionPaymentComposable.kt4
-rw-r--r--wallet/src/main/java/net/taler/wallet/peer/IncomingComposable.kt30
-rw-r--r--wallet/src/main/java/net/taler/wallet/peer/OutgoingPullComposable.kt4
-rw-r--r--wallet/src/main/java/net/taler/wallet/peer/OutgoingPushComposable.kt2
-rw-r--r--wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullCredit.kt4
-rw-r--r--wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullDebit.kt4
-rw-r--r--wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushCredit.kt4
-rw-r--r--wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushDebit.kt4
-rw-r--r--wallet/src/main/java/net/taler/wallet/refund/TransactionRefundComposable.kt4
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt11
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt16
-rw-r--r--wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt4
-rw-r--r--wallet/src/main/java/net/taler/wallet/withdraw/TransactionWithdrawalComposable.kt16
-rw-r--r--wallet/src/main/java/net/taler/wallet/withdraw/manual/ScreenTransfer.kt16
-rw-r--r--wallet/src/main/java/net/taler/wallet/withdraw/manual/TransferIBAN.kt2
-rw-r--r--wallet/src/main/java/net/taler/wallet/withdraw/manual/TransferTaler.kt2
-rw-r--r--wallet/src/main/res/drawable/ic_funds_receive.xml5
-rw-r--r--wallet/src/main/res/drawable/ic_funds_send.xml5
-rw-r--r--wallet/src/main/res/layout/balance_actions.xml117
-rw-r--r--wallet/src/main/res/layout/fragment_transactions.xml109
-rw-r--r--wallet/src/main/res/layout/fragment_uri_input.xml2
-rw-r--r--wallet/src/main/res/layout/list_item_balance.xml51
-rw-r--r--wallet/src/main/res/values-it/strings.xml2
-rw-r--r--wallet/src/main/res/values/strings.xml64
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>