diff --git a/core/ui/src/main/java/com/tangem/core/ui/ds/badge/TangemBadge.kt b/core/ui/src/main/java/com/tangem/core/ui/ds/badge/TangemBadge.kt index e3332f834d..c196b908aa 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/ds/badge/TangemBadge.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/ds/badge/TangemBadge.kt @@ -289,6 +289,7 @@ enum class TangemBadgeColor { Red, Gray, Green, + GreenAlt, } @ReadOnlyComposable @@ -313,6 +314,12 @@ private fun getIconColor(type: TangemBadgeType, color: TangemBadgeColor) = when -> TangemTheme.colors2.markers.iconGreen TangemBadgeType.Solid -> TangemTheme.colors2.graphic.neutral.primaryInvertedConstant } + TangemBadgeColor.GreenAlt -> when (type) { + TangemBadgeType.Outline, + TangemBadgeType.Tinted, + -> TangemTheme.colors2.markers.iconGreenAlt + TangemBadgeType.Solid -> TangemTheme.colors2.graphic.neutral.primaryInvertedConstant + } } @ReadOnlyComposable @@ -337,6 +344,12 @@ private fun getTextColor(type: TangemBadgeType, color: TangemBadgeColor) = when -> TangemTheme.colors2.markers.textGreen TangemBadgeType.Solid -> TangemTheme.colors2.text.neutral.primaryInvertedConstant } + TangemBadgeColor.GreenAlt -> when (type) { + TangemBadgeType.Outline, + TangemBadgeType.Tinted, + -> TangemTheme.colors2.markers.textGreenAlt + TangemBadgeType.Solid -> TangemTheme.colors2.text.neutral.primaryInvertedConstant + } } @Suppress("CyclomaticComplexMethod") @@ -349,6 +362,7 @@ private fun Modifier.getBackgroundColor(type: TangemBadgeType, color: TangemBadg TangemBadgeColor.Blue -> TangemTheme.colors2.markers.backgroundSolidBlue TangemBadgeColor.Red -> TangemTheme.colors2.markers.backgroundSolidRed TangemBadgeColor.Green -> TangemTheme.colors2.markers.backgroundSolidGreen + TangemBadgeColor.GreenAlt -> TangemTheme.colors2.markers.backgroundSolidGreenAlt }, ) TangemBadgeType.Tinted -> background( @@ -357,6 +371,7 @@ private fun Modifier.getBackgroundColor(type: TangemBadgeType, color: TangemBadg TangemBadgeColor.Blue -> TangemTheme.colors2.markers.backgroundTintedBlue TangemBadgeColor.Red -> TangemTheme.colors2.markers.backgroundTintedRed TangemBadgeColor.Green -> TangemTheme.colors2.markers.backgroundTintedGreen + TangemBadgeColor.GreenAlt -> TangemTheme.colors2.markers.backgroundTintedGreenAlt }, ) TangemBadgeType.Outline -> { @@ -366,6 +381,7 @@ private fun Modifier.getBackgroundColor(type: TangemBadgeType, color: TangemBadg TangemBadgeColor.Blue -> TangemTheme.colors2.markers.borderTintedBlue TangemBadgeColor.Red -> TangemTheme.colors2.markers.borderTintedRed TangemBadgeColor.Green -> TangemTheme.colors2.markers.borderTintedGreen + TangemBadgeColor.GreenAlt -> TangemTheme.colors2.markers.borderTintedGreenAlt }, shape = shape, width = 1.dp, @@ -410,6 +426,7 @@ private class TangemBadgePreviewProvider : PreviewParameterProvider Unit, val onCloseClick: () -> Unit, val onPromoShown: () -> Unit = {}, - ) : PromoBannerUM() + ) : PromoBannerUM() { + enum class Type { + Yield, + Staking, + } + } data object Empty : PromoBannerUM() } diff --git a/core/ui/src/main/java/com/tangem/core/ui/ds/row/token/internal/TangemTokenRowPreviewData.kt b/core/ui/src/main/java/com/tangem/core/ui/ds/row/token/internal/TangemTokenRowPreviewData.kt index fb7b25744f..e4a05a37db 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/ds/row/token/internal/TangemTokenRowPreviewData.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/ds/row/token/internal/TangemTokenRowPreviewData.kt @@ -30,6 +30,8 @@ internal object TangemTokenRowPreviewData { val promoBannerUM: TangemTokenRowUM.PromoBannerUM.Content get() = TangemTokenRowUM.PromoBannerUM.Content( title = stringReference("Earn yield by supplying your crypto assets"), + iconRes = R.drawable.ic_yield_mode_mini_12, + type = TangemTokenRowUM.PromoBannerUM.Content.Type.Yield, onPromoBannerClick = {}, onPromoShown = {}, onCloseClick = {}, diff --git a/core/ui/src/main/java/com/tangem/core/ui/ds/row/token/internal/TokenRowPromoBanner.kt b/core/ui/src/main/java/com/tangem/core/ui/ds/row/token/internal/TokenRowPromoBanner.kt index 013204a20f..e7cf89db35 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/ds/row/token/internal/TokenRowPromoBanner.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/ds/row/token/internal/TokenRowPromoBanner.kt @@ -15,6 +15,8 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.tooling.preview.PreviewParameterProvider import com.tangem.core.ui.R import com.tangem.core.ui.ds.badge.* import com.tangem.core.ui.ds.image.TangemIconUM @@ -39,7 +41,18 @@ internal fun TokenRowPromoBanner(promoBannerUM: TangemTokenRowUM.PromoBannerUM.C LaunchedEffect(promoBannerUM) { promoBannerUM.onPromoShown() } - val bgColor = TangemTheme.colors2.markers.backgroundTintedGreen + val bgColor = when (promoBannerUM.type) { + TangemTokenRowUM.PromoBannerUM.Content.Type.Yield -> TangemTheme.colors2.markers.backgroundTintedGreenAlt + TangemTokenRowUM.PromoBannerUM.Content.Type.Staking -> TangemTheme.colors2.markers.backgroundTintedBlue + } + val contentColor = when (promoBannerUM.type) { + TangemTokenRowUM.PromoBannerUM.Content.Type.Yield -> TangemTheme.colors2.markers.textGreenAlt + TangemTokenRowUM.PromoBannerUM.Content.Type.Staking -> TangemTheme.colors2.markers.textBlue + } + val badgeColor = when (promoBannerUM.type) { + TangemTokenRowUM.PromoBannerUM.Content.Type.Yield -> TangemBadgeColor.GreenAlt + TangemTokenRowUM.PromoBannerUM.Content.Type.Staking -> TangemBadgeColor.Blue + } Column( modifier = modifier, ) { @@ -63,9 +76,9 @@ internal fun TokenRowPromoBanner(promoBannerUM: TangemTokenRowUM.PromoBannerUM.C horizontalArrangement = Arrangement.spacedBy(TangemTheme.dimens2.x1), ) { Icon( - imageVector = ImageVector.vectorResource(id = R.drawable.ic_analytics_up_24), + imageVector = ImageVector.vectorResource(id = promoBannerUM.iconRes), contentDescription = null, - tint = TangemTheme.colors2.markers.textGreen, + tint = contentColor, modifier = Modifier .padding(vertical = TangemTheme.dimens2.x0_5) .size(TangemTheme.dimens2.x3), @@ -73,14 +86,14 @@ internal fun TokenRowPromoBanner(promoBannerUM: TangemTokenRowUM.PromoBannerUM.C Text( text = promoBannerUM.title.resolveReference(), style = TangemTheme.typography2.captionSemibold11, - color = TangemTheme.colors2.markers.textGreen, + color = contentColor, modifier = Modifier .padding(vertical = TangemTheme.dimens2.x0_5), ) TangemBadge( size = TangemBadgeSize.X4, shape = TangemBadgeShape.Rounded, - color = TangemBadgeColor.Green, + color = badgeColor, type = TangemBadgeType.Tinted, tangemIconUM = TangemIconUM.Icon(R.drawable.ic_close_24), iconPosition = TangemBadgeIconPosition.None, @@ -90,14 +103,30 @@ internal fun TokenRowPromoBanner(promoBannerUM: TangemTokenRowUM.PromoBannerUM.C } } +// region Preview @Preview(widthDp = 360, showBackground = true) @Preview(widthDp = 360, showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Composable -private fun Preview_TokenRowPromoBanner() { +private fun Preview_TokenRowPromoBanner( + @PreviewParameter(TangemTokenRowPromoBannerPreviewProvider::class) + promoType: TangemTokenRowUM.PromoBannerUM.Content.Type, +) { TangemThemePreviewRedesign { TokenRowPromoBanner( - promoBannerUM = TangemTokenRowPreviewData.promoBannerUM, - modifier = Modifier.fillMaxWidth(), + promoBannerUM = TangemTokenRowPreviewData.promoBannerUM.copy(type = promoType), + modifier = Modifier + .fillMaxWidth() + .background(TangemTheme.colors2.surface.level1), ) } -} \ No newline at end of file +} + +internal class TangemTokenRowPromoBannerPreviewProvider : + PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + TangemTokenRowUM.PromoBannerUM.Content.Type.Yield, + TangemTokenRowUM.PromoBannerUM.Content.Type.Staking, + ) +} +// endregion \ No newline at end of file diff --git a/core/ui/src/main/res/drawable/ic_yield_mode_default_24.xml b/core/ui/src/main/res/drawable/ic_yield_mode_default_24.xml new file mode 100644 index 0000000000..3237c3b395 --- /dev/null +++ b/core/ui/src/main/res/drawable/ic_yield_mode_default_24.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/core/ui/src/main/res/drawable/ic_yield_mode_mini_12.xml b/core/ui/src/main/res/drawable/ic_yield_mode_mini_12.xml new file mode 100644 index 0000000000..d07223975e --- /dev/null +++ b/core/ui/src/main/res/drawable/ic_yield_mode_mini_12.xml @@ -0,0 +1,9 @@ + + + diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/WalletTokenCurrencyItemConverter.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/WalletTokenCurrencyItemConverter.kt index ed2a68e455..c1794a9422 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/WalletTokenCurrencyItemConverter.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/WalletTokenCurrencyItemConverter.kt @@ -46,38 +46,38 @@ internal class WalletTokenCurrencyItemConverter( stakingApyMap = stakingAvailabilityMap, ) - override fun convert(currencyStatus: CryptoCurrencyStatus): TangemTokenRowUM { - val earnApyInfo = earnApyConverter.convert(currencyStatus) + override fun convert(value: CryptoCurrencyStatus): TangemTokenRowUM { + val earnApyInfo = earnApyConverter.convert(value) return TangemTokenRowUM.Content( - id = currencyStatus.currency.id.value, + id = value.currency.id.value, headIconUM = TangemIconUM.Currency( - currencyIconState = currencyToIconStateConverter.convert(currencyStatus), + currencyIconState = currencyToIconStateConverter.convert(value), ), - titleUM = toCurrencyRowTitle(currencyStatus, earnApyInfo), - subtitleUM = toCurrencyRowSubtitle(currencyStatus), - topEndContentUM = toCurrencyRowTopEnd(currencyStatus), - bottomEndContentUM = toCurrencyRowBottomEnd(currencyStatus), + titleUM = toCurrencyRowTitle(value, earnApyInfo), + subtitleUM = toCurrencyRowSubtitle(value), + topEndContentUM = toCurrencyRowTopEnd(value), + bottomEndContentUM = toCurrencyRowBottomEnd(value), promoBannerUM = toPromoBannerUM( accountId, - currencyStatus, + value, earnApyInfo.takeIf { shouldShowPromo }, ), - onItemClick = when (currencyStatus.value) { + onItemClick = when (value.value) { CryptoCurrencyStatus.Loading, is CryptoCurrencyStatus.MissedDerivation, -> null else -> { { - clickIntents.onTokenItemClick(accountId, currencyStatus) + clickIntents.onTokenItemClick(accountId, value) } } }, - onItemLongClick = when (currencyStatus.value) { + onItemLongClick = when (value.value) { CryptoCurrencyStatus.Loading -> null else -> { { - clickIntents.onTokenItemLongClick(accountId, currencyStatus) + clickIntents.onTokenItemLongClick(accountId, value) } } }, @@ -280,6 +280,8 @@ internal class WalletTokenCurrencyItemConverter( R.string.yield_module_main_screen_promo_banner_message, wrappedList(earnApyInfo.apy), ), + iconRes = R.drawable.ic_yield_mode_mini_12, + type = TangemTokenRowUM.PromoBannerUM.Content.Type.Yield, onPromoBannerClick = { clickIntents.onYieldPromoClicked(currency) clickIntents.onApyLabelClick(