Updated on 2026-08-14

This commit is contained in:
Tangem 2023-07-06 16:26:08 +08:00
parent a81b30c5d6
commit 7ad0d06340
4 changed files with 102 additions and 22 deletions

View file

@ -4,14 +4,26 @@ import com.tangem.blockchain.common.Blockchain
import com.tangem.blockchain.common.Token
interface CardTypesResolver {
fun isTangemNote(): Boolean
fun isTangemWallet(): Boolean
fun isWhiteWallet(): Boolean
fun isWallet2(): Boolean
fun isTangemTwins(): Boolean
fun isStart2Coin(): Boolean
fun isDev(): Boolean
fun isMultiwalletAllowed(): Boolean
fun getBlockchain(): Blockchain
fun getPrimaryToken(): Token?
fun getBackupCardsCount(): Int
}

View file

@ -11,27 +11,37 @@ import com.tangem.domain.common.TapWorkarounds.isTestCard
import com.tangem.domain.models.scan.CardDTO
import com.tangem.domain.models.scan.ProductType
class TangemCardTypesResolver(
internal class TangemCardTypesResolver(
private val card: CardDTO,
private val productType: ProductType,
private val walletData: WalletData?,
) : CardTypesResolver {
override fun isTangemNote(): Boolean = productType == ProductType.Note
override fun isTangemWallet(): Boolean = card.settings.isBackupAllowed &&
card.settings.isHDWalletAllowed &&
card.firmwareVersion >= FirmwareVersion.MultiWalletAvailable
override fun isWallet2(): Boolean =
card.firmwareVersion >= FirmwareVersion.KeysImportAvailable && card.settings.isKeysImportAllowed
override fun isTangemWallet(): Boolean {
return card.settings.isBackupAllowed && card.settings.isHDWalletAllowed &&
card.firmwareVersion >= FirmwareVersion.MultiWalletAvailable
}
override fun isWhiteWallet(): Boolean {
return walletData == null && card.firmwareVersion >= FirmwareVersion.HDWalletAvailable
}
override fun isWallet2(): Boolean {
return card.firmwareVersion >= FirmwareVersion.KeysImportAvailable && card.settings.isKeysImportAllowed
}
override fun isTangemTwins(): Boolean = productType == ProductType.Twins
override fun isStart2Coin(): Boolean = card.isStart2Coin
override fun isMultiwalletAllowed(): Boolean = !isTangemTwins() &&
!card.isStart2Coin &&
!isTangemNote() &&
(multiWalletAvailable() || card.wallets.firstOrNull()?.curve == EllipticCurve.Secp256k1)
override fun isDev(): Boolean = card.isTestCard
override fun isMultiwalletAllowed(): Boolean {
return !isTangemTwins() && !card.isStart2Coin && !isTangemNote() &&
(multiWalletAvailable() || card.wallets.firstOrNull()?.curve == EllipticCurve.Secp256k1)
}
private fun multiWalletAvailable() = card.firmwareVersion >= FirmwareVersion.MultiWalletAvailable
@ -59,19 +69,21 @@ class TangemCardTypesResolver(
cardToken.decimals,
)
}
}
private fun Blockchain.Companion.fromBlockchainName(blockchainName: String): Blockchain {
// workaround for BSC (BNB) notes cards
return when (blockchainName) {
"BINANCE" -> {
Blockchain.BSC
}
"BINANCE/test" -> {
Blockchain.BSCTestnet
}
else -> {
Blockchain.fromId(blockchainName)
override fun getBackupCardsCount(): Int = card.wallets.size
private fun Blockchain.Companion.fromBlockchainName(blockchainName: String): Blockchain {
// workaround for BSC (BNB) notes cards
return when (blockchainName) {
"BINANCE" -> {
Blockchain.BSC
}
"BINANCE/test" -> {
Blockchain.BSCTestnet
}
else -> {
Blockchain.fromId(blockchainName)
}
}
}
}

View file

@ -26,6 +26,7 @@ dependencies {
/** Other libraries */
implementation(deps.kotlin.immutable.collections)
implementation(deps.tangem.blockchain)
/** DI */
implementation(deps.hilt.android)
@ -37,4 +38,7 @@ dependencies {
/** Feature Apis */
implementation(project(":features:wallet:api"))
/** Domain modules */
implementation(project(":domain:legacy"))
}

View file

@ -0,0 +1,52 @@
package com.tangem.feature.wallet.presentation.wallet.domain
import androidx.annotation.DrawableRes
import com.tangem.blockchain.common.Blockchain
import com.tangem.domain.common.CardTypesResolver
import com.tangem.feature.wallet.impl.R
/**
* Wallet image resolver
*
[REDACTED_AUTHOR]
*/
internal object WalletImageResolver {
private const val DOUBLE_WALLET_SET_BACKUP_COUNT = 1
private const val TRIPLE_WALLET_SET_BACKUP_COUNT = 2
/** Get image by [cardTypesResolver] */
@DrawableRes
fun resolve(cardTypesResolver: CardTypesResolver): Int? {
return when {
cardTypesResolver.isWallet2() -> resolveWallet2(cardTypesResolver)
cardTypesResolver.isTangemWallet() -> R.drawable.ill_wallet_120_106
cardTypesResolver.isWhiteWallet() -> R.drawable.ill_old_wallet_120_106
cardTypesResolver.isTangemTwins() -> R.drawable.ill_twin_120_106
cardTypesResolver.isStart2Coin() -> R.drawable.ill_start2coin_120_106
cardTypesResolver.isTangemNote() -> resolveNote(cardTypesResolver)
cardTypesResolver.isDev() -> R.drawable.ill_dev_120_106
else -> null
}
}
private fun resolveWallet2(cardTypesResolver: CardTypesResolver): Int? {
return when (cardTypesResolver.getBackupCardsCount()) {
DOUBLE_WALLET_SET_BACKUP_COUNT -> R.drawable.ill_wallet2_cards2_120_106
TRIPLE_WALLET_SET_BACKUP_COUNT -> R.drawable.ill_wallet2_cards3_120_106
else -> null
}
}
private fun resolveNote(cardTypesResolver: CardTypesResolver): Int? {
return when (cardTypesResolver.getBlockchain()) {
Blockchain.Bitcoin -> R.drawable.ill_note_btc_120_106
Blockchain.Ethereum -> R.drawable.ill_note_ethereum_120_106
Blockchain.Binance -> 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
}
}
}