From 7c3d6bf9af4118afb3b4f54972e11cae9cfb59f4 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 4 Jul 2024 22:40:09 +0800 Subject: [PATCH] Updated on 2026-08-14 --- .../models/response/ExchangeProvider.kt | 3 ++ core/res/src/main/res/values-ru/strings.xml | 1 + core/res/src/main/res/values/strings.xml | 1 + .../swap/converters/SwapPairInfoConverter.kt | 2 ++ .../domain/models/domain/SwapPairLeast.kt | 2 ++ .../swap/models/states/ProviderState.kt | 7 ++-- .../tangem/feature/swap/ui/ProviderItem.kt | 32 +++++++++++++------ .../tangem/feature/swap/ui/StateBuilder.kt | 12 +++++-- 8 files changed, 46 insertions(+), 14 deletions(-) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeProvider.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeProvider.kt index 8b224858c1..bda2f0e17f 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeProvider.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeProvider.kt @@ -23,6 +23,9 @@ data class ExchangeProvider( @Json(name = "privacyPolicy") val privacyPolicy: String?, + + @Json(name = "recommended") + val isRecommended: Boolean = false, ) enum class ExchangeProviderType { diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 453bf3dd9b..e70467d63f 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -239,6 +239,7 @@ Доступно с %s Недоступно для этой пары Требуется разрешение + Рекомендовано Условиями использования Токены не найдены. Пожалуйста, попробуйте другой запрос ID: %s diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index c712fdab72..40b0b45e01 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -238,6 +238,7 @@ Available from %s Unavailable for this pair Permission Required + Recommended Terms of Use No tokens found. Please try another request ID: %s diff --git a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/SwapPairInfoConverter.kt b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/SwapPairInfoConverter.kt index cdaa277dac..ec5a88e56e 100644 --- a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/SwapPairInfoConverter.kt +++ b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/SwapPairInfoConverter.kt @@ -45,6 +45,7 @@ class SwapPairInfoConverter : Converter BestTradeItem( - Modifier.padding(start = TangemTheme.dimens.spacing4), - ) - ProviderState.AdditionalBadge.PermissionRequired -> PermissionBadgeItem( - Modifier.padding(start = TangemTheme.dimens.spacing4), - ) - ProviderState.AdditionalBadge.Empty -> { - // no-op - } + ProviderState.AdditionalBadge.BestTrade -> BestTradeItem(badgeModifier) + ProviderState.AdditionalBadge.PermissionRequired -> PermissionBadgeItem(badgeModifier) + ProviderState.AdditionalBadge.Recommended -> RecommendedItem(badgeModifier) + ProviderState.AdditionalBadge.Empty -> Unit } } Row( @@ -385,6 +382,23 @@ private fun PermissionBadgeItem(modifier: Modifier = Modifier) { } } +@Composable +private fun RecommendedItem(modifier: Modifier = Modifier) { + Box( + modifier = modifier.background( + color = TangemTheme.colors.icon.accent.copy(alpha = 0.1f), + shape = TangemTheme.shapes.roundedCornersLarge, + ), + ) { + Text( + text = stringResource(id = R.string.express_provider_recommended), + style = TangemTheme.typography.caption1, + color = TangemTheme.colors.icon.accent, + modifier = Modifier.padding(horizontal = TangemTheme.dimens.spacing6), + ) + } +} + // region Preview @Preview(showBackground = true, widthDp = 360) @Preview(showBackground = true, widthDp = 360, uiMode = Configuration.UI_MODE_NIGHT_YES) 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 880518dcdb..d4e4617075 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 @@ -1541,7 +1541,9 @@ internal class StateBuilder( val fromCurrencySymbol = fromTokenInfo.cryptoCurrencyStatus.currency.symbol val toCurrencySymbol = toTokenInfo.cryptoCurrencyStatus.currency.symbol val rateString = "1 $fromCurrencySymbol ≈ $rate $toCurrencySymbol" - val badge = if (isNeedBestRateBadge && isBestRate) { + val badge = if (isRecommended) { + ProviderState.AdditionalBadge.Recommended + } else if (isNeedBestRateBadge && isBestRate) { ProviderState.AdditionalBadge.BestTrade } else { ProviderState.AdditionalBadge.Empty @@ -1555,7 +1557,11 @@ internal class StateBuilder( additionalBadge = badge, selectionType = selectionType, percentLowerThenBest = PercentDifference.Empty, - namePrefix = ProviderState.PrefixType.PROVIDED_BY, + namePrefix = if (badge !is ProviderState.AdditionalBadge.Recommended) { + ProviderState.PrefixType.PROVIDED_BY + } else { + ProviderState.PrefixType.NONE + }, onProviderClick = onProviderClick, ) } @@ -1570,6 +1576,8 @@ internal class StateBuilder( val rateString = toTokenInfo.tokenAmount.getFormattedCryptoAmount(toTokenInfo.cryptoCurrencyStatus.currency) val additionalBadge = if (state.permissionState is PermissionDataState.PermissionReadyForRequest) { ProviderState.AdditionalBadge.PermissionRequired + } else if (isRecommended) { + ProviderState.AdditionalBadge.Recommended } else { ProviderState.AdditionalBadge.Empty }