From f1ce18c109f7194c69c60354bb0e057f2fdfc77b Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 21 Dec 2023 11:00:44 +0200 Subject: [PATCH] Updated on 2026-08-14 --- .../feature/swap/models/SwapStateHolder.kt | 10 +++++-- .../tangem/feature/swap/ui/StateBuilder.kt | 26 ++++++++++--------- .../feature/swap/ui/SwapScreenContent.kt | 5 ++-- .../tangem/feature/swap/ui/TransactionCard.kt | 13 ++++------ 4 files changed, 29 insertions(+), 25 deletions(-) diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/SwapStateHolder.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/SwapStateHolder.kt index 00b174011d..83d86eee5b 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/SwapStateHolder.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/SwapStateHolder.kt @@ -1,7 +1,9 @@ package com.tangem.feature.swap.models import androidx.annotation.DrawableRes +import androidx.annotation.StringRes import androidx.compose.ui.text.input.TextFieldValue +import com.tangem.core.ui.R import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig import com.tangem.core.ui.components.notifications.NotificationConfig import com.tangem.core.ui.components.states.Item @@ -99,13 +101,17 @@ sealed interface FeeSelectState { sealed interface TransactionCardType { - data class SendCard( + val headerResId: Int + + data class Inputtable( val onAmountChanged: ((String) -> Unit), val onFocusChanged: ((Boolean) -> Unit), + @StringRes override val headerResId: Int = R.string.exchange_send_view_header, ) : TransactionCardType - data class ReceiveCard( + data class ReadOnly( val highPriceImpact: String? = null, + @StringRes override val headerResId: Int = R.string.exchange_receive_view_header, ) : TransactionCardType } diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt index cbc20fe451..5452767ef8 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt @@ -50,7 +50,7 @@ internal class StateBuilder( return SwapStateHolder( blockchainId = networkInfo.blockchainId, sendCardData = SwapCardState.SwapCardData( - type = TransactionCardType.SendCard(actions.onAmountChanged, actions.onAmountSelected), + type = TransactionCardType.Inputtable(actions.onAmountChanged, actions.onAmountSelected), amountEquivalent = null, amountTextFieldValue = null, token = null, @@ -64,7 +64,7 @@ internal class StateBuilder( isBalanceHidden = true, ), receiveCardData = SwapCardState.SwapCardData( - type = TransactionCardType.ReceiveCard(), + type = TransactionCardType.ReadOnly(), amountEquivalent = null, tokenIconUrl = "", tokenCurrency = "", @@ -98,7 +98,9 @@ internal class StateBuilder( if (uiStateHolder.sendCardData !is SwapCardState.SwapCardData) return uiStateHolder return uiStateHolder.copy( sendCardData = SwapCardState.SwapCardData( - type = requireNotNull(uiStateHolder.sendCardData.type as? TransactionCardType.SendCard), + type = TransactionCardType.ReadOnly( + headerResId = R.string.exchange_send_view_header + ), amountTextFieldValue = TextFieldValue( text = "0", ), @@ -114,7 +116,7 @@ internal class StateBuilder( isBalanceHidden = isBalanceHiddenProvider(), ), receiveCardData = SwapCardState.Empty( - type = TransactionCardType.ReceiveCard(), + type = TransactionCardType.ReadOnly(), amountEquivalent = "0 ${appCurrencyProvider.invoke().symbol}", amountTextFieldValue = TextFieldValue( text = "0", @@ -156,7 +158,7 @@ internal class StateBuilder( if (uiStateHolder.receiveCardData !is SwapCardState.SwapCardData) return uiStateHolder return uiStateHolder.copy( sendCardData = SwapCardState.SwapCardData( - type = requireNotNull(uiStateHolder.sendCardData.type as? TransactionCardType.SendCard), + type = requireNotNull(uiStateHolder.sendCardData.type as? TransactionCardType.Inputtable), amountTextFieldValue = uiStateHolder.sendCardData.amountTextFieldValue, amountEquivalent = null, token = uiStateHolder.sendCardData.token, @@ -170,7 +172,7 @@ internal class StateBuilder( isBalanceHidden = isBalanceHiddenProvider(), ), receiveCardData = SwapCardState.SwapCardData( - type = TransactionCardType.ReceiveCard(), + type = TransactionCardType.ReadOnly(), amountTextFieldValue = null, amountEquivalent = null, token = uiStateHolder.receiveCardData.token, @@ -220,7 +222,7 @@ internal class StateBuilder( val toCurrencyStatus = quoteModel.toTokenInfo.cryptoCurrencyStatus return uiStateHolder.copy( sendCardData = SwapCardState.SwapCardData( - type = requireNotNull(uiStateHolder.sendCardData.type as? TransactionCardType.SendCard), + type = requireNotNull(uiStateHolder.sendCardData.type as? TransactionCardType.Inputtable), amountTextFieldValue = uiStateHolder.sendCardData.amountTextFieldValue, amountEquivalent = getFormattedFiatAmount(quoteModel.fromTokenInfo.amountFiat), token = fromCurrencyStatus, @@ -234,7 +236,7 @@ internal class StateBuilder( isBalanceHidden = isBalanceHiddenProvider(), ), receiveCardData = SwapCardState.SwapCardData( - type = TransactionCardType.ReceiveCard(), + type = TransactionCardType.ReadOnly(), amountTextFieldValue = TextFieldValue(quoteModel.toTokenInfo.tokenAmount.formatToUIRepresentation()), amountEquivalent = getFormattedFiatAmount(quoteModel.toTokenInfo.amountFiat), token = toCurrencyStatus, @@ -419,7 +421,7 @@ internal class StateBuilder( ) val receiveCardData = toToken?.let { SwapCardState.SwapCardData( - type = TransactionCardType.ReceiveCard(), + type = TransactionCardType.ReadOnly(), amountTextFieldValue = TextFieldValue( text = "0", ), @@ -435,7 +437,7 @@ internal class StateBuilder( isBalanceHidden = isBalanceHiddenProvider(), ) } ?: SwapCardState.Empty( - type = TransactionCardType.ReceiveCard(), + type = TransactionCardType.ReadOnly(), amountEquivalent = "0 ${appCurrencyProvider.invoke().symbol}", amountTextFieldValue = TextFieldValue( text = "0", @@ -533,7 +535,7 @@ internal class StateBuilder( if (uiStateHolder.receiveCardData !is SwapCardState.SwapCardData) return uiStateHolder return uiStateHolder.copy( sendCardData = SwapCardState.SwapCardData( - type = requireNotNull(uiStateHolder.sendCardData.type as? TransactionCardType.SendCard), + type = requireNotNull(uiStateHolder.sendCardData.type as? TransactionCardType.Inputtable), amountTextFieldValue = uiStateHolder.sendCardData.amountTextFieldValue, amountEquivalent = emptyAmountState.zeroAmountEquivalent, token = uiStateHolder.sendCardData.token, @@ -547,7 +549,7 @@ internal class StateBuilder( isBalanceHidden = isBalanceHiddenProvider(), ), receiveCardData = SwapCardState.SwapCardData( - type = TransactionCardType.ReceiveCard(), + type = TransactionCardType.ReadOnly(), amountTextFieldValue = TextFieldValue("0"), amountEquivalent = emptyAmountState.zeroAmountEquivalent, token = uiStateHolder.receiveCardData.token, diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreenContent.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreenContent.kt index 1e0b3f5944..b211130172 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreenContent.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreenContent.kt @@ -1,6 +1,5 @@ package com.tangem.feature.swap.ui -import androidx.compose.animation.* import androidx.compose.foundation.* import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.CircleShape @@ -429,7 +428,7 @@ private fun MainButton(state: SwapStateHolder, onPermissionWarningClick: () -> U // region preview private val sendCard = SwapCardState.SwapCardData( - type = TransactionCardType.SendCard({}) {}, + type = TransactionCardType.Inputtable({}, {}), amountTextFieldValue = TextFieldValue(), amountEquivalent = "1 000 000", tokenIconUrl = "", @@ -444,7 +443,7 @@ private val sendCard = SwapCardState.SwapCardData( ) private val receiveCard = SwapCardState.SwapCardData( - type = TransactionCardType.ReceiveCard(), + type = TransactionCardType.ReadOnly(), amountTextFieldValue = TextFieldValue(), amountEquivalent = "1 000 000", tokenIconUrl = "", diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/TransactionCard.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/TransactionCard.kt index 5b16375022..0aec67858b 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/TransactionCard.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/TransactionCard.kt @@ -182,10 +182,7 @@ private fun Header(type: TransactionCardType, balance: String, modifier: Modifie horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically, ) { - val title = when (type) { - is TransactionCardType.ReceiveCard -> R.string.exchange_receive_view_header - is TransactionCardType.SendCard -> R.string.exchange_send_view_header - } + val title = type.headerResId Text( text = stringResource(id = title), color = TangemTheme.colors.text.tertiary, @@ -245,7 +242,7 @@ private fun Content( ) { val sumTextModifier = Modifier.defaultMinSize(minHeight = TangemTheme.dimens.size32) when (type) { - is TransactionCardType.ReceiveCard -> { + is TransactionCardType.ReadOnly -> { if (textFieldValue != null) { ResizableText( text = textFieldValue.text, @@ -263,7 +260,7 @@ private fun Content( ) } } - is TransactionCardType.SendCard -> { + is TransactionCardType.Inputtable -> { AutoSizeTextField( modifier = sumTextModifier, textFieldValue = textFieldValue ?: TextFieldValue(), @@ -276,7 +273,7 @@ private fun Content( SpacerH8() if (amountEquivalent != null) { - if (type is TransactionCardType.ReceiveCard && priceImpact !is PriceImpact.Empty) { + if (type is TransactionCardType.ReadOnly && priceImpact !is PriceImpact.Empty) { Row { Text( text = makePriceImpactBalanceWarning(amountEquivalent, priceImpact.getIntPercentValue()), @@ -485,7 +482,7 @@ private fun Preview_SwapMainCard_InDarkTheme() { @Composable private fun TransactionCardPreview() { TransactionCard( - type = TransactionCardType.SendCard({}) {}, + type = TransactionCardType.Inputtable({}, {}), amountEquivalent = "1 000 000", tokenIconUrl = "", tokenCurrency = "DAI",