From 98b7073af31802512a4ffad70c6a42ae91ac342d Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 14 Feb 2024 16:10:42 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../swap/models/states/ProviderState.kt | 11 +++++++++ .../swap/ui/ChooseProviderBottomSheet.kt | 1 + .../tangem/feature/swap/ui/ProviderItem.kt | 24 ++++++++++++------- .../tangem/feature/swap/ui/StateBuilder.kt | 7 ++++++ 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/states/ProviderState.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/states/ProviderState.kt index 265631000e..56ca1cbc5b 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/states/ProviderState.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/states/ProviderState.kt @@ -1,7 +1,9 @@ package com.tangem.feature.swap.models.states +import androidx.compose.runtime.Immutable import com.tangem.core.ui.extensions.TextReference +@Immutable sealed class ProviderState { abstract val onProviderClick: ((String) -> Unit)? @@ -25,6 +27,7 @@ sealed class ProviderState { val subtitle: TextReference, val selectionType: SelectionType, val additionalBadge: AdditionalBadge, + val namePrefix: PrefixType, val percentLowerThenBest: PercentLowerThanBest = PercentLowerThanBest.Empty, override val onProviderClick: (String) -> Unit, ) : ProviderState() @@ -39,17 +42,25 @@ sealed class ProviderState { override val onProviderClick: ((String) -> Unit)? = null, ) : ProviderState() + @Immutable sealed class AdditionalBadge { object BestTrade : AdditionalBadge() object Empty : AdditionalBadge() object PermissionRequired : AdditionalBadge() } + @Immutable enum class SelectionType { NONE, CLICK, SELECT } + + @Immutable + enum class PrefixType { + NONE, PROVIDED_BY + } } +@Immutable sealed class PercentLowerThanBest { data class Value(val value: Float) : PercentLowerThanBest() object Empty : PercentLowerThanBest() diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/ChooseProviderBottomSheet.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/ChooseProviderBottomSheet.kt index 51757b8c16..2e04a4eef3 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/ChooseProviderBottomSheet.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/ChooseProviderBottomSheet.kt @@ -116,6 +116,7 @@ private fun ChooseProviderBottomSheet_Preview() { additionalBadge = ProviderState.AdditionalBadge.BestTrade, percentLowerThenBest = PercentLowerThanBest.Value(-1.0f), selectionType = ProviderState.SelectionType.SELECT, + namePrefix = ProviderState.PrefixType.NONE, onProviderClick = {}, ), ProviderState.Unavailable( diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/ProviderItem.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/ProviderItem.kt index 903818aa1b..df12b50590 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/ProviderItem.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/ProviderItem.kt @@ -17,11 +17,12 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider import coil.compose.SubcomposeAsyncImage import coil.request.ImageRequest import com.tangem.core.ui.R import com.tangem.core.ui.components.RectangleShimmer -import com.tangem.core.ui.components.SpacerH24 import com.tangem.core.ui.extensions.resolveReference import com.tangem.core.ui.extensions.stringReference import com.tangem.core.ui.res.TangemTheme @@ -113,12 +114,14 @@ private fun ProviderContentState( modifier = Modifier.padding(start = TangemTheme.dimens.spacing12), ) { Row { - Text( - text = stringResource(id = R.string.express_by_provider), - style = TangemTheme.typography.caption2, - color = TangemTheme.colors.text.tertiary, - modifier = Modifier.padding(end = TangemTheme.dimens.spacing4), - ) + if (state.namePrefix == ProviderState.PrefixType.PROVIDED_BY) { + Text( + text = stringResource(id = R.string.express_by_provider), + style = TangemTheme.typography.caption2, + color = TangemTheme.colors.text.tertiary, + modifier = Modifier.padding(end = TangemTheme.dimens.spacing4), + ) + } AnimatedContent(targetState = state.name, label = "") { Text( text = it, @@ -427,13 +430,16 @@ private class ProviderItemParameterProvider : CollectionPreviewParameterProvider name = "1inch", type = "DEX", iconUrl = "", - subtitle = stringReference(value = "1 132,46 MATIC"), - additionalBadge = ProviderState.AdditionalBadge.PermissionRequired, + subtitle = stringReference(value = "0,64554846 DAI ≈ 1 MATIC"), + additionalBadge = ProviderState.AdditionalBadge.Empty, percentLowerThenBest = PercentLowerThanBest.Empty, selectionType = ProviderState.SelectionType.SELECT, + namePrefix = ProviderState.PrefixType.PROVIDED_BY, onProviderClick = {}, ) val contentState2 = contentState.copy( + subtitle = stringReference(value = "1 132,46 MATIC"), + additionalBadge = ProviderState.AdditionalBadge.PermissionRequired, percentLowerThenBest = PercentLowerThanBest.Value(value = 5f), ) val unavailableState = ProviderState.Unavailable( 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 d6a880f213..2ab118da47 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 @@ -1229,6 +1229,7 @@ internal class StateBuilder( additionalBadge = badge, selectionType = selectionType, percentLowerThenBest = PercentLowerThanBest.Empty, + namePrefix = ProviderState.PrefixType.PROVIDED_BY, onProviderClick = onProviderClick, ) } @@ -1260,6 +1261,7 @@ internal class StateBuilder( percentLowerThenBest = pricesLowerBest[this.providerId]?.let { percent -> PercentLowerThanBest.Value(percent) } ?: PercentLowerThanBest.Value(0f), + namePrefix = ProviderState.PrefixType.NONE, onProviderClick = onProviderClick, ) } @@ -1294,6 +1296,11 @@ internal class StateBuilder( subtitle = alertText, additionalBadge = ProviderState.AdditionalBadge.Empty, percentLowerThenBest = PercentLowerThanBest.Empty, + namePrefix = if (selectionType != ProviderState.SelectionType.SELECT) { + ProviderState.PrefixType.PROVIDED_BY + } else { + ProviderState.PrefixType.NONE + }, onProviderClick = onProviderClick, ) }