gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-taler-android] branch master updated (ee4f4a5 -> 7f351d4)


From: gnunet
Subject: [taler-taler-android] branch master updated (ee4f4a5 -> 7f351d4)
Date: Wed, 25 Oct 2023 15:40:29 +0200

This is an automated email from the git hooks/post-receive script.

torsten-grote pushed a change to branch master
in repository taler-android.

    from ee4f4a5  Translated using Weblate (Catalan)
     new c154942  [wallet] update wallet-core to dev.34
     new 76e84b2  [wallet] Remove "Warning:" from push payment screen
     new 47d0809  [wallet] Remove deprecated ExperimentalMaterial3Api decorators
     new 9a1e820  [wallet] Make keyboard resize views and make manual withdraw 
scrollable
     new 687418f  [wallet] Refactor wire transfer and remove BIC/SWIFT field
     new 07d7ca4  [wallet] Don't allow zero amount for p2p transactions
     new 3596087  [wallet] Make more TextFields singleLine
     new 7f351d4  [wallet] release 0.9.3+p9

The 8 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 wallet/build.gradle                                |   6 +-
 wallet/src/main/AndroidManifest.xml                |   3 +-
 .../java/net/taler/wallet/ReceiveFundsFragment.kt  |   4 +-
 .../java/net/taler/wallet/SendFundsFragment.kt     |   4 +-
 .../net/taler/wallet/compose/AmountInputField.kt   |   2 -
 .../net/taler/wallet/compose/NumericInputField.kt  |   3 +-
 .../java/net/taler/wallet/compose/SelectionChip.kt |   2 -
 .../net/taler/wallet/deposit/DepositFragment.kt    |   7 +-
 .../net/taler/wallet/deposit/DepositManager.kt     |  10 +-
 .../wallet/deposit/MakeBitcoinDepositComposable.kt |   3 +-
 .../taler/wallet/deposit/MakeDepositComposable.kt  | 112 ++++---------
 .../net/taler/wallet/deposit/PayToUriFragment.kt   |   3 -
 .../wallet/payment/PayTemplateOrderComposable.kt   |   2 -
 .../wallet/peer/OutgoingPullIntroComposable.kt     |   2 -
 .../wallet/peer/OutgoingPushIntroComposable.kt     |   4 +-
 .../main/res/layout/fragment_manual_withdraw.xml   | 180 +++++++++++----------
 wallet/src/main/res/values/strings.xml             |   2 +-
 17 files changed, 140 insertions(+), 209 deletions(-)

diff --git a/wallet/build.gradle b/wallet/build.gradle
index c91c70d..be810a4 100644
--- a/wallet/build.gradle
+++ b/wallet/build.gradle
@@ -19,7 +19,7 @@ plugins {
     id "kotlinx-serialization"
 }
 
