From be56fd039a7f78faade5de6e9527e68300b68a74 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 30 Nov 2023 17:51:22 +0300 Subject: [PATCH 1/2] Updated on 2026-08-14 --- .../tangem/datasource/api/express/TangemExpressApi.kt | 2 ++ .../java/com/tangem/feature/swap/SwapRepositoryImpl.kt | 4 ++++ .../tangem/feature/swap/domain/SwapInteractorImpl.kt | 10 +++++++--- .../com/tangem/feature/swap/domain/SwapRepository.kt | 2 ++ .../com/tangem/feature/swap/ui/SwapScreenContent.kt | 6 ++++++ 5 files changed, 21 insertions(+), 3 deletions(-) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/TangemExpressApi.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/TangemExpressApi.kt index b5ef12459c..b78d485fa6 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/TangemExpressApi.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/TangemExpressApi.kt @@ -32,6 +32,7 @@ interface TangemExpressApi { @Query("toNetwork") toNetwork: String, @Query("fromAmount") fromAmount: String, @Query("fromDecimals") fromDecimals: Int, + @Query("toDecimals") toDecimals: Int, @Query("providerId") providerId: String, @Query("rateType") rateType: String, ): ApiResponse @@ -44,6 +45,7 @@ interface TangemExpressApi { @Query("toNetwork") toNetwork: String, @Query("fromAmount") fromAmount: String, @Query("fromDecimals") fromDecimals: Int, + @Query("toDecimals") toDecimals: Int, @Query("providerId") providerId: String, @Query("rateType") rateType: String, @Query("toAddress") toAddress: String, diff --git a/features/swap/data/src/main/java/com/tangem/feature/swap/SwapRepositoryImpl.kt b/features/swap/data/src/main/java/com/tangem/feature/swap/SwapRepositoryImpl.kt index 338fafe196..90358d75df 100644 --- a/features/swap/data/src/main/java/com/tangem/feature/swap/SwapRepositoryImpl.kt +++ b/features/swap/data/src/main/java/com/tangem/feature/swap/SwapRepositoryImpl.kt @@ -168,6 +168,7 @@ internal class SwapRepositoryImpl @Inject constructor( toNetwork: String, fromAmount: String, fromDecimals: Int, + toDecimals: Int, providerId: String, rateType: RateType, ): AggregatedSwapDataModel { @@ -180,6 +181,7 @@ internal class SwapRepositoryImpl @Inject constructor( toNetwork = toNetwork, fromAmount = fromAmount, fromDecimals = fromDecimals, + toDecimals = toDecimals, providerId = providerId, rateType = rateType.name.lowercase(), ).getOrThrow() @@ -208,6 +210,7 @@ internal class SwapRepositoryImpl @Inject constructor( toNetwork: String, fromAmount: String, fromDecimals: Int, + toDecimals: Int, providerId: String, rateType: RateType, toAddress: String, @@ -221,6 +224,7 @@ internal class SwapRepositoryImpl @Inject constructor( toNetwork = toNetwork, fromAmount = fromAmount, fromDecimals = fromDecimals, + toDecimals = toDecimals, providerId = providerId, rateType = rateType.name.lowercase(), toAddress = toAddress, diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt index b4e0208243..685e925ce8 100644 --- a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt @@ -270,6 +270,7 @@ internal class SwapInteractorImpl @Inject constructor( toNetwork = toToken.currency.network.backendId, fromAmount = amount.toStringWithRightOffset(), fromDecimals = amount.decimals, + toDecimals = toToken.currency.decimals, providerId = provider.providerId, rateType = RateType.FLOAT, ) @@ -462,6 +463,7 @@ internal class SwapInteractorImpl @Inject constructor( toNetwork = currencyToGet.currency.network.backendId, fromAmount = amount.toStringWithRightOffset(), fromDecimals = amount.decimals, + toDecimals = currencyToGet.currency.decimals, providerId = swapProvider.providerId, rateType = RateType.FLOAT, toAddress = currencyToGet.value.networkAddress?.defaultAddress ?: "", @@ -652,6 +654,7 @@ internal class SwapInteractorImpl @Inject constructor( fromAmount = amount.toStringWithRightOffset(), fromDecimals = amount.decimals, providerId = provider.providerId, + toDecimals = toToken.decimals, rateType = RateType.FLOAT, ) @@ -707,7 +710,7 @@ internal class SwapInteractorImpl @Inject constructor( swapAmount = amount, quotesLoadedState = swapState, isAllowedToSpend = isAllowedToSpend, - spenderAddress = requireNotNull(quoteModel.allowanceContract) { "Allowance contract is null" }, + spenderAddress = quoteModel.allowanceContract, ) state.copy( preparedSwapConfigState = state.preparedSwapConfigState.copy( @@ -776,6 +779,7 @@ internal class SwapInteractorImpl @Inject constructor( toNetwork = toToken.currency.network.backendId, fromAmount = amount.toStringWithRightOffset(), fromDecimals = amount.decimals, + toDecimals = toToken.currency.decimals, providerId = provider.providerId, rateType = RateType.FLOAT, toAddress = toToken.value.networkAddress?.defaultAddress ?: "", @@ -907,7 +911,7 @@ internal class SwapInteractorImpl @Inject constructor( fromTokenStatus: CryptoCurrencyStatus, swapAmount: SwapAmount, quotesLoadedState: SwapState.QuotesLoadedState, - spenderAddress: String, + spenderAddress: String?, isAllowedToSpend: Boolean, ): SwapState.QuotesLoadedState { val fromToken = fromTokenStatus.currency @@ -934,7 +938,7 @@ internal class SwapInteractorImpl @Inject constructor( derivationPath = derivationPath, fromToken = fromToken, swapAmount = swapAmount, - spenderAddress = spenderAddress, + spenderAddress = requireNotNull(spenderAddress) { "Spender address is null" }, ) val feeData = try { transactionManager.getFee( diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapRepository.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapRepository.kt index c96bb13b19..9f90d4dc3d 100644 --- a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapRepository.kt +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapRepository.kt @@ -25,6 +25,7 @@ interface SwapRepository { toNetwork: String, fromAmount: String, fromDecimals: Int, + toDecimals: Int, providerId: String, rateType: RateType, ): AggregatedSwapDataModel @@ -72,6 +73,7 @@ interface SwapRepository { toNetwork: String, fromAmount: String, fromDecimals: Int, + toDecimals: Int, providerId: String, rateType: RateType, toAddress: String, 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 95fd4ce997..cd6c2ea2fa 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 @@ -294,6 +294,12 @@ private fun SwapWarnings(warnings: List) { config = warning.notificationConfig, ) } + is SwapWarning.GeneralWarning -> { + Notification( + config = warning.notificationConfig, + iconTint = TangemTheme.colors.icon.warning, + ) + } else -> {} } SpacerH8() From 61fbf9a6ea4a04ee6d8f0ece83504014bd4ae71b Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 30 Nov 2023 18:14:51 +0300 Subject: [PATCH 2/2] Updated on 2026-08-14 --- .../feature/swap/models/SwapStateHolder.kt | 3 +- .../tangem/feature/swap/ui/StateBuilder.kt | 11 +- .../feature/swap/ui/SwapScreenContent.kt | 13 +- .../tangem/feature/swap/ui/TransactionCard.kt | 175 +++++++++--------- 4 files changed, 103 insertions(+), 99 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 9fc0d8a9c1..e30eff225c 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,5 +1,6 @@ package com.tangem.feature.swap.models +import androidx.annotation.DrawableRes import androidx.compose.ui.text.input.TextFieldValue import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig import com.tangem.core.ui.components.notifications.NotificationConfig @@ -14,7 +15,6 @@ data class SwapStateHolder( val sendCardData: SwapCardState, val receiveCardData: SwapCardState, val networkCurrency: String, - val networkId: String, val blockchainId: String, // not the same as networkId, its local id in app val warnings: List = emptyList(), val alert: SwapWarning.GenericWarning? = null, @@ -42,6 +42,7 @@ data class SwapStateHolder( sealed class SwapCardState { data class SwapCardData( + @DrawableRes val networkIconRes: Int?, val type: TransactionCardType, val amountEquivalent: String?, val token: CryptoCurrencyStatus?, 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 b81bbb59e4..4bab76b4a3 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 @@ -49,7 +49,6 @@ internal class StateBuilder( fun createInitialLoadingState(initialCurrency: CryptoCurrency, networkInfo: NetworkInfo): SwapStateHolder { return SwapStateHolder( - networkId = initialCurrency.network.backendId, blockchainId = networkInfo.blockchainId, sendCardData = SwapCardState.SwapCardData( type = TransactionCardType.SendCard(actions.onAmountChanged, actions.onAmountSelected), @@ -62,6 +61,7 @@ internal class StateBuilder( canSelectAnotherToken = false, isNotNativeToken = initialCurrency is CryptoCurrency.Token, balance = "", + networkIconRes = getActiveIconRes(initialCurrency.network.id.value), isBalanceHidden = true, ), receiveCardData = SwapCardState.SwapCardData( @@ -74,6 +74,7 @@ internal class StateBuilder( canSelectAnotherToken = false, balance = "", isNotNativeToken = false, + networkIconRes = null, coinId = null, isBalanceHidden = true, ), @@ -109,6 +110,7 @@ internal class StateBuilder( tokenCurrency = uiStateHolder.sendCardData.tokenCurrency, canSelectAnotherToken = uiStateHolder.sendCardData.canSelectAnotherToken, balance = fromToken.getFormattedAmount(), + networkIconRes = getActiveIconRes(fromToken.currency.network.id.value), isBalanceHidden = isBalanceHiddenProvider(), ), receiveCardData = SwapCardState.Empty( @@ -163,6 +165,7 @@ internal class StateBuilder( isNotNativeToken = fromToken is CryptoCurrency.Token, canSelectAnotherToken = canSelectSendToken, balance = if (!canSelectSendToken) uiStateHolder.sendCardData.balance else "", + networkIconRes = getActiveIconRes(fromToken.network.id.value), isBalanceHidden = isBalanceHiddenProvider(), ), receiveCardData = SwapCardState.SwapCardData( @@ -176,6 +179,7 @@ internal class StateBuilder( isNotNativeToken = toToken is CryptoCurrency.Token, canSelectAnotherToken = canSelectReceiveToken, balance = if (!canSelectReceiveToken) uiStateHolder.receiveCardData.balance else "", + networkIconRes = getActiveIconRes(toToken.network.id.value), isBalanceHidden = isBalanceHiddenProvider(), ), warnings = emptyList(), @@ -256,6 +260,7 @@ internal class StateBuilder( isNotNativeToken = uiStateHolder.sendCardData.isNotNativeToken, tokenCurrency = uiStateHolder.sendCardData.tokenCurrency, canSelectAnotherToken = uiStateHolder.sendCardData.canSelectAnotherToken, + networkIconRes = uiStateHolder.sendCardData.networkIconRes, balance = fromCurrencyStatus.getFormattedAmount(), isBalanceHidden = isBalanceHiddenProvider(), ), @@ -269,6 +274,7 @@ internal class StateBuilder( isNotNativeToken = uiStateHolder.receiveCardData.isNotNativeToken, tokenCurrency = uiStateHolder.receiveCardData.tokenCurrency, canSelectAnotherToken = uiStateHolder.receiveCardData.canSelectAnotherToken, + networkIconRes = uiStateHolder.receiveCardData.networkIconRes, balance = toCurrencyStatus.getFormattedAmount(), isBalanceHidden = isBalanceHiddenProvider(), ), @@ -329,6 +335,7 @@ internal class StateBuilder( isNotNativeToken = uiStateHolder.receiveCardData.isNotNativeToken, tokenCurrency = uiStateHolder.receiveCardData.tokenCurrency, canSelectAnotherToken = uiStateHolder.receiveCardData.canSelectAnotherToken, + networkIconRes = uiStateHolder.receiveCardData.networkIconRes, balance = toToken.getFormattedAmount(), isBalanceHidden = isBalanceHiddenProvider(), ) @@ -421,6 +428,7 @@ internal class StateBuilder( isNotNativeToken = uiStateHolder.sendCardData.isNotNativeToken, tokenCurrency = uiStateHolder.sendCardData.tokenCurrency, canSelectAnotherToken = uiStateHolder.sendCardData.canSelectAnotherToken, + networkIconRes = uiStateHolder.sendCardData.networkIconRes, balance = emptyAmountState.fromTokenWalletBalance, isBalanceHidden = isBalanceHiddenProvider(), ), @@ -434,6 +442,7 @@ internal class StateBuilder( isNotNativeToken = uiStateHolder.receiveCardData.isNotNativeToken, tokenCurrency = uiStateHolder.receiveCardData.tokenCurrency, canSelectAnotherToken = uiStateHolder.receiveCardData.canSelectAnotherToken, + networkIconRes = uiStateHolder.receiveCardData.networkIconRes, balance = emptyAmountState.toTokenWalletBalance, isBalanceHidden = isBalanceHiddenProvider(), ), 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 cd6c2ea2fa..0ba2059fab 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 @@ -7,7 +7,6 @@ import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.* import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource @@ -21,7 +20,6 @@ import com.tangem.core.ui.components.* import com.tangem.core.ui.components.appbar.AppBarWithBackButton import com.tangem.core.ui.components.notifications.Notification import com.tangem.core.ui.components.notifications.NotificationConfig -import com.tangem.core.ui.extensions.getActiveIconRes import com.tangem.core.ui.extensions.getActiveIconResByCoinId import com.tangem.core.ui.extensions.stringReference import com.tangem.core.ui.res.TangemTheme @@ -135,14 +133,10 @@ private fun MainInfo(state: SwapStateHolder) { ConstraintLayout( modifier = Modifier.fillMaxWidth(), ) { - val networkIconRes = remember { - getActiveIconRes(state.blockchainId) - } val (topCard, bottomCard, button) = createRefs() val priceImpactWarning = state.warnings.filterIsInstance().firstOrNull() TransactionCardData( priceImpactWarning = priceImpactWarning, - networkIconRes = networkIconRes, swapCardState = state.sendCardData, modifier = Modifier.constrainAs(topCard) { top.linkTo(parent.top) @@ -152,7 +146,6 @@ private fun MainInfo(state: SwapStateHolder) { val marginCard = TangemTheme.dimens.spacing16 TransactionCardData( priceImpactWarning = priceImpactWarning, - networkIconRes = networkIconRes, swapCardState = state.receiveCardData, modifier = Modifier.constrainAs(bottomCard) { top.linkTo(topCard.bottom, margin = marginCard) @@ -174,7 +167,6 @@ private fun MainInfo(state: SwapStateHolder) { @Composable private fun TransactionCardData( priceImpactWarning: SwapWarning.HighPriceImpact?, - networkIconRes: Int?, swapCardState: SwapCardState, onSelectTokenClick: (() -> Unit)?, modifier: Modifier = Modifier, @@ -202,7 +194,7 @@ private fun TransactionCardData( tokenIconUrl = swapCardState.tokenIconUrl ?: "", tokenCurrency = swapCardState.tokenCurrency, priceImpact = priceImpactWarning, - networkIconRes = if (swapCardState.isNotNativeToken) networkIconRes else null, + networkIconRes = if (swapCardState.isNotNativeToken) swapCardState.networkIconRes else null, iconPlaceholder = swapCardState.coinId?.let { getActiveIconResByCoinId(it) }, @@ -355,6 +347,7 @@ private val sendCard = SwapCardState.SwapCardData( balance = "123", coinId = "", token = null, + networkIconRes = R.drawable.img_polygon_22, isBalanceHidden = false, ) @@ -369,11 +362,11 @@ private val receiveCard = SwapCardState.SwapCardData( balance = "33333", coinId = "", token = null, + networkIconRes = R.drawable.img_polygon_22, isBalanceHidden = false, ) private val state = SwapStateHolder( - networkId = "ethereum", sendCardData = sendCard, receiveCardData = receiveCard, fee = FeeItemState.Content( 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 d5996c36a5..f4bd0ae799 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 @@ -9,7 +9,6 @@ import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.Card import androidx.compose.material.Icon import androidx.compose.material.MaterialTheme import androidx.compose.material.Text @@ -17,6 +16,7 @@ import androidx.compose.material.ripple.rememberRipple import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalContext @@ -55,53 +55,53 @@ fun TransactionCard( @DrawableRes networkIconRes: Int? = null, onChangeTokenClick: (() -> Unit)? = null, ) { - Card( - shape = RoundedCornerShape(TangemTheme.dimens.radius12), - backgroundColor = TangemTheme.colors.background.primary, - elevation = TangemTheme.dimens.elevation2, - modifier = modifier, + Box( + modifier = modifier + .background( + shape = RoundedCornerShape(TangemTheme.dimens.radius12), + color = TangemTheme.colors.background.primary, + ) + .fillMaxSize(), ) { - Box(modifier = Modifier.fillMaxSize()) { - Column( - modifier = Modifier - .fillMaxWidth(), - verticalArrangement = Arrangement.Top, - horizontalAlignment = Alignment.Start, - ) { - Header(balance = stringResource(R.string.common_balance, balance), type = type) + Column( + modifier = Modifier + .fillMaxWidth(), + verticalArrangement = Arrangement.Top, + horizontalAlignment = Alignment.Start, + ) { + Header(balance = stringResource(R.string.common_balance, balance), type = type) - Content( - type = type, - amountEquivalent = amountEquivalent, - textFieldValue = textFieldValue, - priceImpact = priceImpact, - ) - } + Content( + type = type, + amountEquivalent = amountEquivalent, + textFieldValue = textFieldValue, + priceImpact = priceImpact, + ) + } - Box(modifier = Modifier.align(Alignment.BottomEnd)) { - Token( - tokenIconUrl = tokenIconUrl, - tokenCurrency = tokenCurrency, - networkIconRes = networkIconRes, - iconPlaceholder = iconPlaceholder, - ) - } + Box(modifier = Modifier.align(Alignment.BottomEnd)) { + Token( + tokenIconUrl = tokenIconUrl, + tokenCurrency = tokenCurrency, + networkIconRes = networkIconRes, + iconPlaceholder = iconPlaceholder, + ) + } - if (onChangeTokenClick != null) { - Box(modifier = Modifier.align(Alignment.CenterEnd)) { - ChangeTokenSelector() - } - Box( - Modifier - .align(Alignment.CenterEnd) - .height(TangemTheme.dimens.size116) - .width(TangemTheme.dimens.size102) - .clickable( - indication = rememberRipple(bounded = false), - interactionSource = remember { MutableInteractionSource() }, - ) { onChangeTokenClick() }, - ) + if (onChangeTokenClick != null) { + Box(modifier = Modifier.align(Alignment.CenterEnd)) { + ChangeTokenSelector() } + Box( + Modifier + .align(Alignment.CenterEnd) + .height(TangemTheme.dimens.size116) + .width(TangemTheme.dimens.size102) + .clickable( + indication = rememberRipple(bounded = false), + interactionSource = remember { MutableInteractionSource() }, + ) { onChangeTokenClick() }, + ) } } } @@ -114,55 +114,55 @@ fun TransactionCardEmpty( modifier: Modifier = Modifier, onChangeTokenClick: (() -> Unit)? = null, ) { - Card( - shape = RoundedCornerShape(TangemTheme.dimens.radius12), - backgroundColor = TangemTheme.colors.background.primary, - elevation = TangemTheme.dimens.elevation2, - modifier = modifier, + Box( + modifier = modifier + .background( + shape = RoundedCornerShape(TangemTheme.dimens.radius12), + color = TangemTheme.colors.background.primary, + ) + .fillMaxSize(), ) { - Box(modifier = Modifier.fillMaxSize()) { - Column( - modifier = Modifier - .fillMaxWidth(), - verticalArrangement = Arrangement.Top, - horizontalAlignment = Alignment.Start, - ) { - Header( - balance = stringResource(id = R.string.swapping_token_not_available), - type = type, - ) + Column( + modifier = Modifier + .fillMaxWidth(), + verticalArrangement = Arrangement.Top, + horizontalAlignment = Alignment.Start, + ) { + Header( + balance = stringResource(id = R.string.swapping_token_not_available), + type = type, + ) - Content( - type = type, - amountEquivalent = amountEquivalent, - textFieldValue = textFieldValue, - priceImpact = null, - ) - } + Content( + type = type, + amountEquivalent = amountEquivalent, + textFieldValue = textFieldValue, + priceImpact = null, + ) + } - Box(modifier = Modifier.align(Alignment.BottomEnd)) { - Token( - tokenIconUrl = "", - tokenCurrency = "", - iconPlaceholder = R.drawable.ic_no_token_44, - ) - } + Box(modifier = Modifier.align(Alignment.BottomEnd)) { + Token( + tokenIconUrl = "", + tokenCurrency = "", + iconPlaceholder = R.drawable.ic_no_token_44, + ) + } - if (onChangeTokenClick != null) { - Box(modifier = Modifier.align(Alignment.CenterEnd)) { - ChangeTokenSelector() - } - Box( - Modifier - .align(Alignment.CenterEnd) - .height(TangemTheme.dimens.size116) - .width(TangemTheme.dimens.size102) - .clickable( - indication = rememberRipple(bounded = false), - interactionSource = remember { MutableInteractionSource() }, - ) { onChangeTokenClick() }, - ) + if (onChangeTokenClick != null) { + Box(modifier = Modifier.align(Alignment.CenterEnd)) { + ChangeTokenSelector() } + Box( + Modifier + .align(Alignment.CenterEnd) + .height(TangemTheme.dimens.size116) + .width(TangemTheme.dimens.size102) + .clickable( + indication = rememberRipple(bounded = false), + interactionSource = remember { MutableInteractionSource() }, + ) { onChangeTokenClick() }, + ) } } } @@ -372,6 +372,7 @@ private fun TokenIcon( color = iconBackgroundColor, shape = TangemTheme.shapes.roundedCorners8, ) + .clip(TangemTheme.shapes.roundedCorners8) val data = tokenIconUrl.ifEmpty { iconPlaceholder }