Updated on 2026-08-14
This commit is contained in:
parent
a81b30c5d6
commit
7ad0d06340
4 changed files with 102 additions and 22 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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"))
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue