Updated on 2026-08-14

This commit is contained in:
Tangem 2026-04-20 19:03:25 +04:00
parent 91942930d6
commit 6b75b48f1e
61 changed files with 193 additions and 436 deletions

View file

@ -33,6 +33,7 @@ dependencies {
implementation(projects.core.utils)
implementation(projects.core.res)
implementation(projects.libs.crypto)
implementation(projects.libs.blockchainSdk)
/** Project - Domain */
implementation(projects.domain.appCurrency.models)

View file

@ -6,7 +6,7 @@ import com.tangem.common.ui.amountScreen.converters.field.AmountFieldConverter
import com.tangem.common.ui.amountScreen.models.AmountParameters
import com.tangem.common.ui.amountScreen.models.AmountState
import com.tangem.common.ui.amountScreen.models.EnterAmountBoundary
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.combinedReference
import com.tangem.core.ui.extensions.orMaskWithStars

View file

@ -1,10 +1,11 @@
package com.tangem.core.ui.components.currency.icon
package com.tangem.common.ui.components.currency.icon
import androidx.annotation.DrawableRes
import androidx.compose.ui.graphics.Color
import com.tangem.common.ui.extensions.networkIconResId
import com.tangem.core.ui.R
import com.tangem.core.ui.components.currency.icon.CurrencyIconState
import com.tangem.core.ui.extensions.getTintForTokenIcon
import com.tangem.core.ui.extensions.networkIconResId
import com.tangem.core.ui.extensions.tryGetBackgroundForTokenIcon
import com.tangem.domain.models.currency.CryptoCurrency

View file

@ -1,8 +1,8 @@
package com.tangem.core.ui.components.currency.icon.converter
package com.tangem.common.ui.components.currency.icon.converter
import com.tangem.common.ui.extensions.networkIconResId
import com.tangem.core.ui.components.currency.icon.CurrencyIconState
import com.tangem.core.ui.extensions.getTintForTokenIcon
import com.tangem.core.ui.extensions.networkIconResId
import com.tangem.core.ui.extensions.tryGetBackgroundForTokenIcon
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
@ -91,7 +91,7 @@ class CryptoCurrencyToIconStateConverter(
isGrayscale = isGrayscale,
fallbackTint = tint,
fallbackBackground = background,
shouldShowCustomBadge = token.isCustom && showCustomBadge, // `true` for tokens with custom derivation
shouldShowCustomBadge = token.isCustom && showCustomBadge,
)
}
}

View file

@ -0,0 +1,62 @@
package com.tangem.common.ui.extensions
import androidx.annotation.DrawableRes
import com.tangem.blockchainsdk.utils.toBlockchain
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.network.Network
/**
* Retrieves the active icon drawable resource for the network of a [CryptoCurrency].
*/
@get:DrawableRes
val CryptoCurrency.networkIconResId: Int
get() = network.iconResId
/**
* Retrieves the greyed-out icon drawable resource for the network of a [CryptoCurrency].
*/
@get:DrawableRes
val CryptoCurrency.networkGreyedOutIconResId: Int
get() = network.greyedOutIconResId
/**
* Retrieves the active icon drawable resource for this [Network].
*/
@get:DrawableRes
val Network.iconResId: Int
get() = id.iconResId
/**
* Retrieves the greyed-out icon drawable resource for this [Network].
*/
@get:DrawableRes
val Network.greyedOutIconResId: Int
get() = id.greyedOutIconResId
/**
* Retrieves the active icon drawable resource for this [Network.ID].
*/
@get:DrawableRes
val Network.ID.iconResId: Int
get() = rawId.iconResId
/**
* Retrieves the greyed-out icon drawable resource for this [Network.ID].
*/
@get:DrawableRes
val Network.ID.greyedOutIconResId: Int
get() = rawId.greyedOutIconResId
/**
* Retrieves the active icon drawable resource for this [Network.RawID].
*/
@get:DrawableRes
val Network.RawID.iconResId: Int
get() = getActiveIconRes(toBlockchain())
/**
* Retrieves the greyed-out icon drawable resource for this [Network.RawID].
*/
@get:DrawableRes
val Network.RawID.greyedOutIconResId: Int
get() = getGreyedOutIconRes(toBlockchain())

View file

@ -4,7 +4,7 @@ import com.tangem.blockchain.common.BlockchainSdkError
import com.tangem.common.ui.R
import com.tangem.common.ui.amountScreen.models.AmountFieldModel
import com.tangem.common.ui.amountScreen.utils.getFiatString
import com.tangem.core.ui.extensions.networkIconResId
import com.tangem.common.ui.extensions.networkIconResId
import com.tangem.core.ui.format.bigdecimal.crypto
import com.tangem.core.ui.format.bigdecimal.format
import com.tangem.core.ui.format.bigdecimal.uncapped

View file

@ -4,7 +4,7 @@ import com.tangem.common.getTotalCryptoAmount
import com.tangem.common.getTotalFiatAmount
import com.tangem.common.ui.R
import com.tangem.core.ui.components.currency.icon.CurrencyIconState
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.components.icons.IconTint
import com.tangem.core.ui.components.marketprice.PriceChangeType
import com.tangem.core.ui.components.marketprice.utils.PriceChangeConverter

View file

