Updated on 2026-08-14

This commit is contained in:
Tangem 2024-08-19 20:08:13 +04:00
parent 7453e8d179
commit fd7ac00fd4
10 changed files with 268 additions and 333 deletions

View file

@ -10,54 +10,8 @@ interface CardTypesResolver {
fun isTangemWallet(): Boolean
fun isWhiteWallet2(): Boolean
fun isAvroraWallet(): Boolean
fun isTraillantWallet(): Boolean
fun isShibaWallet(): Boolean
fun isTronWallet(): Boolean
fun isKaspaWallet(): Boolean
fun isKaspa2Wallet(): Boolean
fun isKaspaResellerWallet(): Boolean
fun isBadWallet(): Boolean
fun isJrWallet(): Boolean
fun isGrimWallet(): Boolean
fun isSatoshiFriendsWallet(): Boolean
fun isBitcoinPizzaDayWallet(): Boolean
fun isVeChainWallet(): Boolean
fun isNewWorldEliteWallet(): Boolean
fun isRedPandaWallet(): Boolean
fun isCryptoSethWallet(): Boolean
fun isKishuInuWallet(): Boolean
fun isBabyDogeWallet(): Boolean
fun isCOQWallet(): Boolean
fun isCoinMetricaWallet(): Boolean
fun isVoltInuWallet(): Boolean
fun isVividWallet(): Boolean
fun isPastelWallet(): Boolean
fun isWhiteWallet(): Boolean
fun isWallet2(): Boolean

View file

@ -26,60 +26,10 @@ internal class TangemCardTypesResolver(
card.firmwareVersion >= FirmwareVersion.MultiWalletAvailable
}
override fun isWhiteWallet2(): Boolean = card.batchId == WHITE_WALLET2_BATCH_ID
override fun isAvroraWallet(): Boolean = card.batchId == AVRORA_WALLET_BATCH_ID
override fun isTraillantWallet(): Boolean = card.batchId == TRILLIANT_WALLET_BATCH_ID
override fun isShibaWallet(): Boolean {
return card.firmwareVersion.compareTo(FirmwareVersion.KeysImportAvailable) == 0
}
override fun isTronWallet(): Boolean = card.batchId == TRON_WALLET_BATCH_ID
override fun isKaspaWallet(): Boolean = card.batchId == KASPA_WALLET_BATCH_ID
override fun isKaspa2Wallet(): Boolean = card.batchId == KASPA2_WALLET_BATCH_ID
override fun isKaspaResellerWallet(): Boolean = card.batchId == KASPA_RESELLER_WALLET_BATCH_ID
override fun isBadWallet(): Boolean = card.batchId == BAD_WALLET_BATCH_ID
override fun isJrWallet(): Boolean = card.batchId == JR_WALLET_BATCH_ID
override fun isGrimWallet(): Boolean = card.batchId == GRIM_WALLET_BATCH_ID
override fun isSatoshiFriendsWallet(): Boolean = card.batchId == SATOSHI_WALLET_BATCH_ID
override fun isBitcoinPizzaDayWallet(): Boolean = card.batchId == BITCOIN_PIZZA_DAY_WALLET_BATCH_ID
override fun isVeChainWallet(): Boolean = card.batchId == VECHAIN_WALLET_BATCH_ID
override fun isNewWorldEliteWallet(): Boolean = card.batchId == NEW_WORLD_ELITE_WALLET_BATCH_ID
override fun isRedPandaWallet(): Boolean = card.batchId == RED_PANDA_WALLET_BATCH_ID
override fun isCryptoSethWallet(): Boolean = card.batchId == CRYPTO_SETH_WALLET_BATCH_ID
override fun isKishuInuWallet(): Boolean = card.batchId == KISHU_INU_WALLET_BATCH_ID
override fun isBabyDogeWallet(): Boolean = card.batchId == BABY_DOGE_WALLET_BATCH_ID
override fun isCOQWallet(): Boolean = card.batchId == COQ_WALLET_BATCH_ID
override fun isCoinMetricaWallet(): Boolean = card.batchId == COIN_METRICA_WALLET_BATCH_ID
override fun isVoltInuWallet(): Boolean = card.batchId == VOLT_INU_WALLET_BATCH_ID
override fun isVividWallet(): Boolean = card.batchId == VIVID_LEMON_WALLET_BATCH_ID ||
card.batchId == VIVID_AQUA_WALLET_BATCH_ID ||
card.batchId == VIVID_GRAPEFRUIT_WALLET_BATCH_ID
override fun isPastelWallet(): Boolean = card.batchId == PASTEL_PEACH_WALLET_BATCH_ID ||
card.batchId == PASTEL_GRASS_WALLET_BATCH_ID ||
card.batchId == PASTEL_AIR_WALLET_BATCH_ID
override fun isWhiteWallet(): Boolean {
return walletData == null && card.firmwareVersion <= FirmwareVersion.HDWalletAvailable
}
@ -183,34 +133,5 @@ internal class TangemCardTypesResolver(
private companion object {
const val DEV_KIT_CARD_BATCH_ID = "CB83"
const val TRON_WALLET_BATCH_ID = "AF07"
const val KASPA_WALLET_BATCH_ID = "AF08"
const val KASPA2_WALLET_BATCH_ID = "AF25"
const val KASPA_RESELLER_WALLET_BATCH_ID = "AF31"
const val BAD_WALLET_BATCH_ID = "AF09"
const val JR_WALLET_BATCH_ID = "AF14"
const val GRIM_WALLET_BATCH_ID = "AF13"
const val SATOSHI_WALLET_BATCH_ID = "AF19"
const val WHITE_WALLET2_BATCH_ID = "AF15"
const val TRILLIANT_WALLET_BATCH_ID = "AF16"
const val AVRORA_WALLET_BATCH_ID = "AF18"
const val BITCOIN_PIZZA_DAY_WALLET_BATCH_ID = "AF33"
const val VECHAIN_WALLET_BATCH_ID = "AF29"
const val NEW_WORLD_ELITE_WALLET_BATCH_ID = "AF26"
const val RED_PANDA_WALLET_BATCH_ID = "AF34"
const val CRYPTO_SETH_WALLET_BATCH_ID = "AF32"
const val KISHU_INU_WALLET_BATCH_ID = "AF52"
const val BABY_DOGE_WALLET_BATCH_ID = "AF51"
const val COQ_WALLET_BATCH_ID = "AF28"
const val COIN_METRICA_WALLET_BATCH_ID = "AF27"
const val VOLT_INU_WALLET_BATCH_ID = "AF35"
// VIVID WALLETS
const val VIVID_LEMON_WALLET_BATCH_ID = "AF40"
const val VIVID_AQUA_WALLET_BATCH_ID = "AF41"
const val VIVID_GRAPEFRUIT_WALLET_BATCH_ID = "AF42"
// PASTEL WALLETS
const val PASTEL_PEACH_WALLET_BATCH_ID = "AF43"
const val PASTEL_AIR_WALLET_BATCH_ID = "AF44"
const val PASTEL_GRASS_WALLET_BATCH_ID = "AF45"
}
}

View file

@ -92,4 +92,8 @@ dependencies {
implementation(projects.features.details.api)
implementation(projects.features.pushNotifications.api)
implementation(projects.features.markets.api)
/** Test libraries */
implementation(deps.test.junit)
implementation(deps.test.truth)
}

View file

@ -0,0 +1,31 @@
package com.tangem.feature.wallet.presentation.wallet.domain
import androidx.annotation.DrawableRes
import com.tangem.blockchain.common.Blockchain
import com.tangem.feature.wallet.impl.R
/**
* Note image model
*
* @property blockchain blockchain
* @property imageResId image res id
*
[REDACTED_AUTHOR]
*/
internal enum class NoteImage(
val blockchain: Blockchain,
@DrawableRes val imageResId: Int,
) {
Bitcoin(blockchain = Blockchain.Bitcoin, imageResId = R.drawable.ill_note_btc_120_106),
Ethereum(blockchain = Blockchain.Ethereum, imageResId = R.drawable.ill_note_ethereum_120_106),
Binance(blockchain = Blockchain.BSC, imageResId = R.drawable.ill_note_binance_120_106),
Dogecoin(blockchain = Blockchain.Dogecoin, imageResId = R.drawable.ill_note_doge_120_106),
Cardano(blockchain = Blockchain.Cardano, imageResId = R.drawable.ill_note_cardano_120_106),
XRP(blockchain = Blockchain.XRP, imageResId = R.drawable.ill_note_xrp_120_106),
}

View file

@ -0,0 +1,161 @@
package com.tangem.feature.wallet.presentation.wallet.domain
import androidx.annotation.DrawableRes
import com.tangem.feature.wallet.impl.R
/**
* Wallet2 cobrand image.
* To integrate a new cobrand, just implement new enum object and that all.
*
* @property cards2ResId image resource id for wallet set with 2 cards
* @property cards3ResId image resource id for wallet set with 3 cards
* @property batchIds set of unique batch ids for this cobrand
*
[REDACTED_AUTHOR]
*/
internal enum class Wallet2CobrandImage(
@DrawableRes val cards2ResId: Int,
@DrawableRes val cards3ResId: Int,
val batchIds: Set<String>,
) {
Avrora(
cards2ResId = R.drawable.ill_avrora_card2_120_106,
cards3ResId = R.drawable.ill_avrora_card3_120_106,
batchIds = setOf("AF18"),
),
BabyDoge(
cards2ResId = R.drawable.ill_baby_doge_card2_120_106,
cards3ResId = R.drawable.ill_baby_doge_card3_120_106,
batchIds = setOf("AF51"),
),
Bad(
cards2ResId = R.drawable.ill_bad_card2_120_106,
cards3ResId = R.drawable.ill_bad_card3_120_106,
batchIds = setOf("AF09"),
),
BitcoinPizzaDay(
cards2ResId = R.drawable.ill_pizza_day_card2_120_106,
cards3ResId = R.drawable.ill_pizza_day_card3_120_106,
batchIds = setOf("AF33"),
),
CoinMetrica(
cards2ResId = R.drawable.ill_coin_metrica_card2_120_106,
cards3ResId = R.drawable.ill_coin_metrica_card3_120_106,
batchIds = setOf("AF27"),
),
COQ(
cards2ResId = R.drawable.ill_coq_card2_120_106,
cards3ResId = R.drawable.ill_coq_card3_120_106,
batchIds = setOf("AF28"),
),
CryptoSeth(
cards2ResId = R.drawable.ill_crypto_seth_card2_120_106,
cards3ResId = R.drawable.ill_crypto_seth_card3_120_106,
batchIds = setOf("AF32"),
),
Grim(
cards2ResId = R.drawable.ill_grim_card2_120_106,
cards3ResId = R.drawable.ill_grim_card3_120_106,
batchIds = setOf("AF13"),
),
Jr(
cards2ResId = R.drawable.ill_jr_card2_120_106,
cards3ResId = R.drawable.ill_jr_card3_120_106,
batchIds = setOf("AF14"),
),
Kaspa(
cards2ResId = R.drawable.ill_kaspa_card2_120_106,
cards3ResId = R.drawable.ill_kaspa_card3_120_106,
batchIds = setOf("AF08"),
),
Kaspa2(
cards2ResId = R.drawable.ill_kaspa2_card2_120_106,
cards3ResId = R.drawable.ill_kaspa2_card3_120_106,
batchIds = setOf("AF25"),
),
KaspaReseller(
cards2ResId = R.drawable.ill_kaspa_reseller_card2_120_106,
cards3ResId = R.drawable.ill_kaspa_reseller_card3_120_106,
batchIds = setOf("AF31"),
),
KishuInu(
cards2ResId = R.drawable.ill_kishu_inu_card2_120_106,
cards3ResId = R.drawable.ill_kishu_inu_card3_120_106,
batchIds = setOf("AF52"),
),
NewWorldElite(
cards2ResId = R.drawable.ill_nwe_card2_120_106,
cards3ResId = R.drawable.ill_nwe_card3_120_106,
batchIds = setOf("AF26"),
),
// for multicolored cards use image of 3 cards in all cases
Pastel(
cards2ResId = R.drawable.ill_pastel_cards3_120_106,
cards3ResId = R.drawable.ill_pastel_cards3_120_106,
batchIds = setOf("AF43", "AF44", "AF45"),
),
RedPanda(
cards2ResId = R.drawable.ill_red_panda_card2_120_106,
cards3ResId = R.drawable.ill_red_panda_card3_120_106,
batchIds = setOf("AF34"),
),
SatoshiFriends(
cards2ResId = R.drawable.ill_satoshi_card2_120_106,
cards3ResId = R.drawable.ill_satoshi_card3_120_106,
batchIds = setOf("AF19"),
),
Trillant(
cards2ResId = R.drawable.ill_trillant_card2_120_106,
cards3ResId = R.drawable.ill_trillant_card3_120_106,
batchIds = setOf("AF16"),
),
Tron(
cards2ResId = R.drawable.ill_tron_card2_120_106,
cards3ResId = R.drawable.ill_tron_card3_120_106,
batchIds = setOf("AF07"),
),
VeChain(
cards2ResId = R.drawable.ill_vechain_card2_120_106,
cards3ResId = R.drawable.ill_vechain_card3_120_106,
batchIds = setOf("AF29"),
),
// for multicolored cards use image of 3 cards in all cases
Vivid(
cards2ResId = R.drawable.ill_vivid_cards3_120_106,
cards3ResId = R.drawable.ill_vivid_cards3_120_106,
batchIds = setOf("AF40", "AF41", "AF42"),
),
VoltInu(
cards2ResId = R.drawable.ill_volt_inu_card2_120_106,
cards3ResId = R.drawable.ill_volt_inu_card3_120_106,
batchIds = setOf("AF35"),
),
WhiteTangem(
cards2ResId = R.drawable.ill_white_card2_120_106,
cards3ResId = R.drawable.ill_white_card3_120_106,
batchIds = setOf("AF15"),
),
}

View file

@ -1,7 +1,6 @@
package com.tangem.feature.wallet.presentation.wallet.domain
import androidx.annotation.DrawableRes
import com.tangem.blockchain.common.Blockchain
import com.tangem.domain.common.util.cardTypesResolver
import com.tangem.domain.common.util.getCardsCount
import com.tangem.domain.demo.DemoConfig
@ -13,7 +12,6 @@ import com.tangem.feature.wallet.impl.R
*
[REDACTED_AUTHOR]
*/
// TODO: make flexible to integrate cobrands ([REDACTED_JIRA])
internal object WalletImageResolver {
private const val WALLET_WITHOUT_BACKUP_COUNT = 1
@ -25,42 +23,42 @@ internal object WalletImageResolver {
@DrawableRes
fun resolve(userWallet: UserWallet): Int? {
val cardTypesResolver = userWallet.scanResponse.cardTypesResolver
val cobrandImage = Wallet2CobrandImage.entries.firstOrNull {
it.batchIds.contains(userWallet.scanResponse.card.batchId)
}
val noteImage by lazy {
val noteBlockchain = cardTypesResolver.getBlockchain()
NoteImage.entries.firstOrNull { it.blockchain == noteBlockchain }
}
return when {
cardTypesResolver.isDevKit() -> R.drawable.ill_dev_120_106
cardTypesResolver.isWhiteWallet2() -> userWallet.resolveWhiteWallet2()
cardTypesResolver.isAvroraWallet() -> userWallet.resolveAvroraWallet()
cardTypesResolver.isTraillantWallet() -> userWallet.resolveTraillantWallet()
cardTypesResolver.isTronWallet() -> userWallet.resolveTronWallet()
cardTypesResolver.isKaspaWallet() -> userWallet.resolveKaspaWallet()
cardTypesResolver.isKaspa2Wallet() -> userWallet.resolveKaspa2Wallet()
cardTypesResolver.isKaspaResellerWallet() -> userWallet.resolveKaspaResellerWallet()
cardTypesResolver.isBadWallet() -> userWallet.resolveBadWallet()
cardTypesResolver.isJrWallet() -> userWallet.resolveJrWallet()
cardTypesResolver.isGrimWallet() -> userWallet.resolveGrimWallet()
cardTypesResolver.isSatoshiFriendsWallet() -> userWallet.resolveSatoshiWallet()
cardTypesResolver.isBitcoinPizzaDayWallet() -> userWallet.resolveBitcoinPizzaDayWallet()
cardTypesResolver.isVeChainWallet() -> userWallet.resolveVeChainWallet()
cardTypesResolver.isNewWorldEliteWallet() -> userWallet.resolveNewWorldEliteWallet()
cardTypesResolver.isRedPandaWallet() -> userWallet.resolveRedPandaWallet()
cardTypesResolver.isCryptoSethWallet() -> userWallet.resolveCryptoSethWallet()
cardTypesResolver.isKishuInuWallet() -> userWallet.resolveKishuInuWallet()
cardTypesResolver.isBabyDogeWallet() -> userWallet.resolveBabyDogeWallet()
cardTypesResolver.isCOQWallet() -> userWallet.resolveCOQWallet()
cardTypesResolver.isCoinMetricaWallet() -> userWallet.resolveCoinMetricaWallet()
cardTypesResolver.isVoltInuWallet() -> userWallet.resolveVoltInuWallet()
cardTypesResolver.isVividWallet() -> userWallet.resolveVividWallet()
cardTypesResolver.isPastelWallet() -> userWallet.resolvePastelWallet()
cobrandImage != null -> userWallet.resolveWallet2Cobrand(image = cobrandImage)
cardTypesResolver.isWallet2() -> userWallet.resolveWallet2()
cardTypesResolver.isShibaWallet() -> userWallet.resolveShibaWallet()
cardTypesResolver.isTangemWallet() -> userWallet.resolveWallet1()
cardTypesResolver.isWhiteWallet() -> R.drawable.ill_wallet_old_white_120_106
cardTypesResolver.isTangemTwins() -> R.drawable.ill_twins_120_106
cardTypesResolver.isStart2Coin() -> R.drawable.ill_start2coin_120_106
cardTypesResolver.isTangemNote() -> resolveNote(blockchain = cardTypesResolver.getBlockchain())
cardTypesResolver.isTangemNote() -> noteImage?.imageResId
else -> null
}
}
private fun UserWallet.resolveWallet2Cobrand(image: Wallet2CobrandImage): Int? {
return resolveWallet2(oneBackupResId = image.cards2ResId, twoBackupResId = image.cards3ResId)
}
private fun UserWallet.resolveShibaWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_shiba_card2_120_106,
twoBackupResId = R.drawable.ill_shiba_card3_120_106,
)
}
private fun UserWallet.resolveWallet2(
@DrawableRes oneBackupResId: Int = R.drawable.ill_wallet2_cards2_120_106,
@DrawableRes twoBackupResId: Int = R.drawable.ill_wallet2_cards3_120_106,
@ -76,176 +74,6 @@ internal object WalletImageResolver {
}
}
private fun UserWallet.resolveTronWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_tron_card2_120_106,
twoBackupResId = R.drawable.ill_tron_card3_120_106,
)
}
private fun UserWallet.resolveKaspaWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_kaspa_card2_120_106,
twoBackupResId = R.drawable.ill_kaspa_card3_120_106,
)
}
private fun UserWallet.resolveKaspa2Wallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_kaspa2_card2_120_106,
twoBackupResId = R.drawable.ill_kaspa2_card3_120_106,
)
}
private fun UserWallet.resolveKaspaResellerWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_kaspa_reseller_card2_120_106,
twoBackupResId = R.drawable.ill_kaspa_reseller_card3_120_106,
)
}
private fun UserWallet.resolveBadWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_bad_card2_120_106,
twoBackupResId = R.drawable.ill_bad_card3_120_106,
)
}
private fun UserWallet.resolveJrWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_jr_card2_120_106,
twoBackupResId = R.drawable.ill_jr_card3_120_106,
)
}
private fun UserWallet.resolveGrimWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_grim_card2_120_106,
twoBackupResId = R.drawable.ill_grim_card3_120_106,
)
}
private fun UserWallet.resolveSatoshiWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_satoshi_card2_120_106,
twoBackupResId = R.drawable.ill_satoshi_card3_120_106,
)
}
private fun UserWallet.resolveShibaWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_shiba_card2_120_106,
twoBackupResId = R.drawable.ill_shiba_card3_120_106,
)
}
private fun UserWallet.resolveWhiteWallet2(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_white_card2_120_106,
twoBackupResId = R.drawable.ill_white_card3_120_106,
)
}
private fun UserWallet.resolveAvroraWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_avrora_card2_120_106,
twoBackupResId = R.drawable.ill_avrora_card3_120_106,
)
}
private fun UserWallet.resolveTraillantWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_traillant_card2_120_106,
twoBackupResId = R.drawable.ill_traillant_card3_120_106,
)
}
private fun UserWallet.resolveBitcoinPizzaDayWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_pizza_day_card2_120_106,
twoBackupResId = R.drawable.ill_pizza_day_card3_120_106,
)
}
private fun UserWallet.resolveVeChainWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_vechain_card2_120_106,
twoBackupResId = R.drawable.ill_vechain_card3_120_106,
)
}
private fun UserWallet.resolveNewWorldEliteWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_nwe_card2_120_106,
twoBackupResId = R.drawable.ill_nwe_card3_120_106,
)
}
private fun UserWallet.resolveRedPandaWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_red_panda_card2_120_106,
twoBackupResId = R.drawable.ill_red_panda_card3_120_106,
)
}
private fun UserWallet.resolveCryptoSethWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_crypto_seth_card2_120_106,
twoBackupResId = R.drawable.ill_crypto_seth_card3_120_106,
)
}
private fun UserWallet.resolveKishuInuWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_kishu_inu_card2_120_106,
twoBackupResId = R.drawable.ill_kishu_inu_card3_120_106,
)
}
private fun UserWallet.resolveBabyDogeWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_baby_doge_card2_120_106,
twoBackupResId = R.drawable.ill_baby_doge_card3_120_106,
)
}
private fun UserWallet.resolveCOQWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_coq_card2_120_106,
twoBackupResId = R.drawable.ill_coq_card3_120_106,
)
}
private fun UserWallet.resolveCoinMetricaWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_coin_metrica_card2_120_106,
twoBackupResId = R.drawable.ill_coin_metrica_card3_120_106,
)
}
private fun UserWallet.resolveVoltInuWallet(): Int? {
return resolveWallet2(
oneBackupResId = R.drawable.ill_volt_inu_card2_120_106,
twoBackupResId = R.drawable.ill_volt_inu_card3_120_106,
)
}
private fun UserWallet.resolveVividWallet(): Int? {
// for multicolored cards use image of 3 cards in all cases
return resolveWallet2(
oneBackupResId = R.drawable.ill_vivid_cards3_120_106,
twoBackupResId = R.drawable.ill_vivid_cards3_120_106,
)
}
private fun UserWallet.resolvePastelWallet(): Int? {
// for multicolored cards use image of 3 cards in all cases
return resolveWallet2(
oneBackupResId = R.drawable.ill_pastel_cards3_120_106,
twoBackupResId = R.drawable.ill_pastel_cards3_120_106,
)
}
private fun UserWallet.resolveWallet1(): Int? {
return resolveWalletWithBackups { count ->
when (count) {
@ -262,16 +90,4 @@ internal object WalletImageResolver {
return if (count != null) resolve(count) else null
}
private fun resolveNote(blockchain: Blockchain): Int? {
return when (blockchain) {
Blockchain.Bitcoin -> R.drawable.ill_note_btc_120_106
Blockchain.Ethereum -> R.drawable.ill_note_ethereum_120_106
Blockchain.BSC -> R.drawable.ill_note_binance_120_106
Blockchain.Dogecoin -> R.drawable.ill_note_doge_120_106
Blockchain.Cardano -> R.drawable.ill_note_cardano_120_106
Blockchain.XRP -> R.drawable.ill_note_xrp_120_106
else -> null
}
}
}

View file

@ -0,0 +1,26 @@
package com.tangem.feature.wallet.presentation.wallet.domain
import com.google.common.truth.Truth
import com.tangem.blockchain.common.Blockchain
import org.junit.Test
/**
[REDACTED_AUTHOR]
*/
internal class NoteImageTest {
@Test
fun check() {
// check uniqueness
Truth.assertThat(NoteImage.entries.map { it.blockchain }).containsNoDuplicates()
Truth.assertThat(NoteImage.entries.map { it.imageResId }).containsNoDuplicates()
// check blockchain matching
Truth.assertThat(NoteImage.Bitcoin.blockchain).isEqualTo(Blockchain.Bitcoin)
Truth.assertThat(NoteImage.Ethereum.blockchain).isEqualTo(Blockchain.Ethereum)
Truth.assertThat(NoteImage.Binance.blockchain).isEqualTo(Blockchain.BSC)
Truth.assertThat(NoteImage.Dogecoin.blockchain).isEqualTo(Blockchain.Dogecoin)
Truth.assertThat(NoteImage.Cardano.blockchain).isEqualTo(Blockchain.Cardano)
Truth.assertThat(NoteImage.XRP.blockchain).isEqualTo(Blockchain.XRP)
}
}

View file

@ -0,0 +1,22 @@
package com.tangem.feature.wallet.presentation.wallet.domain
import com.google.common.truth.Truth
import org.junit.Test
/**
[REDACTED_AUTHOR]
*/
internal class Wallet2CobrandImageTest {
@Test
fun checkUniqueness() {
val excluded = listOf(Wallet2CobrandImage.Pastel, Wallet2CobrandImage.Vivid)
(Wallet2CobrandImage.entries - excluded).forEach {
Truth.assertThat(it.cards2ResId != it.cards3ResId).isTrue()
}
Truth.assertThat(Wallet2CobrandImage.entries.map { it.cards2ResId }).containsNoDuplicates()
Truth.assertThat(Wallet2CobrandImage.entries.map { it.cards3ResId }).containsNoDuplicates()
Truth.assertThat(Wallet2CobrandImage.entries.flatMap { it.batchIds }).containsNoDuplicates()
}
}