diff --git a/core/config-toggles/src/main/assets/configs/feature_toggles_config.json b/core/config-toggles/src/main/assets/configs/feature_toggles_config.json index aa583d661b..eb8297c289 100644 --- a/core/config-toggles/src/main/assets/configs/feature_toggles_config.json +++ b/core/config-toggles/src/main/assets/configs/feature_toggles_config.json @@ -27,6 +27,14 @@ "name": "NFT_ENABLED", "version": "undefined" }, + { + "name": "NFT_EVM_ENABLED", + "version": "undefined" + }, + { + "name": "NFT_SOLANA_ENABLED", + "version": "undefined" + }, { "name": "STAKING_CARDANO_ENABLED", "version": "undefined" diff --git a/data/nft/build.gradle.kts b/data/nft/build.gradle.kts index 8d141c90e8..2e0f7cb455 100644 --- a/data/nft/build.gradle.kts +++ b/data/nft/build.gradle.kts @@ -30,6 +30,9 @@ dependencies { implementation(projects.domain.legacy) implementation(projects.libs.blockchainSdk) + /** Feature Api modules */ + implementation(projects.features.nft.api) + /** Libs - Other */ implementation(deps.kotlin.coroutines) implementation(deps.arrow.core) diff --git a/data/nft/src/main/kotlin/com/tangem/data/nft/DefaultNFTRepository.kt b/data/nft/src/main/kotlin/com/tangem/data/nft/DefaultNFTRepository.kt index aa6b40e845..fb01e242d4 100644 --- a/data/nft/src/main/kotlin/com/tangem/data/nft/DefaultNFTRepository.kt +++ b/data/nft/src/main/kotlin/com/tangem/data/nft/DefaultNFTRepository.kt @@ -22,6 +22,7 @@ import com.tangem.domain.nft.repository.NFTRepository import com.tangem.domain.tokens.model.Network import com.tangem.domain.walletmanager.WalletManagersFacade import com.tangem.domain.wallets.models.UserWalletId +import com.tangem.features.nft.NFTFeatureToggles import com.tangem.utils.coroutines.CoroutineDispatcherProvider import com.tangem.utils.coroutines.JobHolder import com.tangem.utils.coroutines.saveIn @@ -34,7 +35,7 @@ import javax.inject.Inject import com.tangem.blockchain.nft.models.NFTAsset as SdkNFTAsset import com.tangem.blockchain.nft.models.NFTCollection as SdkNFTCollection -@Suppress("LargeClass") +@Suppress("LargeClass", "LongParameterList") internal class DefaultNFTRepository @Inject constructor( private val nftPersistenceStoreFactory: NFTPersistenceStoreFactory, private val nftRuntimeStoreFactory: NFTRuntimeStoreFactory, @@ -42,6 +43,7 @@ internal class DefaultNFTRepository @Inject constructor( private val dispatchers: CoroutineDispatcherProvider, private val excludedBlockchains: ExcludedBlockchains, private val userWalletsStore: UserWalletsStore, + private val nftFeatureToggles: NFTFeatureToggles, ) : NFTRepository { private val networkJobs = ConcurrentHashMap() @@ -479,5 +481,14 @@ internal class DefaultNFTRepository @Inject constructor( return walletId.stringValue + "_" + network.id.value + "_" + network.derivationPath.value } - private fun Network.canHandleNFTs(): Boolean = Blockchain.fromNetworkId(backendId)?.canHandleNFTs() == true + private fun Network.canHandleNFTs(): Boolean { + val blockchain = Blockchain.fromNetworkId(backendId) + return when { + blockchain == null -> false + blockchain.isEvm() && !nftFeatureToggles.isNFTEVMEnabled -> false + (blockchain == Blockchain.Solana || blockchain == Blockchain.SolanaTestnet) && + !nftFeatureToggles.isNFTSolanaEnabled -> false + else -> blockchain.canHandleNFTs() + } + } } \ No newline at end of file diff --git a/features/nft/api/src/main/kotlin/com/tangem/features/nft/NFTFeatureToggles.kt b/features/nft/api/src/main/kotlin/com/tangem/features/nft/NFTFeatureToggles.kt index a3b0ad1cb5..8ae8a9216e 100644 --- a/features/nft/api/src/main/kotlin/com/tangem/features/nft/NFTFeatureToggles.kt +++ b/features/nft/api/src/main/kotlin/com/tangem/features/nft/NFTFeatureToggles.kt @@ -2,4 +2,6 @@ package com.tangem.features.nft interface NFTFeatureToggles { val isNFTEnabled: Boolean + val isNFTEVMEnabled: Boolean + val isNFTSolanaEnabled: Boolean } \ No newline at end of file diff --git a/features/nft/impl/src/main/kotlin/com/tangem/features/nft/DefaultNFTFeatureToggles.kt b/features/nft/impl/src/main/kotlin/com/tangem/features/nft/DefaultNFTFeatureToggles.kt index 7697217e52..a5b51c50e3 100644 --- a/features/nft/impl/src/main/kotlin/com/tangem/features/nft/DefaultNFTFeatureToggles.kt +++ b/features/nft/impl/src/main/kotlin/com/tangem/features/nft/DefaultNFTFeatureToggles.kt @@ -7,4 +7,10 @@ internal class DefaultNFTFeatureToggles( ) : NFTFeatureToggles { override val isNFTEnabled: Boolean get() = featureTogglesManager.isFeatureEnabled(name = "NFT_ENABLED") + + override val isNFTEVMEnabled: Boolean + get() = featureTogglesManager.isFeatureEnabled(name = "NFT_EVM_ENABLED") + + override val isNFTSolanaEnabled: Boolean + get() = featureTogglesManager.isFeatureEnabled(name = "NFT_SOLANA_ENABLED") } \ No newline at end of file