@ -1,304 +0,0 @@
package com.tangem.core.ui.extensions
import androidx.annotation.DrawableRes
import com.tangem.core.ui.R
@Suppress("ComplexMethod", "LongMethod")
@DrawableRes
fun getActiveIconRes(blockchainId: String): Int {
return when (blockchainId) {
"ARBITRUM-ONE", "ARBITRUM/test" -> R.drawable.img_arbitrum_22
"BTC", "BTC/test" -> R.drawable.img_btc_22
"BCH" -> R.drawable.img_btc_cash_22
"LTC" -> R.drawable.img_litecoin_22
"ETH", "ETH/test" -> R.drawable.img_eth_22
"ETC", "ETC/test" -> R.drawable.img_eth_classic_22
"RSK" -> R.drawable.img_rsk_22
"CARDANO", "CARDANO-S" -> R.drawable.img_cardano_22
"XTZ" -> R.drawable.img_tezos_22
"XRP" -> R.drawable.img_xrp_22
"XLM", "XLM/test" -> R.drawable.img_stellar_22
"AVALANCHE", "AVALANCHE/test" -> R.drawable.img_avalanche_22
"POLYGON", "POLYGON/test" -> R.drawable.img_polygon_22
"SOLANA", "SOLANA/test" -> R.drawable.img_solana_22
"FTM", "FTM/test" -> R.drawable.img_fantom_22
"BSC", "BSC/test", "BINANCE", "BINANCE/test" -> R.drawable.img_bsc_22
"DOGE" -> R.drawable.img_dogecoin_22
"TRON", "TRON/test" -> R.drawable.img_tron_22
"GNO" -> R.drawable.img_gnosis_22
"ETH-Pow", "ETH-Pow/test" -> R.drawable.img_eth_pow_22
"ETH-Fair", "dischain" -> R.drawable.img_dischain_22
"Polkadot", "Polkadot/test" -> R.drawable.img_polkadot_22
"Kusama" -> R.drawable.img_kusama_22
"OPTIMISM", "OPTIMISM/test" -> R.drawable.img_optimism_22
"DASH" -> R.drawable.img_dash_22
"KAS", "KAS/test" -> R.drawable.img_kaspa_22
"The-Open-Network", "The-Open-Network/test" -> R.drawable.img_ton_22
"KAVA", "KAVA/test" -> R.drawable.img_kava_22
"ravencoin", "ravencoin/test" -> R.drawable.img_ravencoin_22
"cosmos", "cosmos/test" -> R.drawable.img_cosmos_22
"terra", "terra-luna" -> R.drawable.img_terra_22
"terra-2", "terra-luna-2" -> R.drawable.img_terra2_22
"cronos" -> R.drawable.img_cronos_22
"TELOS", "TELOS/test" -> R.drawable.img_telos_22
"aleph-zero", "aleph-zero/test" -> R.drawable.img_azero_22
"octaspace", "octaspace/test" -> R.drawable.img_octaspace_22
"chia", "chia/test" -> R.drawable.img_chia_22
"NEAR", "NEAR/test" -> R.drawable.img_near_22
"decimal", "decimal/test" -> R.drawable.img_decimal_22
"xdc", "xdc/test" -> R.drawable.img_xdc_22
"vechain", "vechain/test" -> R.drawable.img_vechain_22
"aptos", "aptos/test" -> R.drawable.img_aptos_22
"shibarium", "shibarium/test" -> R.drawable.img_shibarium_22
"algorand", "algorand/test" -> R.drawable.img_algorand_22
"hedera", "hedera/test" -> R.drawable.img_hedera_22
"playa3ull" -> R.drawable.img_playa3ull_22
"DUC" -> R.drawable.img_ducatus_22
"aurora", "aurora/test" -> R.drawable.img_aurora_22
"areon", "areon/test" -> R.drawable.img_areon_22
"pls", "pls/test" -> R.drawable.img_pls_22
"zkSyncEra", "zkSyncEra/test" -> R.drawable.img_zksync_22
"moonbeam", "moonbeam/test" -> R.drawable.img_moonbeam_22
"manta-pacific", "manta/test" -> R.drawable.img_manta_22
"polygonZkEVM", "polygonZkEVM/test" -> R.drawable.img_polygon_22
"moonriver", "moonriver/test" -> R.drawable.img_moonriver_22
"mantle", "mantle/test" -> R.drawable.img_mantle_22
"flare", "flare/test" -> R.drawable.img_flare_22
"taraxa", "taraxa/test" -> R.drawable.img_taraxa_22
"radiant" -> R.drawable.img_radiant_22
"base" -> R.drawable.img_base_22
"joystream" -> R.drawable.img_joystream_22
"koinos", "koinos/test" -> R.drawable.img_koinos_22
"bittensor" -> R.drawable.img_bittensor_22
"blast", "blast/test" -> R.drawable.img_blast_22
"filecoin" -> R.drawable.img_filecoin_22
"cyber", "cyber/test" -> R.drawable.img_cyber_22
"sei", "sei/test" -> R.drawable.img_sei_22
"internet-computer" -> R.drawable.img_icp_22
"sui", "sui/test" -> R.drawable.img_sui_22
"energy-web-chain", "energy-web-chain/test" -> R.drawable.img_energy_web_22
"energy-web-x", "energy-web-x/test" -> R.drawable.img_energy_web_22
"core", "core/test" -> R.drawable.img_core_22
"casper", "casper/test" -> R.drawable.img_casper_22
"xodex" -> R.drawable.img_xodex_22
"canxium" -> R.drawable.img_canxium_22
"chiliz", "chiliz/test" -> R.drawable.img_chiliz_22
"alephium", "alephium/test" -> R.drawable.img_alephium_22
"clore-ai" -> R.drawable.img_clore_22
"fact0rn" -> R.drawable.img_fact0rn_22
"odyssey", "odyssey/test" -> R.drawable.img_odyssey_chain_22
"bitrock", "bitrock/test" -> R.drawable.img_bitrock_22
"sonic", "sonic/test" -> R.drawable.img_sonic_22
"apechain", "apechain/test" -> R.drawable.img_apecoin_22
"scroll", "scroll/test" -> R.drawable.img_scroll_22
"zklink", "zklink/test" -> R.drawable.img_zklink_22
"vanar-chain", "vanar-chain/test" -> R.drawable.img_vanar_22
"pepecoin", "pepecoin/test" -> R.drawable.img_pepecoin_22
"hyperliquid", "hyperliquid/test" -> R.drawable.img_hyperliquid_22
"quai", "quai/test" -> R.drawable.img_quai_22
"linea", "linea/test" -> R.drawable.img_linea_22
"arbitrum-nova" -> R.drawable.img_arbitrum_nova_22
"plasma", "plasma/test" -> R.drawable.img_plasma_22
"monad", "monad/test" -> R.drawable.img_monad_22
else -> R.drawable.ic_alert_24
}
}
@Suppress("ComplexMethod", "LongMethod")
@DrawableRes
fun getActiveIconResByCoinId(coinId: String): Int {
return when (coinId) {
"binancecoin" -> R.drawable.img_bsc_22
"bitcoin" -> R.drawable.img_btc_22
"bitcoin-cash" -> R.drawable.img_btc_cash_22
"ethereum" -> R.drawable.img_eth_22
"arbitrum-one" -> R.drawable.img_arbitrum_22
"optimistic-ethereum" -> R.drawable.img_optimism_22
"ethereum-classic" -> R.drawable.img_eth_classic_22
"stellar" -> R.drawable.img_stellar_22
"cardano" -> R.drawable.img_cardano_22
"matic-network", "polygon-ecosystem-token" -> R.drawable.img_polygon_22
"avalanche-2" -> R.drawable.img_avalanche_22
"solana" -> R.drawable.img_solana_22
"fantom" -> R.drawable.img_fantom_22
"tron" -> R.drawable.img_tron_22
"polkadot" -> R.drawable.img_polkadot_22
"litecoin" -> R.drawable.img_litecoin_22
"rootstock" -> R.drawable.img_rsk_22
"tezos" -> R.drawable.img_tezos_22
"ripple" -> R.drawable.img_xrp_22
"dogecoin" -> R.drawable.img_dogecoin_22
"xdai" -> R.drawable.img_gnosis_22
"ethereum-pow-iou" -> R.drawable.img_eth_pow_22
"ethereumfair", "dischain" -> R.drawable.img_dischain_22
"kusama" -> R.drawable.img_kusama_22
"dash" -> R.drawable.img_dash_22
"kaspa", "kaspa/test" -> R.drawable.img_kaspa_22
"ton" -> R.drawable.img_ton_22
"kava" -> R.drawable.img_kava_22
"ravencoin" -> R.drawable.img_ravencoin_22
"terra" -> R.drawable.img_terra_22
"terra-2" -> R.drawable.img_terra2_22
"telos" -> R.drawable.img_telos_22
"octaspace" -> R.drawable.img_octaspace_22
"chia" -> R.drawable.img_chia_22
"near" -> R.drawable.img_near_22
"decimal" -> R.drawable.img_decimal_22
"xdce-crowd-sale" -> R.drawable.img_xdc_22
"vechain" -> R.drawable.img_vechain_22
"aptos" -> R.drawable.img_aptos_22
"shibarium" -> R.drawable.img_shibarium_22
"algorand" -> R.drawable.img_algorand_22
"hedera-hashgraph" -> R.drawable.img_hedera_22
"playa3ull-games-2" -> R.drawable.img_playa3ull_22
"ducatus" -> R.drawable.img_ducatus_22
"aurora-near" -> R.drawable.img_aurora_22
"areon" -> R.drawable.img_areon_22
"pls" -> R.drawable.img_pls_22
"zksync-ethereum" -> R.drawable.img_zksync_22
"moonbeam" -> R.drawable.img_moonbeam_22
"manta-pacific" -> R.drawable.img_manta_22
"polygon-zkevm-ethereum" -> R.drawable.img_polygon_22
"moonriver" -> R.drawable.img_moonriver_22
"mantle" -> R.drawable.img_mantle_22
"flare-networks" -> R.drawable.img_flare_22
"taraxa" -> R.drawable.img_taraxa_22
"radiant" -> R.drawable.img_radiant_22
"base" -> R.drawable.img_base_22
"joystream" -> R.drawable.img_joystream_22
"koinos", "koinos/test" -> R.drawable.img_koinos_22
"bittensor" -> R.drawable.img_bittensor_22
"blast", "blast/test" -> R.drawable.img_blast_22
"filecoin" -> R.drawable.img_filecoin_22
"cyber", "cyber/test" -> R.drawable.img_cyber_22
"sei", "sei/test" -> R.drawable.img_sei_22
"internet-computer" -> R.drawable.img_icp_22
"sui", "sui/test" -> R.drawable.img_sui_22
"energy-web-chain", "energy-web-chain/test" -> R.drawable.img_energy_web_22
"energy-web-x", "energy-web-x/test" -> R.drawable.img_energy_web_22
"core", "core/test" -> R.drawable.img_core_22
"casper-network" -> R.drawable.img_casper_22
"xodex" -> R.drawable.img_xodex_22
"canxium" -> R.drawable.img_canxium_22
"chiliz", "chiliz/test" -> R.drawable.img_chiliz_22
"alephium", "alephium/test" -> R.drawable.img_alephium_22
"clore-ai" -> R.drawable.img_clore_22
"fact0rn" -> R.drawable.img_fact0rn_22
"odyssey", "odyssey/test" -> R.drawable.img_odyssey_chain_22
"bitrock", "bitrock/test" -> R.drawable.img_bitrock_22
"sonic", "sonic/test" -> R.drawable.img_sonic_22
"apechain", "apechain/test" -> R.drawable.img_apecoin_22
"scroll", "scroll/test" -> R.drawable.img_scroll_22
"zklink", "zklink/test" -> R.drawable.img_zklink_22
"vanar-chain", "vanar-chain/test" -> R.drawable.img_vanar_22
"pepecoin-network", "pepecoin-network/test" -> R.drawable.img_pepecoin_22
"hyperliquid", "hyperliquid/test" -> R.drawable.img_hyperliquid_22
"quai", "quai/test" -> R.drawable.img_quai_22
"linea", "linea/test" -> R.drawable.img_linea_22
"arbitrum-nova" -> R.drawable.img_arbitrum_nova_22
"plasma", "plasma/test" -> R.drawable.img_plasma_22
"monad", "monad/test" -> R.drawable.img_monad_22
else -> R.drawable.ic_alert_24
}
}
@Suppress("ComplexMethod", "LongMethod")
@DrawableRes
fun getGreyedOutIconRes(blockchainId: String): Int {
return when (blockchainId) {
"ARBITRUM-ONE", "ARBITRUM/test" -> R.drawable.ic_arbitrum_22
"BTC", "BTC/test" -> R.drawable.ic_bitcoin_16
"BCH" -> R.drawable.ic_bitcoin_cash_16
"LTC" -> R.drawable.ic_litecoin_22
"ETH", "ETH/test" -> R.drawable.ic_eth_16
"ETC", "ETC/test" -> R.drawable.ic_eth_16
"RSK" -> R.drawable.ic_rsk_16
"CARDANO", "CARDANO-S" -> R.drawable.ic_cardano_16
"XTZ" -> R.drawable.ic_tezos_16
"XRP" -> R.drawable.ic_xrp_22
"XLM", "XLM/test" -> R.drawable.ic_stellar_16
"AVALANCHE", "AVALANCHE/test" -> R.drawable.ic_avalanche_22
"POLYGON", "POLYGON/test" -> R.drawable.ic_polygon_22
"SOLANA", "SOLANA/test" -> R.drawable.ic_solana_16
"FTM", "FTM/test" -> R.drawable.ic_fantom_22
"BSC", "BSC/test", "BINANCE", "BINANCE/test" -> R.drawable.ic_bsc_16
"DOGE" -> R.drawable.ic_dogecoin_16
"TRON", "TRON/test" -> R.drawable.ic_tron_22
"GNO" -> R.drawable.ic_gnosis_22
"ETH-Pow", "ETH-Pow/test" -> R.drawable.ic_ethereumpow_22
"ETH-Fair", "dischain" -> R.drawable.ic_dischain_22
"Polkadot", "Polkadot/test" -> R.drawable.ic_polkadot_16
"Kusama" -> R.drawable.ic_kusama_16
"OPTIMISM", "OPTIMISM/test" -> R.drawable.ic_optimism_22
"DASH" -> R.drawable.ic_dash_22
"KAS", "KAS/test" -> R.drawable.ic_kaspa_22
"The-Open-Network", "The-Open-Network/test" -> R.drawable.ic_ton_22
"KAVA", "KAVA/test" -> R.drawable.ic_kava_22
"ravencoin", "ravencoin/test" -> R.drawable.ic_ravencoin_22
"cosmos", "cosmos/test" -> R.drawable.ic_cosmos_22
"terra", "terra-luna" -> R.drawable.ic_terra_22
"terra-2", "terra-luna-2" -> R.drawable.ic_terra2_22
"cronos" -> R.drawable.ic_cronos_22
"TELOS", "TELOS/test" -> R.drawable.ic_telos_22
"aleph-zero", "aleph-zero/test" -> R.drawable.ic_azero_22
"octaspace", "octaspace/test" -> R.drawable.ic_octaspace_22
"chia", "chia/test" -> R.drawable.ic_chia_22
"NEAR", "NEAR/test" -> R.drawable.ic_near_22
"decimal", "decimal/test" -> R.drawable.ic_decimal_22
"xdc", "xdc/test" -> R.drawable.ic_xdc_22
"vechain", "vechain/test" -> R.drawable.ic_vechain_22
"aptos", "aptos/test" -> R.drawable.ic_aptos_22
"shibarium", "shibarium/test" -> R.drawable.ic_shibarium_22
"algorand", "algorand/test" -> R.drawable.ic_algorand_22
"hedera", "hedera/test" -> R.drawable.ic_hedera_22
"playa3ull" -> R.drawable.ic_playa3ull_22
"DUC" -> R.drawable.ic_ducatus_22
"aurora", "aurora/test" -> R.drawable.ic_aurora_22
"areon", "areon/test" -> R.drawable.ic_areon_22
"pls", "pls/test" -> R.drawable.ic_pls_22
"zkSyncEra", "zkSyncEra/test" -> R.drawable.ic_zksync_22
"moonbeam", "moonbeam/test" -> R.drawable.ic_moonbeam_22
"manta-pacific", "manta/test" -> R.drawable.ic_manta_22
"polygonZkEVM", "polygonZkEVM/test" -> R.drawable.ic_polygon_22
"moonriver", "moonriver/test" -> R.drawable.ic_moonriver_22
"mantle", "mantle/test" -> R.drawable.ic_mantle_22
"flare", "flare/test" -> R.drawable.ic_flare_22
"taraxa", "taraxa/test" -> R.drawable.ic_taraxa_22
"radiant" -> R.drawable.ic_radiant_22
"base", "base/test" -> R.drawable.ic_base_22
"joystream" -> R.drawable.ic_joystream_22
"koinos", "koinos/test" -> R.drawable.ic_koinos_22
"bittensor" -> R.drawable.ic_bittensor_22
"blast", "blast/test" -> R.drawable.ic_blast_22
"filecoin" -> R.drawable.ic_filecoin_22
"cyber", "cyber/test" -> R.drawable.ic_cyber_22
"sei", "sei/test" -> R.drawable.ic_sei_22
"internet-computer" -> R.drawable.ic_icp_22
"sui", "sui/test" -> R.drawable.ic_sui_22
"energy-web-chain", "energy-web-chain/test" -> R.drawable.ic_energy_web_22
"energy-web-x", "energy-web-x/test" -> R.drawable.ic_energy_web_22
"core", "core/test" -> R.drawable.ic_core_22
"casper", "casper/test" -> R.drawable.ic_casper_22
"xodex" -> R.drawable.ic_xodex_22
"canxium" -> R.drawable.ic_canxium_22
"chiliz", "chiliz/test" -> R.drawable.ic_chiliz_22
"alephium", "alephium/test" -> R.drawable.ic_alephium_22
"clore-ai" -> R.drawable.ic_clore_22
"fact0rn" -> R.drawable.ic_fact0rn_22
"odyssey", "odyssey/test" -> R.drawable.ic_odyssey_chain_22
"bitrock", "bitrock/test" -> R.drawable.ic_bitrock_22
"sonic", "sonic/test" -> R.drawable.ic_sonic_22
"apechain", "apechain/test" -> R.drawable.ic_apecoin_22
"scroll", "scroll/test" -> R.drawable.ic_scroll_22
"zklink", "zklink/test" -> R.drawable.ic_zklink_22
"vanar-chain", "vanar-chain/test" -> R.drawable.ic_vanar_22
"pepecoin", "pepecoin/test" -> R.drawable.ic_pepecoin_22
"hyperliquid", "hyperliquid/test" -> R.drawable.ic_hyperliquid_22
"quai", "quai/test" -> R.drawable.ic_quai_22
"linea", "linea/test" -> R.drawable.ic_linea_22
"arbitrum-nova" -> R.drawable.ic_arbitrum_nova_22
"plasma", "plasma/test" -> R.drawable.ic_plasma_22
"monad", "monad/test" -> R.drawable.ic_monad_22
else -> R.drawable.ic_alert_24
}
}

