Updated on 2026-08-14

This commit is contained in:
Tangem 2024-04-26 13:24:12 +05:00
parent 6acb6006fc
commit f5cb300604
4 changed files with 11 additions and 18 deletions

View file

@ -27,15 +27,9 @@ private const val NORMAL_ALPHA = 1f
* @param state cryptocurrency icon config
* @param modifier component modifier
* @param shouldDisplayNetwork specifies whether to display network badge
* @param shouldDisplayCustom specifies whether to display custom badge
*/
@Composable
fun TokenIcon(
state: TokenIconState,
modifier: Modifier = Modifier,
shouldDisplayNetwork: Boolean = true,
shouldDisplayCustom: Boolean = true,
) {
fun TokenIcon(state: TokenIconState, modifier: Modifier = Modifier, shouldDisplayNetwork: Boolean = true) {
BaseContainer(modifier = modifier) {
val iconModifier = Modifier
.align(Alignment.Center)
@ -52,7 +46,6 @@ fun TokenIcon(
icon = state,
modifier = iconModifier,
shouldDisplayNetwork = shouldDisplayNetwork,
shouldDisplayCustom = shouldDisplayCustom,
)
}
}
@ -83,7 +76,6 @@ private fun BoxScope.ContentIconContainer(
icon: TokenIconState,
modifier: Modifier = Modifier,
shouldDisplayNetwork: Boolean = true,
shouldDisplayCustom: Boolean = true,
) {
val networkBadgeOffset = TangemTheme.dimens.spacing4
val (alpha, colorFilter) = remember(icon.isGrayscale) {
@ -112,7 +104,7 @@ private fun BoxScope.ContentIconContainer(
)
}
if (icon.showCustomBadge && shouldDisplayCustom) {
if (icon.showCustomBadge) {
CustomBadge(modifier = Modifier.align(Alignment.BottomEnd))
}
}

View file

@ -60,24 +60,23 @@ sealed class TokenIconState {
* @property background The background color to be used for the icon.
* @property networkBadgeIconResId The drawable resource ID for the network badge.
* @property isGrayscale Specifies whether to show the icon in grayscale.
* @property showCustomBadge Specifies whether to show the custom token badge.
*/
data class CustomTokenIcon(
val tint: Color,
val background: Color,
@DrawableRes override val networkBadgeIconResId: Int,
override val isGrayscale: Boolean,
) : TokenIconState() {
override val showCustomBadge: Boolean = true,
) : TokenIconState()
override val showCustomBadge: Boolean = true
}
object Loading : TokenIconState() {
data object Loading : TokenIconState() {
override val isGrayscale: Boolean = false
override val showCustomBadge: Boolean = false
override val networkBadgeIconResId: Int? = null
}
object Locked : TokenIconState() {
data object Locked : TokenIconState() {
override val isGrayscale: Boolean = false
override val showCustomBadge: Boolean = false
override val networkBadgeIconResId: Int? = null

View file

@ -30,6 +30,7 @@ class CryptoCurrencyToIconStateConverter : Converter<CryptoCurrencyStatus, Token
coin = currency,
isUnreachable = value.value.isError,
forceGrayscale = forceGrayscale,
showCustomBadge = showCustomTokenBadge,
)
is CryptoCurrency.Token -> getIconStateForToken(
token = currency,
@ -50,13 +51,14 @@ class CryptoCurrencyToIconStateConverter : Converter<CryptoCurrencyStatus, Token
private fun getIconStateForCoin(
coin: CryptoCurrency.Coin,
isUnreachable: Boolean,
showCustomBadge: Boolean = true,
forceGrayscale: Boolean = false,
): TokenIconState.CoinIcon {
return TokenIconState.CoinIcon(
url = coin.iconUrl,
fallbackResId = coin.networkIconResId,
isGrayscale = forceGrayscale || coin.network.isTestnet || isUnreachable,
showCustomBadge = coin.isCustom,
showCustomBadge = coin.isCustom && showCustomBadge,
)
}
@ -76,6 +78,7 @@ class CryptoCurrencyToIconStateConverter : Converter<CryptoCurrencyStatus, Token
background = background,
networkBadgeIconResId = token.networkIconResId,
isGrayscale = grayScale,
showCustomBadge = showCustomBadge,
)
} else {
TokenIconState.TokenIcon(

View file

@ -96,7 +96,6 @@ private fun SendAmountCurrencyButton(button: SendAmountSegmentedButtonsConfig, i
TokenIcon(
state = button.iconState,
shouldDisplayNetwork = false,
shouldDisplayCustom = false,
modifier = Modifier
.size(TangemTheme.dimens.size18),
)