diff options
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/deposit/PayToUriFragment.kt')
-rw-r--r-- | wallet/src/main/java/net/taler/wallet/deposit/PayToUriFragment.kt | 44 |
1 files changed, 20 insertions, 24 deletions
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 c8b5b6e..8961016 100644 --- a/wallet/src/main/java/net/taler/wallet/deposit/PayToUriFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/deposit/PayToUriFragment.kt @@ -30,12 +30,10 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.text.KeyboardOptions 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 @@ -49,13 +47,13 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment +import androidx.compose.ui.Alignment.Companion.Center import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.core.os.bundleOf @@ -66,6 +64,7 @@ import net.taler.common.Amount import net.taler.wallet.AmountResult import net.taler.wallet.MainViewModel import net.taler.wallet.R +import net.taler.wallet.compose.AmountInputField import net.taler.wallet.compose.TalerSurface class PayToUriFragment : Fragment() { @@ -87,7 +86,7 @@ class PayToUriFragment : Fragment() { text = stringResource(id = R.string.payment_balance_insufficient), color = MaterialTheme.colorScheme.error, ) else if (depositManager.isSupportedPayToUri(uri)) PayToComposable( - currencies = model.getCurrencies(), + currencies = currencies, getAmount = model::createAmount, onAmountChosen = { amount -> val u = Uri.parse(uri) @@ -115,7 +114,6 @@ class PayToUriFragment : Fragment() { } -@OptIn(ExperimentalMaterial3Api::class) @Composable private fun PayToComposable( currencies: List<String>, @@ -131,30 +129,27 @@ private fun PayToComposable( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(16.dp), ) { - var amountText by rememberSaveable { mutableStateOf("") } + var amountText by rememberSaveable { mutableStateOf("0") } var amountError by rememberSaveable { mutableStateOf("") } var currency by rememberSaveable { mutableStateOf(currencies[0]) } val focusRequester = remember { FocusRequester() } - OutlinedTextField( - modifier = Modifier - .focusRequester(focusRequester), + AmountInputField( + modifier = Modifier.focusRequester(focusRequester), value = amountText, onValueChange = { input -> amountError = "" amountText = input }, - keyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Decimal), - singleLine = true, + label = { Text(stringResource(R.string.send_amount)) }, + supportingText = { + if (amountError.isNotBlank()) Text(amountError) + }, isError = amountError.isNotBlank(), - label = { - if (amountError.isBlank()) { - Text(stringResource(R.string.send_amount)) - } else { - Text(amountError, color = MaterialTheme.colorScheme.error) - } - } ) CurrencyDropdown( + modifier = Modifier + .fillMaxSize() + .wrapContentSize(Center), currencies = currencies, onCurrencyChanged = { c -> currency = c }, ) @@ -184,22 +179,23 @@ private fun PayToComposable( } } -@OptIn(ExperimentalMaterial3Api::class) @Composable fun CurrencyDropdown( currencies: List<String>, onCurrencyChanged: (String) -> Unit, + modifier: Modifier = Modifier, + initialCurrency: String? = null, + readOnly: Boolean = false, ) { - var selectedIndex by remember { mutableStateOf(0) } + val initialIndex = currencies.indexOf(initialCurrency).let { if (it < 0) 0 else it } + var selectedIndex by remember { mutableStateOf(initialIndex) } var expanded by remember { mutableStateOf(false) } Box( - modifier = Modifier - .fillMaxSize() - .wrapContentSize(Alignment.Center), + modifier = modifier, ) { OutlinedTextField( modifier = Modifier - .clickable(onClick = { expanded = true }), + .clickable(onClick = { if (!readOnly) expanded = true }), value = currencies[selectedIndex], onValueChange = { }, readOnly = true, |