View file

@ -1,34 +1,15 @@
package com.tangem.core.ui.extensions
import androidx.annotation.DrawableRes
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.luminance
import androidx.core.graphics.toColorInt
import com.tangem.core.ui.res.TangemColorPalette
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.network.Network
private const val LIGHT_LUMINANCE = 0.5f
private const val COLOR_HEX_START_INDEX = 2
private const val COLOR_HEX_END_INDEX = 7
/**
* Retrieves the resource ID for the network of a [CryptoCurrency].
*
* @return Drawable resource ID for the network.
*/
@get:DrawableRes
val CryptoCurrency.networkIconResId: Int
get() = network.iconResId
/**
* Retrieves the resource ID.
*
* @return Drawable resource ID for the network.
*/
val Network.iconResId: Int
get() = getActiveIconRes(rawId)
/**
* Tries to extract a background color from the contract address of a token.
*

View file

@ -32,6 +32,7 @@ dependencies {
implementation(projects.core.datasource)
implementation(projects.core.utils)
implementation(projects.core.ui)
implementation(projects.common.ui)
implementation(projects.libs.blockchainSdk)
// endregion

View file

@ -2,7 +2,7 @@ package com.tangem.data.notifications.converters
import com.tangem.blockchain.common.Blockchain
import com.tangem.blockchainsdk.utils.fromNetworkId
import com.tangem.core.ui.extensions.getActiveIconRes
import com.tangem.common.ui.extensions.getActiveIconRes
import com.tangem.datasource.api.tangemTech.models.CryptoNetworkResponse
import com.tangem.domain.notifications.models.NotificationsEligibleNetwork
@ -13,7 +13,7 @@ internal object NotificationsEligibleNetworkConverter {
id = value.networkId,
name = blockchain.fullName,
symbol = blockchain.currency,
icon = getActiveIconRes(blockchain.id),
icon = getActiveIconRes(blockchain),
)
}
}

View file

@ -1,9 +1,10 @@
package com.tangem.features.commonfeatures.impl.addtoportfolio.converter
import com.tangem.common.ui.extensions.greyedOutIconResId
import com.tangem.common.ui.extensions.iconResId
import com.tangem.core.ui.components.rows.model.BlockchainRowUM
import com.tangem.core.ui.extensions.getActiveIconRes
import com.tangem.core.ui.extensions.getGreyedOutIconRes
import com.tangem.domain.markets.TokenMarketInfo
import com.tangem.domain.models.network.Network
import com.tangem.lib.crypto.BlockchainUtils
import com.tangem.utils.converter.Converter
@ -27,6 +28,7 @@ internal class BlockchainRowUMConverter(
val isMainNetwork = network.contractAddress == null
val isEnabled = !alreadyAddedNetworks.contains(network.networkId)
val networkRawId = Network.RawID(value = network.networkId)
return BlockchainRowUM(
id = network.networkId,
@ -34,12 +36,12 @@ internal class BlockchainRowUMConverter(
type = getNetworkType(network, blockchainInfo),
iconResId = if (isEnabled) {
if (isSelected) {
getActiveIconRes(blockchainInfo.blockchainId)
networkRawId.iconResId
} else {
getGreyedOutIconRes(blockchainInfo.blockchainId)
networkRawId.greyedOutIconResId
}
} else {
getGreyedOutIconRes(blockchainInfo.blockchainId)
networkRawId.greyedOutIconResId
},
isMainNetwork = isMainNetwork,
isSelected = isSelected,

View file

@ -7,10 +7,10 @@ import com.tangem.common.ui.account.toUM
import com.tangem.common.ui.addtoken.AddTokenUM
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.components.token.state.TokenItemState
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.iconResId
import com.tangem.common.ui.extensions.iconResId
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.domain.models.account.AccountStatus.*

View file

@ -6,7 +6,7 @@ import com.tangem.common.ui.markets.action.TokenActionsHandler
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.components.token.state.TokenItemState
import com.tangem.core.ui.extensions.stringReference
import com.tangem.features.commonfeatures.impl.addtoportfolio.TokenActionsComponent

View file

@ -1,6 +1,6 @@
package com.tangem.features.feed.model.converter
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.wrappedList
import com.tangem.core.ui.format.bigdecimal.format

View file

@ -2,7 +2,7 @@ package com.tangem.features.feed.model.earn.filters.state
import com.tangem.blockchain.common.Blockchain
import com.tangem.blockchainsdk.utils.fromNetworkId
import com.tangem.core.ui.extensions.getActiveIconRes
import com.tangem.common.ui.extensions.getActiveIconRes
import com.tangem.domain.earn.model.EarnFilterNetwork
import com.tangem.features.feed.ui.earn.state.EarnFilterNetworkUM
import com.tangem.utils.converter.Converter
@ -22,7 +22,7 @@ internal class EarnFilterNetworkConverter : Converter<EarnFilterNetwork, EarnFil
id = value.id,
text = value.fullName,
symbol = value.symbol,
iconRes = getActiveIconRes(Blockchain.fromNetworkId(value.id)?.id.orEmpty()),
iconRes = getActiveIconRes(Blockchain.fromNetworkId(value.id) ?: Blockchain.Unknown),
isSelected = value.isSelected,
)
}

View file

@ -2,11 +2,11 @@ package com.tangem.features.feed.model.search.converter
import com.tangem.common.ui.markets.toMarketsListItemPriceAnnotated
import com.tangem.core.ui.components.currency.icon.CurrencyIconState
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.components.marketprice.PriceChangeState
import com.tangem.core.ui.components.marketprice.PriceChangeType
import com.tangem.core.ui.ds.image.TangemIconUM
import com.tangem.core.ui.extensions.networkIconResId
import com.tangem.common.ui.extensions.networkIconResId
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.format.bigdecimal.crypto
import com.tangem.core.ui.format.bigdecimal.fiat

View file

@ -1,6 +1,6 @@
package com.tangem.features.feed.model.search.state.transformers
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.components.marketprice.PriceChangeState
import com.tangem.core.ui.components.marketprice.PriceChangeType
import com.tangem.core.ui.ds.image.TangemIconUM

View file

@ -1,8 +1,8 @@
package com.tangem.features.managetokens.utils.ui
import androidx.annotation.DrawableRes
import com.tangem.core.ui.extensions.getActiveIconRes
import com.tangem.core.ui.extensions.getGreyedOutIconRes
import com.tangem.common.ui.extensions.greyedOutIconResId
import com.tangem.common.ui.extensions.iconResId
import com.tangem.domain.models.network.Network
import com.tangem.features.managetokens.entity.item.CurrencyNetworkUM
@ -15,7 +15,7 @@ internal fun CurrencyNetworkUM.select(isSelected: Boolean): CurrencyNetworkUM {
@DrawableRes
internal fun Network.ID.getIconRes(isColored: Boolean): Int = if (isColored) {
getActiveIconRes(rawId.value)
this.iconResId
} else {
getGreyedOutIconRes(rawId.value)
this.greyedOutIconResId
}

View file

@ -3,9 +3,13 @@ package com.tangem.features.nft.collections.entity.transformer
import com.tangem.common.ui.account.AccountTitleUM
import com.tangem.common.ui.account.CryptoPortfolioIconConverter
import com.tangem.common.ui.account.toUM
import com.tangem.common.ui.extensions.iconResId
import com.tangem.core.ui.components.fields.entity.SearchBarUM
import com.tangem.core.ui.components.notifications.NotificationConfig
import com.tangem.core.ui.extensions.*
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.extensions.wrappedList
import com.tangem.core.ui.format.bigdecimal.crypto
import com.tangem.core.ui.format.bigdecimal.format
import com.tangem.domain.models.account.Account
@ -118,24 +122,24 @@ internal class UpdateDataStateTransformer(
.map { it.collections.orEmpty().transform(this) }
.flatten()
private fun List<NFTCollection>.transform(state: NFTCollectionsStateUM): ImmutableList<NFTCollectionUM> = map {
NFTCollectionUM(
id = it.collectionIdProvider(),
networkIconId = getActiveIconRes(it.network.rawId),
name = it.name.orEmpty(),
description = TextReference.PluralRes(
R.plurals.nft_collections_count,
it.count,
wrappedList(it.count),
),
logoUrl = it.logoUrl,
assets = it.transformAssets(),
onExpandClick = {
onExpandCollectionClick(it)
},
isExpanded = it.isExpanded(state),
)
}.toPersistentList()
private fun List<NFTCollection>.transform(state: NFTCollectionsStateUM): ImmutableList<NFTCollectionUM> {
return map { collection ->
NFTCollectionUM(
id = collection.collectionIdProvider(),
networkIconId = collection.network.iconResId,
name = collection.name.orEmpty(),
description = TextReference.PluralRes(
R.plurals.nft_collections_count,
collection.count,
wrappedList(collection.count),
),
logoUrl = collection.logoUrl,
assets = collection.transformAssets(),
onExpandClick = { onExpandCollectionClick(collection) },
isExpanded = collection.isExpanded(state),
)
}.toPersistentList()
}
private fun transformNotifications(): ImmutableList<NFTCollectionsWarningUM> = buildList {
val nftCollections = walletNFTCollections?.flattenCollections

View file

@ -6,7 +6,7 @@ import com.tangem.common.ui.account.AccountTitleUM
import com.tangem.common.ui.account.CryptoPortfolioIconConverter
import com.tangem.common.ui.account.toUM
import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.ui.extensions.getActiveIconRes
import com.tangem.common.ui.extensions.iconResId
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.features.nft.component.NFTDetailsBlockComponent
@ -39,7 +39,7 @@ class DefaultNFTDetailsBlockComponent @AssistedInject constructor(
AccountTitleUM.Text(params.walletTitle)
},
isSuccessScreen = params.isSuccessScreen,
networkIconRes = getActiveIconRes(params.nftAsset.network.rawId),
networkIconRes = params.nftAsset.network.iconResId,
)
}

View file

@ -2,7 +2,7 @@ package com.tangem.features.nft.receive.entity.transformer
import com.tangem.core.ui.components.currency.icon.CurrencyIconState
import com.tangem.core.ui.components.rows.model.ChainRowUM
import com.tangem.core.ui.extensions.getActiveIconRes
import com.tangem.common.ui.extensions.iconResId
import com.tangem.domain.models.network.Network
import com.tangem.domain.nft.models.NFTNetworks
import com.tangem.features.nft.receive.entity.NFTNetworkUM
@ -41,7 +41,7 @@ internal class UpdateDataStateTransformer(
type = "",
icon = CurrencyIconState.CoinIcon(
url = null,
fallbackResId = getActiveIconRes(rawId),
fallbackResId = iconResId,
isGrayscale = !enabled,
shouldShowCustomBadge = custom,
),

View file

@ -1,6 +1,6 @@
package com.tangem.features.onramp.hottokens.converter
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.components.marketprice.PriceChangeType
import com.tangem.core.ui.components.marketprice.utils.PriceChangeConverter
import com.tangem.core.ui.components.token.state.TokenItemState

View file

@ -7,10 +7,10 @@ import com.tangem.common.ui.account.toUM
import com.tangem.common.ui.addtoken.AddTokenUM
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.components.token.state.TokenItemState
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.iconResId
import com.tangem.common.ui.extensions.iconResId
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.domain.account.status.usecase.IsAccountsModeEnabledUseCase

View file

@ -4,7 +4,7 @@ import com.tangem.common.getTotalCryptoAmount
import com.tangem.common.getTotalFiatAmount
import com.tangem.common.ui.tokens.TokenItemStateConverter
import com.tangem.common.ui.tokens.TokenItemStateConverter.Companion.isFlickering
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.components.token.state.TokenItemState
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.stringReference

View file

@ -6,7 +6,7 @@ import com.tangem.common.ui.account.CryptoPortfolioIconConverter
import com.tangem.common.ui.account.PortfolioSelectUM
import com.tangem.common.ui.account.toUM
import com.tangem.common.ui.tokens.TokenItemStateConverter.Companion.isFlickering
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.components.token.state.TokenItemState
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.format.bigdecimal.crypto

View file

@ -11,7 +11,7 @@ import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.common.ui.account.AccountIconItemStateConverter
import com.tangem.core.ui.components.account.AccountIconSize
import com.tangem.core.ui.components.currency.icon.CurrencyIconState
import com.tangem.core.ui.components.currency.icon.CurrencyIconStateBuilder
import com.tangem.common.ui.components.currency.icon.CurrencyIconStateBuilder
import com.tangem.core.ui.components.fields.entity.SearchBarUM
import com.tangem.core.ui.components.token.state.TokenItemState
import com.tangem.core.ui.extensions.resourceReference

View file

@ -15,7 +15,7 @@ import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.extensions.WrappedList
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase

View file

@ -5,7 +5,7 @@ import com.tangem.common.ui.amountScreen.converters.AmountAccountConverter
import com.tangem.common.ui.amountScreen.converters.AmountStateConverter
import com.tangem.common.ui.amountScreen.models.AmountParameters
import com.tangem.common.ui.amountScreen.models.EnterAmountBoundary
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.domain.appcurrency.model.AppCurrency

View file

@ -8,7 +8,7 @@ import com.tangem.common.ui.amountScreen.models.AmountParameters
import com.tangem.common.ui.amountScreen.models.AmountState
import com.tangem.common.ui.amountScreen.models.EnterAmountBoundary
import com.tangem.core.ui.components.containers.pullToRefresh.PullToRefreshConfig
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.components.list.RoundedListWithDividersItemData
import com.tangem.core.ui.extensions.*
import com.tangem.core.ui.format.bigdecimal.crypto

View file

@ -10,7 +10,7 @@ import com.tangem.common.ui.notifications.NotificationsFactory.addFeeUnreachable
import com.tangem.common.ui.notifications.NotificationsFactory.addRentExemptionNotification
import com.tangem.common.ui.notifications.NotificationsFactory.addReserveAmountErrorNotification
import com.tangem.common.ui.notifications.NotificationsFactory.addTransactionLimitErrorNotification
import com.tangem.core.ui.extensions.networkIconResId
import com.tangem.common.ui.extensions.networkIconResId
import com.tangem.core.ui.extensions.stringReference
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.models.currency.CryptoCurrency

View file

@ -6,7 +6,7 @@ import com.tangem.common.ui.amountScreen.converters.AmountAccountConverter
import com.tangem.common.ui.amountScreen.converters.AmountStateConverter
import com.tangem.common.ui.amountScreen.converters.MaxEnterAmountConverter
import com.tangem.common.ui.amountScreen.models.AmountParameters
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.extensions.*
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.models.account.Account
@ -77,7 +77,7 @@ internal class SwapAmountFieldConverter(
walletTitle = walletTitle,
prefixText = when {
swapAmountType.isEnteringField() -> resourceReference(R.string.common_from)
else -> TextReference.Companion.EMPTY
else -> TextReference.EMPTY
},
).convert(account)
},

View file

@ -1,6 +1,6 @@
package com.tangem.features.swap.v2.impl.choosetoken.fromSupported.model.transformers
import com.tangem.core.ui.extensions.iconResId
import com.tangem.common.ui.extensions.iconResId
import com.tangem.core.ui.extensions.stringReference
import com.tangem.domain.express.models.ExpressRateType
import com.tangem.domain.models.currency.CryptoCurrency

View file

@ -9,7 +9,7 @@ import com.tangem.common.ui.account.toUM
import com.tangem.common.ui.tokens.TokenItemStateConverter
import com.tangem.common.ui.tokens.TokenItemStateConverter.Companion.isFlickering
import com.tangem.core.ui.components.currency.icon.CurrencyIconState
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.components.token.state.TokenItemState
import com.tangem.core.ui.components.token.state.TokenItemState.FiatAmountState
import com.tangem.core.ui.components.tokenlist.state.TokensListItemUM
@ -180,14 +180,14 @@ internal class AccountTokenItemConverter(
status: CryptoCurrencyStatus,
appCurrency: AppCurrency,
isAvailable: Boolean,
): TokenItemState.FiatAmountState? {
): FiatAmountState? {
return when (status.value) {
is CryptoCurrencyStatus.Loaded,
is CryptoCurrencyStatus.Custom,
is CryptoCurrencyStatus.NoQuote,
is CryptoCurrencyStatus.NoAccount,
-> {
TokenItemState.FiatAmountState.TextContent(
FiatAmountState.TextContent(
text = status.getTotalFiatAmount().format {
fiat(
fiatCurrencyCode = appCurrency.code,

View file

@ -4,7 +4,7 @@ import com.tangem.common.ui.R
import com.tangem.common.ui.notifications.NotificationUM
import com.tangem.core.ui.components.notifications.NotificationConfig
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.networkIconResId
import com.tangem.common.ui.extensions.networkIconResId
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.wrappedList
import com.tangem.domain.models.currency.CryptoCurrency

View file

@ -11,7 +11,8 @@ import com.tangem.common.ui.bottomsheet.permission.state.*
import com.tangem.common.ui.notifications.NotificationUM
import com.tangem.common.ui.userwallet.ext.walletInterationIcon
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.extensions.iconResId
import com.tangem.core.ui.extensions.*
import com.tangem.core.ui.format.bigdecimal.*
import com.tangem.core.ui.res.TangemTheme
@ -91,7 +92,7 @@ internal class StateBuilder(
canSelectAnotherToken = false,
isNotNativeToken = initialCurrencyFrom is CryptoCurrency.Token,
balance = "",
networkIconRes = getActiveIconRes(initialCurrencyFrom.network.rawId),
networkIconRes = initialCurrencyFrom.network.iconResId,
isBalanceHidden = true,
),
receiveCardData = SwapCardState.SwapCardData(
@ -104,7 +105,7 @@ internal class StateBuilder(
canSelectAnotherToken = false,
balance = "",
isNotNativeToken = initialCurrencyTo is CryptoCurrency.Token,
networkIconRes = initialCurrencyTo?.let { getActiveIconRes(it.network.rawId) },
networkIconRes = initialCurrencyTo?.network?.iconResId,
coinId = initialCurrencyTo?.network?.rawId,
isBalanceHidden = true,
),
@ -147,7 +148,7 @@ internal class StateBuilder(
tokenCurrency = fromToken.currency.symbol,
canSelectAnotherToken = uiStateHolder.sendCardData.canSelectAnotherToken,
balance = fromToken.getFormattedAmount(isNeedSymbol = false),
networkIconRes = getActiveIconRes(fromToken.currency.network.rawId),
networkIconRes = fromToken.currency.network.iconResId,
isBalanceHidden = isBalanceHiddenProvider(),
),
receiveCardData = SwapCardState.Empty(
@ -198,7 +199,7 @@ internal class StateBuilder(
tokenCurrency = fromToken.currency.symbol,
canSelectAnotherToken = canSelectSendToken,
balance = fromToken.getFormattedAmount(isNeedSymbol = false),
networkIconRes = getActiveIconRes(fromToken.currency.network.rawId),
networkIconRes = fromToken.currency.network.iconResId,
isBalanceHidden = isBalanceHiddenProvider(),
),
receiveCardData = SwapCardState.SwapCardData(
@ -216,7 +217,7 @@ internal class StateBuilder(
tokenCurrency = toToken.currency.symbol,
canSelectAnotherToken = canSelectReceiveToken,
balance = toToken.getFormattedAmount(isNeedSymbol = false),
networkIconRes = getActiveIconRes(toToken.currency.network.rawId),
networkIconRes = toToken.currency.network.iconResId,
isBalanceHidden = isBalanceHiddenProvider(),
),
notifications = notificationsFactory.getSwapNotSupportedNotifications(),
@ -267,7 +268,7 @@ internal class StateBuilder(
isNotNativeToken = fromToken is CryptoCurrency.Token,
canSelectAnotherToken = canSelectSendToken,
balance = if (!canSelectSendToken) uiStateHolder.sendCardData.balance else "",
networkIconRes = getActiveIconRes(fromToken.network.rawId),
networkIconRes = fromToken.network.iconResId,
isBalanceHidden = isBalanceHiddenProvider(),
),
receiveCardData = SwapCardState.SwapCardData(
@ -283,7 +284,7 @@ internal class StateBuilder(
isNotNativeToken = toToken is CryptoCurrency.Token,
canSelectAnotherToken = canSelectReceiveToken,
balance = if (!canSelectReceiveToken) uiStateHolder.receiveCardData.balance else "",
networkIconRes = getActiveIconRes(toToken.network.rawId),
networkIconRes = toToken.network.iconResId,
isBalanceHidden = isBalanceHiddenProvider(),
),
notifications = persistentListOf(),

View file

@ -31,13 +31,18 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.constraintlayout.compose.ConstraintLayout
import com.tangem.common.ui.bottomsheet.permission.state.GiveTxPermissionState
import com.tangem.common.ui.extensions.iconResId
import com.tangem.common.ui.notifications.NotificationUM
import com.tangem.core.ui.components.*
import com.tangem.core.ui.components.notifications.Notification
import com.tangem.core.ui.extensions.*
import com.tangem.core.ui.extensions.orMaskWithStars
import com.tangem.core.ui.extensions.resolveReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.core.ui.test.SwapTokenScreenTestTags
import com.tangem.domain.models.network.Network
import com.tangem.feature.swap.domain.models.ui.FeeType
import com.tangem.feature.swap.domain.models.ui.PriceImpact
import com.tangem.feature.swap.models.*
@ -184,7 +189,7 @@ private fun TransactionCardData(
priceImpact = priceImpact,
networkIconRes = if (swapCardState.isNotNativeToken) swapCardState.networkIconRes else null,
iconPlaceholder = swapCardState.coinId?.let {
getActiveIconResByCoinId(it)
Network.RawID(it).iconResId
},
onChangeTokenClick = if (swapCardState.canSelectAnotherToken) onSelectTokenClick else null,
modifier = modifier,

View file

@ -1,7 +1,7 @@
package com.tangem.feature.tester.presentation.excludedblockchains.state.mapper
import com.tangem.blockchain.common.Blockchain
import com.tangem.core.ui.extensions.getActiveIconRes
import com.tangem.common.ui.extensions.getActiveIconRes
import com.tangem.feature.tester.presentation.excludedblockchains.state.BlockchainUM
internal fun List<Blockchain>.toUiModels(
@ -25,7 +25,7 @@ private fun Blockchain.toUiModel(isExcluded: Boolean, onExcludedStateChange: (Bo
id = id,
name = name,
symbol = currency,
iconResId = getActiveIconRes(id),
iconResId = getActiveIconRes(this),
isExcluded = isExcluded,
onExcludedStateChange = onExcludedStateChange,
)

View file

@ -34,7 +34,8 @@ import com.tangem.core.ui.components.TextInputDialog
import com.tangem.core.ui.components.fields.SearchBar
import com.tangem.core.ui.components.fields.entity.SearchBarUM
import com.tangem.core.ui.components.rows.RowText
import com.tangem.core.ui.extensions.getActiveIconRes
import com.tangem.blockchain.common.Blockchain
import com.tangem.common.ui.extensions.getActiveIconRes
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.res.TangemTheme
@ -150,7 +151,7 @@ private fun BlockchainRow(state: ProvidersUM, onExpandStateChange: () -> Unit) {
) {
Row(verticalAlignment = Alignment.CenterVertically) {
Image(
painter = painterResource(id = getActiveIconRes(state.blockchainId)),
painter = painterResource(id = getActiveIconRes(Blockchain.fromId(state.blockchainId))),
contentDescription = null,
modifier = Modifier.size(TangemTheme.dimens.size36),
)

View file

@ -4,8 +4,9 @@ import androidx.compose.ui.graphics.Color
import com.tangem.common.ui.notifications.NotificationUM
import com.tangem.core.ui.R
import com.tangem.core.ui.components.currency.icon.CurrencyIconState
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.components.notifications.NotificationConfig
import com.tangem.common.ui.extensions.networkIconResId
import com.tangem.core.ui.extensions.*
import com.tangem.domain.models.ReceiveAddressModel
import com.tangem.domain.models.TokenReceiveNotification

View file

@ -4,7 +4,7 @@ import androidx.compose.runtime.Immutable
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.withStyle
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.components.notifications.CurrencyNotificationConfig
import com.tangem.core.ui.components.notifications.NotificationConfig
import com.tangem.core.ui.extensions.resourceReference

View file

@ -4,7 +4,7 @@ import androidx.compose.runtime.Immutable
import com.tangem.common.ui.userwallet.ext.walletInterationIcon
import com.tangem.core.ui.components.notifications.NotificationConfig
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.networkIconResId
import com.tangem.common.ui.extensions.networkIconResId
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.wrappedList
import com.tangem.core.ui.format.bigdecimal.crypto

View file

@ -1,7 +1,7 @@
package com.tangem.feature.tokendetails.presentation.tokendetails.state.factory
import com.tangem.core.ui.extensions.getTintForTokenIcon
import com.tangem.core.ui.extensions.networkIconResId
import com.tangem.common.ui.extensions.networkIconResId
import com.tangem.core.ui.extensions.tryGetBackgroundForTokenIcon
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.feature.tokendetails.presentation.tokendetails.state.IconState

View file

@ -5,7 +5,7 @@ import com.tangem.common.ui.notifications.ExpressNotificationsUM
import com.tangem.common.ui.notifications.NotificationUM
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.ui.components.currency.icon.CurrencyIconState
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.extensions.wrappedList

View file

@ -5,7 +5,7 @@ import com.tangem.core.ui.components.containers.pullToRefresh.PullToRefreshConfi
import com.tangem.core.ui.components.dropdownmenu.TangemDropdownMenuItem
import com.tangem.core.ui.components.marketprice.MarketPriceBlockState
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.networkIconResId
import com.tangem.common.ui.extensions.networkIconResId
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.themedColor
import com.tangem.core.ui.res.TangemTheme

View file

@ -5,7 +5,7 @@ import com.tangem.common.ui.expressStatus.state.ExpressStatusUM
import com.tangem.common.ui.expressStatus.state.ExpressTransactionStateIconUM
import com.tangem.common.ui.expressStatus.state.ExpressTransactionStateInfoUM
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference

View file

@ -1,6 +1,6 @@
package com.tangem.feature.tokendetails.presentation.tokendetails.state.transformer
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.components.marketprice.MarketPriceBlockState
import com.tangem.core.ui.extensions.stringReference
import com.tangem.domain.models.currency.CryptoCurrency

View file

@ -1,6 +1,6 @@
package com.tangem.feature.wallet.child.organizetokens.model.converter.items
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.components.token.state.TokenItemState
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.format.bigdecimal.BigDecimalFormatConstants

View file

@ -3,7 +3,7 @@ package com.tangem.feature.wallet.child.organizetokens.model.converter.items
import androidx.compose.ui.text.SpanStyle
import com.tangem.common.getTotalCryptoAmount
import com.tangem.common.getTotalFiatAmount
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.ds.image.TangemIconUM
import com.tangem.core.ui.ds.row.internal.TangemRowTailUM
import com.tangem.core.ui.ds.row.token.TangemTokenRowUM

View file

@ -5,7 +5,7 @@ import com.tangem.common.ui.notifications.ExpressNotificationsUM
import com.tangem.common.ui.notifications.NotificationUM
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.ui.components.currency.icon.CurrencyIconState
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.extensions.wrappedList

View file

@ -3,7 +3,7 @@ package com.tangem.feature.wallet.presentation.wallet.state.transformers.convert
import androidx.compose.ui.text.SpanStyle
import com.tangem.common.getTotalCryptoAmount
import com.tangem.common.getTotalFiatAmount
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.components.marketprice.PriceChangeState
import com.tangem.core.ui.components.marketprice.PriceChangeType
import com.tangem.core.ui.ds.badge.*

View file

@ -8,7 +8,7 @@ import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.decompose.ui.UiMessageSender
import com.tangem.core.ui.extensions.iconResId
import com.tangem.common.ui.extensions.iconResId
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.message.SnackbarMessage

View file

@ -1,12 +1,12 @@
package com.tangem.features.walletconnect.connections.model
import androidx.compose.runtime.Stable
import com.tangem.common.ui.extensions.greyedOutIconResId
import com.tangem.common.ui.extensions.iconResId
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.decompose.navigation.Router
import com.tangem.core.ui.extensions.getGreyedOutIconRes
import com.tangem.core.ui.extensions.iconResId
import com.tangem.domain.models.network.Network
import com.tangem.features.walletconnect.connections.components.WcSelectNetworksComponent.WcSelectNetworksParams
import com.tangem.features.walletconnect.connections.entity.WcNetworkInfoItem
@ -67,7 +67,7 @@ internal class WcSelectNetworksModel @Inject constructor(
missing = params.missingRequiredNetworks.map { network ->
WcNetworkInfoItem.Required(
id = network.rawId,
icon = getGreyedOutIconRes(network.rawId),
icon = network.greyedOutIconResId,
name = network.name,
symbol = network.currencySymbol,
)
@ -95,7 +95,7 @@ internal class WcSelectNetworksModel @Inject constructor(
notAdded = params.notAddedNetworks.map { network ->
WcNetworkInfoItem.ReadOnly(
id = network.rawId,
icon = getGreyedOutIconRes(network.rawId),
icon = network.greyedOutIconResId,
name = network.name,
symbol = network.currencySymbol,
)

View file

@ -1,6 +1,6 @@
package com.tangem.features.walletconnect.connections.model.transformers
import com.tangem.core.ui.extensions.iconResId
import com.tangem.common.ui.extensions.iconResId
import com.tangem.domain.models.network.Network
import com.tangem.features.walletconnect.connections.entity.WcNetworkInfoItem
import com.tangem.features.walletconnect.connections.entity.WcNetworksInfo

View file

@ -1,6 +1,6 @@
package com.tangem.features.walletconnect.transaction.converter
import com.tangem.core.ui.extensions.getActiveIconRes
import com.tangem.common.ui.extensions.iconResId
import com.tangem.domain.models.network.Network
import com.tangem.features.walletconnect.transaction.entity.common.WcNetworkInfoUM
import com.tangem.utils.converter.Converter
@ -10,6 +10,6 @@ internal class WcNetworkInfoUMConverter @Inject constructor() : Converter<Networ
override fun convert(value: Network) = WcNetworkInfoUM(
name = value.name,
iconRes = getActiveIconRes(value.rawId),
iconRes = value.iconResId,
)
}

View file

@ -1,7 +1,8 @@
package com.tangem.features.walletconnect.transaction.ui.blockaid
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.getActiveIconRes
import com.tangem.blockchain.common.Blockchain
import com.tangem.common.ui.extensions.getActiveIconRes
import com.tangem.domain.walletconnect.model.WcApprovedAmount
import com.tangem.features.walletconnect.impl.R
import com.tangem.features.walletconnect.transaction.entity.approve.WcSpendAllowanceUM
@ -22,7 +23,7 @@ internal class WcSpendAllowanceUMConverter : Converter<WcSpendAllowanceUMConvert
isUnlimited = isUnlimited,
tokenSymbol = value.approvedAmount.amount?.currencySymbol ?: "",
tokenImageUrl = value.approvedAmount.logoUrl,
networkIconRes = value.approvedAmount.chainId?.toString()?.let { getActiveIconRes(it) },
networkIconRes = value.approvedAmount.chainId?.toString()?.let { getActiveIconRes(Blockchain.fromId(it)) },
onLearnMoreClicked = value.onLearnMoreClick,
)
}

View file

@ -1,9 +1,9 @@
package com.tangem.features.yield.supply.impl.subcomponents.approve.model
import arrow.core.getOrElse
import com.tangem.utils.logging.TangemLogger
import com.tangem.blockchain.common.TransactionData
import com.tangem.blockchain.common.transaction.TransactionFee
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.analytics.models.AnalyticsParam
import com.tangem.core.analytics.models.Basic
@ -11,7 +11,6 @@ import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.navigation.url.UrlOpener
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
@ -42,6 +41,7 @@ import com.tangem.features.yield.supply.impl.subcomponents.notifications.YieldSu
import com.tangem.features.yield.supply.impl.subcomponents.notifications.entity.YieldSupplyNotificationData
import com.tangem.utils.TangemBlogUrlBuilder
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import com.tangem.utils.logging.TangemLogger
import com.tangem.utils.transformer.update
import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.flow.*

View file

@ -5,7 +5,7 @@ import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.decompose.navigation.Router
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.wrappedList
import com.tangem.features.yield.supply.api.analytics.YieldSupplyAnalytics

View file

@ -1,15 +1,14 @@
package com.tangem.features.yield.supply.impl.subcomponents.startearning.model
import arrow.core.getOrElse
import com.tangem.utils.logging.TangemLogger
import com.tangem.blockchain.common.TransactionSender
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.analytics.models.AnalyticsParam
import com.tangem.core.analytics.models.Basic
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.wrappedList
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
@ -41,6 +40,7 @@ import com.tangem.features.yield.supply.impl.subcomponents.startearning.YieldSup
import com.tangem.features.yield.supply.impl.subcomponents.startearning.model.transformers.YieldSupplyStartEarningFeeContentTransformer
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import com.tangem.utils.extensions.orZero
import com.tangem.utils.logging.TangemLogger
import com.tangem.utils.transformer.update
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.launch

View file

@ -1,6 +1,7 @@
package com.tangem.features.yield.supply.impl.subcomponents.stopearning.model
import arrow.core.getOrElse
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.analytics.models.AnalyticsParam
import com.tangem.core.analytics.models.Basic
@ -8,16 +9,15 @@ import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.navigation.url.UrlOpener
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.wrappedList
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
import com.tangem.domain.account.status.usecase.GetFeePaidCryptoCurrencyStatusSyncUseCase
import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.domain.models.wallet.isHotWallet
import com.tangem.domain.account.status.usecase.GetFeePaidCryptoCurrencyStatusSyncUseCase
import com.tangem.domain.transaction.usecase.GetFeeUseCase
import com.tangem.domain.transaction.usecase.SendTransactionUseCase
import com.tangem.domain.yield.supply.INCREASE_GAS_LIMIT_FOR_SUPPLY
@ -42,10 +42,10 @@ import com.tangem.features.yield.supply.impl.subcomponents.stopearning.model.tra
import com.tangem.utils.TangemBlogUrlBuilder
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import com.tangem.utils.extensions.orZero
import com.tangem.utils.logging.TangemLogger
import com.tangem.utils.transformer.update
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.launch
import com.tangem.utils.logging.TangemLogger
import javax.inject.Inject
@Suppress("LongParameterList")

View file

@ -4,7 +4,7 @@ import androidx.compose.runtime.Stable
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.features.yield.supply.api.YieldSupplyDepositedWarningComponent
import com.tangem.features.yield.supply.impl.warning.ui.YieldSupplyDepositedWarningUM
import com.tangem.utils.coroutines.CoroutineDispatcherProvider