-def qtart_version = "0.9.3-dev.33"
+def qtart_version = "0.9.3-dev.34"
 
 static def versionCodeEpoch() {
     return (new Date().getTime() / 1000).toInteger()
@@ -41,8 +41,8 @@ android {
         applicationId "net.taler.wallet"
         minSdkVersion 24
         targetSdkVersion 33
-        versionCode 34
-        versionName "0.9.3+p8"
+        versionCode 35
+        versionName "0.9.3+p9"
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
     }
     buildTypes {
diff --git a/wallet/src/main/AndroidManifest.xml 
b/wallet/src/main/AndroidManifest.xml
index aee1525..7f8eb52 100644
--- a/wallet/src/main/AndroidManifest.xml
+++ b/wallet/src/main/AndroidManifest.xml
@@ -49,7 +49,8 @@
             android:name=".MainActivity"
             android:exported="true"
             android:launchMode="singleInstance"
-            android:theme="@style/AppTheme.NoActionBar">
+            android:theme="@style/AppTheme.NoActionBar"
+            android:windowSoftInputMode="adjustResize">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER" />
diff --git a/wallet/src/main/java/net/taler/wallet/ReceiveFundsFragment.kt 
b/wallet/src/main/java/net/taler/wallet/ReceiveFundsFragment.kt
index e560a71..a25c352 100644
--- a/wallet/src/main/java/net/taler/wallet/ReceiveFundsFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/ReceiveFundsFragment.kt
@@ -31,7 +31,6 @@ import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.rememberScrollState
 import androidx.compose.foundation.verticalScroll
 import androidx.compose.material3.Button
-import androidx.compose.material3.ExperimentalMaterial3Api
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.Surface
 import androidx.compose.material3.Text
@@ -111,7 +110,6 @@ class ReceiveFundsFragment : Fragment() {
     }
 }
 
-@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 private fun ReceiveFundsIntro(
     currency: String,
@@ -177,7 +175,7 @@ private fun ReceiveFundsIntro(
                     .height(IntrinsicSize.Max),
                 onClick = {
                     val amount = getAmount(currency, text)
-                    if (amount == null) isError = true
+                    if (amount == null || amount.isZero()) isError = true
                     else onPeerPull(amount)
                 },
             ) {
diff --git a/wallet/src/main/java/net/taler/wallet/SendFundsFragment.kt 
b/wallet/src/main/java/net/taler/wallet/SendFundsFragment.kt
index b33e53b..a0a0c6f 100644
--- a/wallet/src/main/java/net/taler/wallet/SendFundsFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/SendFundsFragment.kt
@@ -29,7 +29,6 @@ import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.rememberScrollState
 import androidx.compose.foundation.verticalScroll
 import androidx.compose.material3.Button
-import androidx.compose.material3.ExperimentalMaterial3Api
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.Surface
 import androidx.compose.material3.Text
@@ -91,7 +90,6 @@ class SendFundsFragment : Fragment() {
     }
 }
 
-@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 private fun SendFundsIntro(
     currency: String,
@@ -143,7 +141,7 @@ private fun SendFundsIntro(
         Row(modifier = Modifier.padding(16.dp)) {
             fun onClickButton(block: (Amount) -> Unit) {
                 val amount = getAmount(currency, text)
-                if (amount == null) isError = true
+                if (amount == null || amount.isZero()) isError = true
                 else if (!hasSufficientBalance(amount)) insufficientBalance = 
true
                 else block(amount)
             }
diff --git a/wallet/src/main/java/net/taler/wallet/compose/AmountInputField.kt 
b/wallet/src/main/java/net/taler/wallet/compose/AmountInputField.kt
index 0229ec5..20f8006 100644
--- a/wallet/src/main/java/net/taler/wallet/compose/AmountInputField.kt
+++ b/wallet/src/main/java/net/taler/wallet/compose/AmountInputField.kt
@@ -22,7 +22,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.text.KeyboardActions
 import androidx.compose.foundation.text.KeyboardOptions
-import androidx.compose.material3.ExperimentalMaterial3Api
 import androidx.compose.material3.LocalTextStyle
 import androidx.compose.material3.OutlinedTextField
 import androidx.compose.material3.Text
@@ -43,7 +42,6 @@ import androidx.compose.ui.unit.dp
 import net.taler.common.Amount
 import java.text.DecimalFormat
 
-@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun AmountInputField(
     value: String,
diff --git a/wallet/src/main/java/net/taler/wallet/compose/NumericInputField.kt 
b/wallet/src/main/java/net/taler/wallet/compose/NumericInputField.kt
index c9d2fc5..47401cf 100644
--- a/wallet/src/main/java/net/taler/wallet/compose/NumericInputField.kt
+++ b/wallet/src/main/java/net/taler/wallet/compose/NumericInputField.kt
@@ -20,14 +20,12 @@ import androidx.compose.foundation.layout.Row
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.filled.Add
 import androidx.compose.material.icons.filled.Remove
-import androidx.compose.material3.ExperimentalMaterial3Api
 import androidx.compose.material3.Icon
 import androidx.compose.material3.IconButton
 import androidx.compose.material3.OutlinedTextField
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Modifier
 
-@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun NumericInputField(
     modifier: Modifier = Modifier,
@@ -41,6 +39,7 @@ fun NumericInputField(
     OutlinedTextField(
         modifier = modifier,
         value = value.toString(),
+        singleLine = true,
         readOnly = readOnly,
         onValueChange = {
             val dd = it.toLongOrNull() ?: 0
diff --git a/wallet/src/main/java/net/taler/wallet/compose/SelectionChip.kt 
b/wallet/src/main/java/net/taler/wallet/compose/SelectionChip.kt
index 454bbfa..c47f55d 100644
--- a/wallet/src/main/java/net/taler/wallet/compose/SelectionChip.kt
+++ b/wallet/src/main/java/net/taler/wallet/compose/SelectionChip.kt
@@ -16,7 +16,6 @@
 
 package net.taler.wallet.compose
 
-import androidx.compose.material3.ExperimentalMaterial3Api
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.SuggestionChip
 import androidx.compose.material3.SuggestionChipDefaults
@@ -24,7 +23,6 @@ import androidx.compose.runtime.Composable
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
 
-@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun <T> SelectionChip(
     label: @Composable () -> Unit,
diff --git a/wallet/src/main/java/net/taler/wallet/deposit/DepositFragment.kt 
b/wallet/src/main/java/net/taler/wallet/deposit/DepositFragment.kt
index d773293..28dcc3f 100644
--- a/wallet/src/main/java/net/taler/wallet/deposit/DepositFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/deposit/DepositFragment.kt
@@ -48,10 +48,8 @@ class DepositFragment : Fragment() {
         } ?: error("no amount passed")
         val receiverName = arguments?.getString("receiverName")
         val iban = arguments?.getString("IBAN")
-        val bic = arguments?.getString("BIC") ?: ""
-
         if (receiverName != null && iban != null) {
-            onDepositButtonClicked(amount, receiverName, iban, bic)
+            onDepositButtonClicked(amount, receiverName, iban)
         }
         return ComposeView(requireContext()).apply {
             setContent {
@@ -109,8 +107,7 @@ class DepositFragment : Fragment() {
         amount: Amount,
         receiverName: String,
         iban: String,
-        bic: String,
     ) {
-        depositManager.onDepositButtonClicked(amount, receiverName, iban, bic)
+        depositManager.onDepositButtonClicked(amount, receiverName, iban)
     }
 }
diff --git a/wallet/src/main/java/net/taler/wallet/deposit/DepositManager.kt 
b/wallet/src/main/java/net/taler/wallet/deposit/DepositManager.kt
index 35cca1c..0075f95 100644
--- a/wallet/src/main/java/net/taler/wallet/deposit/DepositManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/deposit/DepositManager.kt
@@ -46,10 +46,10 @@ class DepositManager(
     }
 
     @UiThread
-    fun onDepositButtonClicked(amount: Amount, receiverName: String, iban: 
String, bic: String) {
+    fun onDepositButtonClicked(amount: Amount, receiverName: String, iban: 
String) {
         if (depositState.value is DepositState.FeesChecked) {
             // fees already checked, so IBAN was validated, can make deposit 
directly
-            makeIbanDeposit(amount, receiverName, iban, bic)
+            makeIbanDeposit(amount, receiverName, iban)
         } else {
             // validate IBAN first
             mDepositState.value = DepositState.CheckingFees
@@ -62,7 +62,7 @@ class DepositManager(
                 }.onSuccess { response ->
                     if (response.valid) {
                         // only prepare/make deposit, if IBAN is valid
-                        makeIbanDeposit(amount, receiverName, iban, bic)
+                        makeIbanDeposit(amount, receiverName, iban)
                     } else {
                         mDepositState.value = DepositState.IbanInvalid
                     }
@@ -72,10 +72,10 @@ class DepositManager(
     }
 
     @UiThread
-    private fun makeIbanDeposit(amount: Amount, receiverName: String, iban: 
String, bic: String) {
+    private fun makeIbanDeposit(amount: Amount, receiverName: String, iban: 
String) {
         val paytoUri: String = PaytoUriIban(
             iban = iban,
-            bic = bic,
+            bic = null,
             targetPath = "",
             params = mapOf("receiver-name" to receiverName),
         ).paytoUri
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 d961f34..3fa0d98 100644
--- 
a/wallet/src/main/java/net/taler/wallet/deposit/MakeBitcoinDepositComposable.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/deposit/MakeBitcoinDepositComposable.kt
@@ -23,7 +23,6 @@ import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.rememberScrollState
 import androidx.compose.foundation.verticalScroll
 import androidx.compose.material3.Button
-import androidx.compose.material3.ExperimentalMaterial3Api
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.OutlinedTextField
 import androidx.compose.material3.Surface
@@ -51,7 +50,6 @@ import net.taler.wallet.R
 import net.taler.wallet.transactions.AmountType
 import net.taler.wallet.transactions.TransactionAmountComposable
 
-@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun MakeBitcoinDepositComposable(
     state: DepositState,
@@ -73,6 +71,7 @@ fun MakeBitcoinDepositComposable(
                 .padding(16.dp)
                 .focusRequester(focusRequester),
             value = address,
+            singleLine = true,
             enabled = !state.showFees,
             onValueChange = { input ->
                 address = input
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 d14ed96..2fc4d55 100644
--- a/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt
+++ b/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt
@@ -23,7 +23,6 @@ import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.rememberScrollState
 import androidx.compose.foundation.verticalScroll
 import androidx.compose.material3.Button
-import androidx.compose.material3.ExperimentalMaterial3Api
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.OutlinedTextField
 import androidx.compose.material3.Surface
@@ -41,22 +40,23 @@ import androidx.compose.ui.focus.FocusRequester
 import androidx.compose.ui.focus.focusRequester
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.platform.LocalFocusManager
-import androidx.compose.ui.res.colorResource
 import androidx.compose.ui.res.stringResource
 import androidx.compose.ui.tooling.preview.Preview
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
 import net.taler.common.Amount
 import net.taler.wallet.R
+import net.taler.wallet.transactions.AmountType.Negative
+import net.taler.wallet.transactions.AmountType.Positive
+import net.taler.wallet.transactions.TransactionAmountComposable
 
-@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun MakeDepositComposable(
     state: DepositState,
     amount: Amount,
     presetName: String? = null,
     presetIban: String? = null,
-    onMakeDeposit: (Amount, String, String, String) -> Unit,
+    onMakeDeposit: (Amount, String, String) -> Unit,
 ) {
     val scrollState = rememberScrollState()
     Column(
@@ -67,18 +67,18 @@ fun MakeDepositComposable(
     ) {
         var name by rememberSaveable { mutableStateOf(presetName ?: "") }
         var iban by rememberSaveable { mutableStateOf(presetIban ?: "") }
-        var bic by rememberSaveable { mutableStateOf("") }
-        var bicInvalid by rememberSaveable { mutableStateOf(false) }
         val focusRequester = remember { FocusRequester() }
         OutlinedTextField(
             modifier = Modifier
                 .padding(16.dp)
-                .focusRequester(focusRequester),
+                .focusRequester(focusRequester)
+                .fillMaxWidth(),
             value = name,
             enabled = !state.showFees,
             onValueChange = { input ->
                 name = input
             },
+            singleLine = true,
             isError = name.isBlank(),
             label = {
                 Text(
@@ -95,8 +95,10 @@ fun MakeDepositComposable(
         val ibanError = state is DepositState.IbanInvalid
         OutlinedTextField(
             modifier = Modifier
-                .padding(16.dp),
+                .padding(horizontal = 16.dp)
+                .fillMaxWidth(),
             value = iban,
+            singleLine = true,
             enabled = !state.showFees,
             onValueChange = { input ->
                 iban = input.uppercase()
@@ -120,46 +122,14 @@ fun MakeDepositComposable(
                 )
             }
         )
-        OutlinedTextField(
-            modifier = Modifier
-                .padding(16.dp),
-            value = bic,
-            enabled = !state.showFees,
-            onValueChange = { input ->
-                bicInvalid = false
-                bic = input
-            },
-            isError = bicInvalid,
-            supportingText = {
-                if (bicInvalid) {
-                    Text(
-                        modifier = Modifier.fillMaxWidth(),
-                        text = stringResource(R.string.send_deposit_bic_error),
-                        color = MaterialTheme.colorScheme.error
-                    )
-                }
+        TransactionAmountComposable(
+            label = if (state.effectiveDepositAmount == null) {
+                stringResource(R.string.amount_chosen)
+            } else {
+                stringResource(R.string.send_deposit_amount_effective)
             },
-            label = {
-                Text(
-                    text = stringResource(R.string.send_deposit_bic),
-                )
-            }
-        )
-        val amountTitle = if (state.effectiveDepositAmount == null) {
-            R.string.amount_chosen
-        } else R.string.send_deposit_amount_effective
-        Text(
-            modifier = Modifier.padding(horizontal = 16.dp),
-            text = stringResource(id = amountTitle),
-        )
-        val shownAmount = if (state.effectiveDepositAmount == null) amount 
else {
-            state.effectiveDepositAmount
-        }
-        Text(
-            modifier = Modifier.padding(16.dp),
-            fontSize = 24.sp,
-            color = colorResource(R.color.green),
-            text = shownAmount.toString(),
+            amount = state.effectiveDepositAmount ?: amount,
+            amountType = Positive,
         )
         AnimatedVisibility(visible = state.showFees) {
             Column(
@@ -169,29 +139,17 @@ fun MakeDepositComposable(
                 val totalAmount = state.totalDepositCost ?: amount
                 val effectiveAmount = state.effectiveDepositAmount ?: 
Amount.zero(amount.currency)
                 val fee = totalAmount - effectiveAmount
-                Text(
-                    modifier = Modifier.padding(horizontal = 16.dp),
-                    text = stringResource(id = R.string.withdraw_fees),
-                )
-                Text(
-                    modifier = Modifier.padding(16.dp),
-                    fontSize = 24.sp,
-                    color = if (fee.isZero()) colorResource(R.color.green) 
else MaterialTheme.colorScheme.error,
-                    text = if (fee.isZero()) {
-                        fee.toString()
-                    } else {
-                        stringResource(R.string.amount_negative, 
fee.toString())
-                    },
-                )
-                Text(
-                    modifier = Modifier.padding(horizontal = 16.dp),
-                    text = stringResource(id = R.string.send_amount),
+
+                TransactionAmountComposable(
+                    label = stringResource(R.string.withdraw_fees),
+                    amount = fee,
+                    amountType = if (fee.isZero()) Positive else Negative,
                 )
-                Text(
-                    modifier = Modifier.padding(16.dp),
-                    fontSize = 24.sp,
-                    color = colorResource(R.color.green),
-                    text = totalAmount.toString(),
+
+                TransactionAmountComposable(
+                    label = stringResource(R.string.send_amount),
+                    amount = totalAmount,
+                    amountType = Positive,
                 )
             }
         }
@@ -209,11 +167,7 @@ fun MakeDepositComposable(
             enabled = iban.isNotBlank(),
             onClick = {
                 focusManager.clearFocus()
-                if (isValidBic(bic)) {
-                    onMakeDeposit(amount, name, iban, bic)
-                } else {
-                    bicInvalid = true
-                }
+                onMakeDeposit(amount, name, iban)
             },
         ) {
             Text(
@@ -226,14 +180,6 @@ fun MakeDepositComposable(
     }
 }
 
-private val bicRegex = Regex("[a-zA-Z\\d]{8,11}")
-
-/**
- * performs some minimal verification, nothing perfect.
- * Allows for empty string.
- */
-private fun isValidBic(bic: String): Boolean = bic.isEmpty() || 
bicRegex.matches(bic)
-
 @Preview
 @Composable
 fun PreviewMakeDepositComposable() {
@@ -244,7 +190,7 @@ fun PreviewMakeDepositComposable() {
         )
         MakeDepositComposable(
             state = state,
-            amount = Amount.fromString("TESTKUDOS", "42.23")) { _, _, _, _ ->
+            amount = Amount.fromString("TESTKUDOS", "42.23")) { _, _, _ ->
         }
     }
 }
diff --git a/wallet/src/main/java/net/taler/wallet/deposit/PayToUriFragment.kt 
b/wallet/src/main/java/net/taler/wallet/deposit/PayToUriFragment.kt
index 4bc91e1..c7a4eb0 100644
--- a/wallet/src/main/java/net/taler/wallet/deposit/PayToUriFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/deposit/PayToUriFragment.kt
@@ -34,7 +34,6 @@ import androidx.compose.foundation.verticalScroll
 import androidx.compose.material3.Button
 import androidx.compose.material3.DropdownMenu
 import androidx.compose.material3.DropdownMenuItem
-import androidx.compose.material3.ExperimentalMaterial3Api
 import androidx.compose.material3.LocalTextStyle
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.OutlinedTextField
@@ -115,7 +114,6 @@ class PayToUriFragment : Fragment() {
 
 }
 
-@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 private fun PayToComposable(
     currencies: List<String>,
@@ -181,7 +179,6 @@ private fun PayToComposable(
     }
 }
 
-@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun CurrencyDropdown(
     currencies: List<String>,
diff --git 
a/wallet/src/main/java/net/taler/wallet/payment/PayTemplateOrderComposable.kt 
b/wallet/src/main/java/net/taler/wallet/payment/PayTemplateOrderComposable.kt
index 1524faf..d6131c7 100644
--- 
a/wallet/src/main/java/net/taler/wallet/payment/PayTemplateOrderComposable.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/payment/PayTemplateOrderComposable.kt
@@ -21,7 +21,6 @@ import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
 import androidx.compose.material3.Button
-import androidx.compose.material3.ExperimentalMaterial3Api
 import androidx.compose.material3.OutlinedTextField
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
@@ -41,7 +40,6 @@ import net.taler.wallet.compose.AmountInputField
 import net.taler.wallet.compose.TalerSurface
 import net.taler.wallet.deposit.CurrencyDropdown
 
-@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun PayTemplateOrderComposable(
     currencies: List<String>, // assumed to have size > 0
diff --git 
a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullIntroComposable.kt 
b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullIntroComposable.kt
index ff6e2ee..92bc72e 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullIntroComposable.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullIntroComposable.kt
@@ -22,7 +22,6 @@ import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.rememberScrollState
 import androidx.compose.foundation.verticalScroll
 import androidx.compose.material3.Button
-import androidx.compose.material3.ExperimentalMaterial3Api
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.OutlinedTextField
 import androidx.compose.material3.Surface
@@ -52,7 +51,6 @@ import 
net.taler.wallet.transactions.TransactionAmountComposable
 import net.taler.wallet.transactions.TransactionInfoComposable
 import kotlin.random.Random
 
-@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun OutgoingPullIntroComposable(
     amount: Amount,
diff --git 
a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushIntroComposable.kt 
b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushIntroComposable.kt
index 96af156..98391be 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushIntroComposable.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushIntroComposable.kt
@@ -30,6 +30,7 @@ import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableLongStateOf
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.saveable.rememberSaveable
@@ -47,7 +48,6 @@ import net.taler.common.Amount
 import net.taler.wallet.R
 import kotlin.random.Random
 
-@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun OutgoingPushIntroComposable(
     state: OutgoingState,
@@ -117,7 +117,7 @@ fun OutgoingPushIntroComposable(
             style = MaterialTheme.typography.bodyMedium,
         )
         var option by rememberSaveable { mutableStateOf(DEFAULT_EXPIRY) }
-        var hours by rememberSaveable { mutableStateOf(DEFAULT_EXPIRY.hours) }
+        var hours by rememberSaveable { 
mutableLongStateOf(DEFAULT_EXPIRY.hours) }
         ExpirationComposable(
             modifier = Modifier.padding(top = 8.dp, bottom = 16.dp),
             option = option,
diff --git a/wallet/src/main/res/layout/fragment_manual_withdraw.xml 
b/wallet/src/main/res/layout/fragment_manual_withdraw.xml
index 9225d16..6d5f78b 100644
--- a/wallet/src/main/res/layout/fragment_manual_withdraw.xml
+++ b/wallet/src/main/res/layout/fragment_manual_withdraw.xml
@@ -14,105 +14,109 @@
   ~ 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";
+<ScrollView
+    xmlns:android="http://schemas.android.com/apk/res/android";
     xmlns:app="http://schemas.android.com/apk/res-auto";
     xmlns:tools="http://schemas.android.com/tools";
     android:layout_width="match_parent"
     android:layout_height="match_parent">
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+        <com.google.android.material.button.MaterialButton
+            android:id="@+id/qrCodeButton"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="32dp"
+            app:icon="@drawable/ic_scan_qr"
+            app:iconTint="?colorOnPrimary"
+            android:text="@string/button_scan_qr_code"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintHorizontal_bias="0.5"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintVertical_chainStyle="packed"
+            tools:ignore="RtlHardcoded" />
 
-    <com.google.android.material.button.MaterialButton
-        android:id="@+id/qrCodeButton"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="32dp"
-        app:icon="@drawable/ic_scan_qr"
-        app:iconTint="?colorOnPrimary"
-        android:text="@string/button_scan_qr_code"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintHorizontal_bias="0.5"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintVertical_chainStyle="packed"
-        tools:ignore="RtlHardcoded" />
-
-    <TextView
-        android:id="@+id/orView"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="32dp"
-        android:text="@string/or"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintHorizontal_bias="0.5"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/qrCodeButton" />
-
-    <TextView
-        android:id="@+id/manualWithdrawIntro"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="32dp"
-        android:text="@string/withdraw_manual_title"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/orView" />
+        <TextView
+            android:id="@+id/orView"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="32dp"
+            android:text="@string/or"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintHorizontal_bias="0.5"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/qrCodeButton" />
 
-    <com.google.android.material.textfield.TextInputLayout
-        android:id="@+id/amountLayout"
-        style="@style/Widget.Material3.TextInputLayout.OutlinedBox.Dense"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="16dp"
-        android:layout_marginTop="16dp"
-        android:layout_marginEnd="16dp"
-        android:minWidth="128dp"
-        app:boxBackgroundMode="outline"
-        app:endIconDrawable="@drawable/ic_cancel"
-        app:endIconMode="clear_text"
-        app:layout_constraintEnd_toStartOf="@+id/currencyView"
-        app:layout_constraintHorizontal_chainStyle="packed"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/manualWithdrawIntro">
+        <TextView
+            android:id="@+id/manualWithdrawIntro"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="32dp"
+            android:text="@string/withdraw_manual_title"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/orView" />
 
-        <com.google.android.material.textfield.TextInputEditText
-            android:id="@+id/amountView"
+        <com.google.android.material.textfield.TextInputLayout
+            android:id="@+id/amountLayout"
+            style="@style/Widget.Material3.TextInputLayout.OutlinedBox.Dense"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:inputType="numberDecimal" />
+            android:layout_marginStart="16dp"
+            android:layout_marginTop="16dp"
+            android:layout_marginEnd="16dp"
+            android:minWidth="128dp"
+            app:boxBackgroundMode="outline"
+            app:endIconDrawable="@drawable/ic_cancel"
+            app:endIconMode="clear_text"
+            app:layout_constraintEnd_toStartOf="@+id/currencyView"
+            app:layout_constraintHorizontal_chainStyle="packed"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/manualWithdrawIntro">
 
-    </com.google.android.material.textfield.TextInputLayout>
+            <com.google.android.material.textfield.TextInputEditText
+                android:id="@+id/amountView"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:inputType="numberDecimal" />
 
-    <TextView
-        android:id="@+id/currencyView"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        app:layout_constraintBottom_toBottomOf="@+id/amountLayout"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toEndOf="@+id/amountLayout"
-        app:layout_constraintTop_toTopOf="@+id/amountLayout"
-        tools:text="TESTKUDOS123" />
+        </com.google.android.material.textfield.TextInputLayout>
 
-    <TextView
-        android:id="@+id/paymentOptionsLabel"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="16dp"
-        android:layout_marginTop="32dp"
-        android:layout_marginEnd="16dp"
-        android:text="@string/withdraw_manual_payment_options"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/amountLayout" />
+        <TextView
+            android:id="@+id/currencyView"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            app:layout_constraintBottom_toBottomOf="@+id/amountLayout"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toEndOf="@+id/amountLayout"
+            app:layout_constraintTop_toTopOf="@+id/amountLayout"
+            tools:text="TESTKUDOS123" />
 
-    <Button
-        android:id="@+id/checkFeesButton"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="32dp"
-        android:layout_marginEnd="16dp"
-        android:text="@string/withdraw_manual_check_fees"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/paymentOptionsLabel"
-        app:layout_constraintVertical_bias="0.0" />
+        <TextView
+            android:id="@+id/paymentOptionsLabel"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="16dp"
+            android:layout_marginTop="32dp"
+            android:layout_marginEnd="16dp"
+            android:text="@string/withdraw_manual_payment_options"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/amountLayout" />
+
+        <Button
+            android:id="@+id/checkFeesButton"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="32dp"
+            android:layout_marginEnd="16dp"
+            android:text="@string/withdraw_manual_check_fees"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/paymentOptionsLabel"
+            app:layout_constraintVertical_bias="0.0" />
 
-</androidx.constraintlayout.widget.ConstraintLayout>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</ScrollView>
\ No newline at end of file
diff --git a/wallet/src/main/res/values/strings.xml 
b/wallet/src/main/res/values/strings.xml
index 79b808c..407fd72 100644
--- a/wallet/src/main/res/values/strings.xml
+++ b/wallet/src/main/res/values/strings.xml
@@ -166,7 +166,7 @@ GNU Taler is immune against many types of fraud, such as 
phishing of credit card
     <string name="send_peer_bitcoin">To another Taler wallet</string>
     <string name="send_peer_title">Send money to another wallet</string>
     <string name="send_peer_create_button">Send funds now</string>
-    <string name="send_peer_warning">Warning: Funds will leave the wallet 
immediately.</string>
+    <string name="send_peer_warning">Funds will leave the wallet 
immediately.</string>
     <string name="send_peer_payment_instruction">Let the payee scan this QR 
code to receive:</string>
     <string name="send_peer_payment_amount_received">Amount received</string>
     <string name="send_peer_payment_amount_sent">Amount sent</string>

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

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