From 96fa67d0b17399aae05de63e3ee69e1dc6f26689 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 15 Mar 2024 21:17:31 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../ui/components/fields/AmountTextField.kt | 5 +-- .../ui/components/fields/SimpleTextField.kt | 4 +-- .../state/amount/SendAmountStateConverter.kt | 29 ++++++++------- .../state/fields/SendAmountFieldConverter.kt | 4 ++- .../state/fields/SendTextField.kt | 1 + .../presentation/ui/amount/AmountField.kt | 10 ++++-- .../ui/amount/SendAmountContent.kt | 35 +++++++++++++------ 7 files changed, 57 insertions(+), 31 deletions(-) diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/fields/AmountTextField.kt b/core/ui/src/main/java/com/tangem/core/ui/components/fields/AmountTextField.kt index 4bf1b72d84..fc0ee052f3 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/fields/AmountTextField.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/fields/AmountTextField.kt @@ -15,6 +15,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextDirection import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameterProvider @@ -74,7 +75,7 @@ fun AmountTextField( }, modifier = modifier .background(TangemTheme.colors.background.action), - textStyle = textStyle, + textStyle = textStyle.copy(textDirection = TextDirection.ContentOrLtr), color = color, keyboardOptions = keyboardOptions, keyboardActions = keyboardActions, @@ -90,7 +91,7 @@ fun AmountTextField( } Text( text = placeholder, - style = textStyle, + style = textStyle.copy(textDirection = TextDirection.ContentOrLtr), color = TangemTheme.colors.text.disabled, textAlign = placeholderTextAlign, modifier = Modifier diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/fields/SimpleTextField.kt b/core/ui/src/main/java/com/tangem/core/ui/components/fields/SimpleTextField.kt index 4a3fdbff20..6d31ebeaef 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/fields/SimpleTextField.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/fields/SimpleTextField.kt @@ -67,9 +67,7 @@ fun SimpleTextField( LaunchedEffect(key1 = isSelectionChanged) { if (isSelectionChanged) { - textFieldValueState = textFieldValue.copy( - selection = getValueRange(value), - ) + textFieldValueState = textFieldValue } } diff --git a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/state/amount/SendAmountStateConverter.kt b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/state/amount/SendAmountStateConverter.kt index bbadf98185..e1c163e2d4 100644 --- a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/state/amount/SendAmountStateConverter.kt +++ b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/state/amount/SendAmountStateConverter.kt @@ -14,6 +14,7 @@ import com.tangem.features.send.impl.presentation.state.SendStates import com.tangem.features.send.impl.presentation.state.fields.SendAmountFieldConverter import com.tangem.utils.Provider import com.tangem.utils.converter.Converter +import com.tangem.utils.isNullOrZero import kotlinx.collections.immutable.persistentListOf internal class SendAmountStateConverter( @@ -37,18 +38,22 @@ internal class SendAmountStateConverter( tokenIconState = iconStateConverter.convert(status), amountTextField = sendAmountFieldConverter.convert(value), isPrimaryButtonEnabled = false, - segmentedButtonConfig = persistentListOf( - SendAmountSegmentedButtonsConfig( - title = stringReference(status.currency.symbol), - iconState = iconStateConverter.convert(status), - isFiat = false, - ), - SendAmountSegmentedButtonsConfig( - title = stringReference(appCurrency.code), - iconUrl = appCurrency.iconSmallUrl, - isFiat = true, - ), - ), + segmentedButtonConfig = if (status.value.fiatRate.isNullOrZero()) { + persistentListOf() + } else { + persistentListOf( + SendAmountSegmentedButtonsConfig( + title = stringReference(status.currency.symbol), + iconState = iconStateConverter.convert(status), + isFiat = false, + ), + SendAmountSegmentedButtonsConfig( + title = stringReference(appCurrency.code), + iconUrl = appCurrency.iconSmallUrl, + isFiat = true, + ), + ) + }, ) } } \ No newline at end of file diff --git a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/state/fields/SendAmountFieldConverter.kt b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/state/fields/SendAmountFieldConverter.kt index ff622738f7..37bdcf2eae 100644 --- a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/state/fields/SendAmountFieldConverter.kt +++ b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/state/fields/SendAmountFieldConverter.kt @@ -31,10 +31,11 @@ internal class SendAmountFieldConverter( val cryptoCurrencyStatus = cryptoCurrencyStatusProvider() val cryptoDecimal = value.toBigDecimalOrDefault() val cryptoAmount = cryptoDecimal.convertToAmount(cryptoCurrencyStatus.currency) + val fiatRate = cryptoCurrencyStatus.value.fiatRate val fiatValue = if (value.isEmpty()) { "" } else { - val fiatDecimal = cryptoCurrencyStatus.value.fiatRate?.multiply(cryptoDecimal) ?: BigDecimal.ZERO + val fiatDecimal = fiatRate?.multiply(cryptoDecimal) ?: BigDecimal.ZERO fiatDecimal.parseBigDecimal(FIAT_DECIMALS) } val isDoneActionEnabled = !cryptoDecimal.isZero() @@ -52,6 +53,7 @@ internal class SendAmountFieldConverter( fiatAmount = getAppCurrencyAmount(appCurrencyProvider()), isError = false, error = TextReference.Res(R.string.swapping_insufficient_funds), + isFiatUnavailable = fiatRate == null, ) } diff --git a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/state/fields/SendTextField.kt b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/state/fields/SendTextField.kt index 97682a9e21..8db8a2fc02 100644 --- a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/state/fields/SendTextField.kt +++ b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/state/fields/SendTextField.kt @@ -27,6 +27,7 @@ internal sealed class SendTextField { val fiatAmount: Amount, val isFiatValue: Boolean, val fiatValue: String, + val isFiatUnavailable: Boolean, val isError: Boolean, val error: TextReference, ) : SendTextField() diff --git a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/amount/AmountField.kt b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/amount/AmountField.kt index bd6b8b54e1..d9ef26bd3c 100644 --- a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/amount/AmountField.kt +++ b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/amount/AmountField.kt @@ -11,10 +11,12 @@ import androidx.compose.ui.Alignment.Companion.BottomCenter import androidx.compose.ui.Alignment.Companion.TopCenter import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextDirection import com.tangem.core.ui.components.fields.AmountTextField import com.tangem.core.ui.extensions.TextReference import com.tangem.core.ui.extensions.resolveReference import com.tangem.core.ui.res.TangemTheme +import com.tangem.core.ui.utils.BigDecimalFormatter import com.tangem.core.ui.utils.defaultFormat import com.tangem.core.ui.utils.rememberDecimalFormat import com.tangem.features.send.impl.presentation.state.fields.SendTextField @@ -62,10 +64,14 @@ internal fun AmountField(sendField: SendTextField.AmountField, isFiat: Boolean) end = TangemTheme.dimens.spacing12, ), ) { - val text = "${secondaryValue.ifEmpty { decimalFormat.defaultFormat() }} ${secondaryAmount.currencySymbol}" + val text = if (sendField.isFiatUnavailable) { + BigDecimalFormatter.EMPTY_BALANCE_SIGN + } else { + "${secondaryValue.ifEmpty { decimalFormat.defaultFormat() }} ${secondaryAmount.currencySymbol}" + } Text( text = text, - style = TangemTheme.typography.caption2, + style = TangemTheme.typography.caption2.copy(textDirection = TextDirection.ContentOrLtr), color = TangemTheme.colors.text.tertiary, textAlign = TextAlign.Center, modifier = Modifier diff --git a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/amount/SendAmountContent.kt b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/amount/SendAmountContent.kt index fa0a7445eb..143b2e1e16 100644 --- a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/amount/SendAmountContent.kt +++ b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/ui/amount/SendAmountContent.kt @@ -7,15 +7,17 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.hapticfeedback.HapticFeedbackType +import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.res.stringResource import com.tangem.core.ui.components.SecondaryButton +import com.tangem.core.ui.components.SpacerWMax import com.tangem.core.ui.components.buttons.common.TangemButtonSize import com.tangem.core.ui.components.buttons.segmentedbutton.SegmentedButtons import com.tangem.core.ui.components.currency.fiaticon.FiatIcon import com.tangem.core.ui.components.currency.tokenicon.TokenIcon import com.tangem.core.ui.extensions.resolveReference import com.tangem.core.ui.res.TangemTheme - import com.tangem.features.send.impl.R import com.tangem.features.send.impl.presentation.state.SendStates import com.tangem.features.send.impl.presentation.state.amount.SendAmountSegmentedButtonsConfig @@ -28,6 +30,7 @@ internal fun SendAmountContent( clickIntents: SendClickIntents, ) { if (amountState == null) return + val hapticFeedback = LocalHapticFeedback.current Column( modifier = Modifier .background(TangemTheme.colors.background.tertiary), @@ -41,19 +44,29 @@ internal fun SendAmountContent( end = TangemTheme.dimens.spacing16, ), ) { - SegmentedButtons( - modifier = Modifier - .weight(1f) - .height(TangemTheme.dimens.size40), - config = amountState.segmentedButtonConfig, - showIndication = false, - onClick = { clickIntents.onCurrencyChangeClick(it.isFiat) }, - ) { - SendAmountCurrencyButton(it) + if (amountState.segmentedButtonConfig.isNotEmpty()) { + SegmentedButtons( + modifier = Modifier + .weight(1f) + .height(TangemTheme.dimens.size40), + config = amountState.segmentedButtonConfig, + showIndication = false, + onClick = { + hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress) + clickIntents.onCurrencyChangeClick(it.isFiat) + }, + ) { + SendAmountCurrencyButton(it) + } + } else { + SpacerWMax() } SecondaryButton( text = stringResource(R.string.send_max_amount), - onClick = clickIntents::onMaxValueClick, + onClick = { + hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress) + clickIntents.onMaxValueClick() + }, size = TangemButtonSize.Text, shape = RoundedCornerShape(TangemTheme.dimens.radius26), modifier = Modifier