From 7ad0d06340f2df1dc8ff78a5d4adaea9c5bd3d26 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 6 Jul 2023 16:26:08 +0800 Subject: [PATCH] Updated on 2026-08-14 --- .../tangem/domain/common/CardTypesResolver.kt | 12 ++++ .../domain/common/TangemCardTypesResolver.kt | 56 +++++++++++-------- features/wallet/impl/build.gradle.kts | 4 ++ .../wallet/domain/WalletImageResolver.kt | 52 +++++++++++++++++ 4 files changed, 102 insertions(+), 22 deletions(-) create mode 100644 features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/WalletImageResolver.kt diff --git a/domain/legacy/src/main/java/com/tangem/domain/common/CardTypesResolver.kt b/domain/legacy/src/main/java/com/tangem/domain/common/CardTypesResolver.kt index 72e1bfb243..ed40b0b3b6 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/common/CardTypesResolver.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/common/CardTypesResolver.kt @@ -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 } \ No newline at end of file diff --git a/domain/legacy/src/main/java/com/tangem/domain/common/TangemCardTypesResolver.kt b/domain/legacy/src/main/java/com/tangem/domain/common/TangemCardTypesResolver.kt index 79f908088a..39991063b5 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/common/TangemCardTypesResolver.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/common/TangemCardTypesResolver.kt @@ -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) + } } } } \ No newline at end of file diff --git a/features/wallet/impl/build.gradle.kts b/features/wallet/impl/build.gradle.kts index b8bbf291ab..603f0e303f 100644 --- a/features/wallet/impl/build.gradle.kts +++ b/features/wallet/impl/build.gradle.kts @@ -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")) } \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/WalletImageResolver.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/WalletImageResolver.kt new file mode 100644 index 0000000000..2dd09d7535 --- /dev/null +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/WalletImageResolver.kt @@ -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 + } + } +} \ No newline at end of file