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
}