Updated on 2026-08-14

This commit is contained in:
Tangem 2025-01-06 15:37:52 +03:00
parent e8af92b599
commit 5d892618a8
7 changed files with 284 additions and 42 deletions

View file

@ -8,11 +8,13 @@ import com.tangem.blockchainsdk.accountcreator.DefaultAccountCreator
import com.tangem.blockchainsdk.datastorage.DefaultBlockchainDataStorage
import com.tangem.blockchainsdk.featuretoggles.DefaultBlockchainSDKFeatureToggles
import com.tangem.blockchainsdk.providers.BlockchainProvidersTypesManager
import com.tangem.blockchainsdk.providers.DevBlockchainProvidersTypesManager
import com.tangem.blockchainsdk.providers.ProdBlockchainProvidersTypesManager
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import com.tangem.datasource.api.tangemTech.TangemTechApi
import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage
import com.tangem.datasource.local.preferences.AppPreferencesStore
import com.tangem.libs.blockchain_sdk.BuildConfig
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import dagger.Module
import dagger.Provides
@ -43,10 +45,14 @@ internal object BlockchainSDKFactoryModule {
@Provides
@Singleton
fun provideBlockchainProvidersTypesManager(
devBlockchainProvidersTypesManager: DevBlockchainProvidersTypesManager,
prodBlockchainProvidersTypesManager: ProdBlockchainProvidersTypesManager,
): BlockchainProvidersTypesManager {
// In the future, we will use different types of providers for different environments
return prodBlockchainProvidersTypesManager
return if (BuildConfig.DEBUG) {
devBlockchainProvidersTypesManager
} else {
prodBlockchainProvidersTypesManager
}
}
@Provides

View file

@ -0,0 +1,45 @@
package com.tangem.blockchainsdk.providers
import com.tangem.blockchain.common.Blockchain
import com.tangem.blockchain.common.network.providers.ProviderType
import javax.inject.Inject
import javax.inject.Singleton
import kotlin.properties.Delegates.notNull
/**
* Implementation of [BlockchainProvidersTypesManager] in DEV environment
*
* @property prodBlockchainProvidersTypesManager prod manager
* @property blockchainProviderTypesStore blockchain provider types store
*
[REDACTED_AUTHOR]
*/
@Singleton
internal class DevBlockchainProvidersTypesManager @Inject constructor(
private val prodBlockchainProvidersTypesManager: ProdBlockchainProvidersTypesManager,
private val blockchainProviderTypesStore: BlockchainProviderTypesStore,
) : BlockchainProvidersTypesManager by prodBlockchainProvidersTypesManager,
MutableBlockchainProvidersTypesManager {
private var primaryResponse: BlockchainProviderTypes by notNull()
override suspend fun update() {
prodBlockchainProvidersTypesManager.update()
primaryResponse = blockchainProviderTypesStore.get().value
}
override suspend fun update(blockchain: Blockchain, providers: List<ProviderType>) {
val currentTypes = blockchainProviderTypesStore.get().value
val updatedTypes = currentTypes + (blockchain to providers)
blockchainProviderTypesStore.store(value = updatedTypes)
}
override suspend fun isMatchWithMerged(): Boolean {
val current = blockchainProviderTypesStore.get().value
return current == primaryResponse
}
}

View file

@ -0,0 +1,18 @@
package com.tangem.blockchainsdk.providers
import com.tangem.blockchain.common.Blockchain
import com.tangem.blockchain.common.network.providers.ProviderType
/**
* Mutable blockchain providers types manager
*
[REDACTED_AUTHOR]
*/
interface MutableBlockchainProvidersTypesManager : BlockchainProvidersTypesManager {
/** Update [providers] for [blockchain] */
suspend fun update(blockchain: Blockchain, providers: List<ProviderType>)
/** Checks that current [BlockchainProviderTypes] was changed */
suspend fun isMatchWithMerged(): Boolean
}