Updated on 2026-08-14

This commit is contained in:
Tangem 2024-12-29 10:25:09 +03:00
parent 94e12785e8
commit 43b0e6b83b
9 changed files with 29 additions and 49 deletions

View file

@ -1,11 +1,9 @@
package com.tangem.blockchainsdk package com.tangem.blockchainsdk
import com.tangem.blockchain.common.Blockchain
import com.tangem.blockchain.common.WalletManagerFactory import com.tangem.blockchain.common.WalletManagerFactory
import com.tangem.blockchain.common.network.providers.ProviderType
import com.tangem.blockchainsdk.converters.BlockchainProviderTypesConverter import com.tangem.blockchainsdk.converters.BlockchainProviderTypesConverter
import com.tangem.blockchainsdk.loader.BlockchainProvidersResponseLoader import com.tangem.blockchainsdk.providers.BlockchainProviderTypesStore
import com.tangem.blockchainsdk.store.RuntimeStore import com.tangem.blockchainsdk.providers.BlockchainProvidersResponseLoader
import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage
import com.tangem.datasource.local.config.providers.models.ProviderModel import com.tangem.datasource.local.config.providers.models.ProviderModel
import com.tangem.utils.coroutines.CoroutineDispatcherProvider import com.tangem.utils.coroutines.CoroutineDispatcherProvider
@ -16,7 +14,6 @@ import kotlinx.coroutines.launch
import timber.log.Timber import timber.log.Timber
internal typealias BlockchainProvidersResponse = Map<String, List<ProviderModel>> internal typealias BlockchainProvidersResponse = Map<String, List<ProviderModel>>
internal typealias BlockchainProviderTypes = Map<Blockchain, List<ProviderType>>
/** /**
* Implementation of Blockchain SDK components factory * Implementation of Blockchain SDK components factory
@ -31,7 +28,7 @@ internal typealias BlockchainProviderTypes = Map<Blockchain, List<ProviderType>>
internal class DefaultBlockchainSDKFactory( internal class DefaultBlockchainSDKFactory(
private val blockchainProvidersResponseLoader: BlockchainProvidersResponseLoader, private val blockchainProvidersResponseLoader: BlockchainProvidersResponseLoader,
private val environmentConfigStorage: EnvironmentConfigStorage, private val environmentConfigStorage: EnvironmentConfigStorage,
private val blockchainProviderTypesStore: RuntimeStore<BlockchainProviderTypes>, private val blockchainProviderTypesStore: BlockchainProviderTypesStore,
private val walletManagerFactoryCreator: WalletManagerFactoryCreator, private val walletManagerFactoryCreator: WalletManagerFactoryCreator,
dispatchers: CoroutineDispatcherProvider, dispatchers: CoroutineDispatcherProvider,
) : BlockchainSDKFactory { ) : BlockchainSDKFactory {

View file

@ -7,6 +7,7 @@ import com.tangem.blockchain.common.WalletManagerFactory
import com.tangem.blockchain.common.datastorage.BlockchainDataStorage import com.tangem.blockchain.common.datastorage.BlockchainDataStorage
import com.tangem.blockchain.common.logging.BlockchainSDKLogger import com.tangem.blockchain.common.logging.BlockchainSDKLogger
import com.tangem.blockchainsdk.featuretoggles.BlockchainSDKFeatureToggles import com.tangem.blockchainsdk.featuretoggles.BlockchainSDKFeatureToggles
import com.tangem.blockchainsdk.providers.BlockchainProviderTypes
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject

View file

@ -2,8 +2,8 @@ package com.tangem.blockchainsdk.converters
import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.Blockchain
import com.tangem.blockchain.common.network.providers.ProviderType import com.tangem.blockchain.common.network.providers.ProviderType
import com.tangem.blockchainsdk.BlockchainProviderTypes
import com.tangem.blockchainsdk.BlockchainProvidersResponse import com.tangem.blockchainsdk.BlockchainProvidersResponse
import com.tangem.blockchainsdk.providers.BlockchainProviderTypes
import com.tangem.blockchainsdk.utils.createPrivateProviderType import com.tangem.blockchainsdk.utils.createPrivateProviderType
import com.tangem.blockchainsdk.utils.fromNetworkId import com.tangem.blockchainsdk.utils.fromNetworkId
import com.tangem.datasource.local.config.providers.models.ProviderModel import com.tangem.datasource.local.config.providers.models.ProviderModel

View file

@ -7,8 +7,8 @@ import com.tangem.blockchainsdk.WalletManagerFactoryCreator
import com.tangem.blockchainsdk.accountcreator.DefaultAccountCreator import com.tangem.blockchainsdk.accountcreator.DefaultAccountCreator
import com.tangem.blockchainsdk.datastorage.DefaultBlockchainDataStorage import com.tangem.blockchainsdk.datastorage.DefaultBlockchainDataStorage
import com.tangem.blockchainsdk.featuretoggles.DefaultBlockchainSDKFeatureToggles import com.tangem.blockchainsdk.featuretoggles.DefaultBlockchainSDKFeatureToggles
import com.tangem.blockchainsdk.loader.BlockchainProvidersResponseLoader import com.tangem.blockchainsdk.providers.BlockchainProviderTypesStore
import com.tangem.blockchainsdk.store.DefaultRuntimeStore import com.tangem.blockchainsdk.providers.BlockchainProvidersResponseLoader
import com.tangem.core.configtoggle.feature.FeatureTogglesManager import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.api.tangemTech.TangemTechApi
import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage
@ -30,12 +30,13 @@ internal object BlockchainSDKFactoryModule {
blockchainProvidersResponseLoader: BlockchainProvidersResponseLoader, blockchainProvidersResponseLoader: BlockchainProvidersResponseLoader,
environmentConfigStorage: EnvironmentConfigStorage, environmentConfigStorage: EnvironmentConfigStorage,
walletManagerFactoryCreator: WalletManagerFactoryCreator, walletManagerFactoryCreator: WalletManagerFactoryCreator,
blockchainProviderTypesStore: BlockchainProviderTypesStore,
dispatchers: CoroutineDispatcherProvider, dispatchers: CoroutineDispatcherProvider,
): BlockchainSDKFactory { ): BlockchainSDKFactory {
return DefaultBlockchainSDKFactory( return DefaultBlockchainSDKFactory(
blockchainProvidersResponseLoader = blockchainProvidersResponseLoader, blockchainProvidersResponseLoader = blockchainProvidersResponseLoader,
environmentConfigStorage = environmentConfigStorage, environmentConfigStorage = environmentConfigStorage,
blockchainProviderTypesStore = DefaultRuntimeStore(defaultValue = emptyMap()), blockchainProviderTypesStore = blockchainProviderTypesStore,
walletManagerFactoryCreator = walletManagerFactoryCreator, walletManagerFactoryCreator = walletManagerFactoryCreator,
dispatchers = dispatchers, dispatchers = dispatchers,
) )

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
import com.tangem.datasource.local.datastore.RuntimeStateStore
import javax.inject.Inject
import javax.inject.Singleton
internal typealias BlockchainProviderTypes = Map<Blockchain, List<ProviderType>>
/**
* Blockchain provider types store
*
[REDACTED_AUTHOR]
*/
@Singleton
class BlockchainProviderTypesStore @Inject constructor() :
RuntimeStateStore<BlockchainProviderTypes> by RuntimeStateStore(emptyMap())

View file

@ -1,4 +1,4 @@
package com.tangem.blockchainsdk.loader package com.tangem.blockchainsdk.providers
import androidx.core.util.PatternsCompat import androidx.core.util.PatternsCompat
import com.google.firebase.crashlytics.FirebaseCrashlytics import com.google.firebase.crashlytics.FirebaseCrashlytics

View file

@ -1,20 +0,0 @@
package com.tangem.blockchainsdk.store
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
/**
* Default implementation of RuntimeStore
*
* @param defaultValue default value
*/
internal class DefaultRuntimeStore<T>(defaultValue: T) : RuntimeStore<T> {
private val flow = MutableStateFlow(value = defaultValue)
override fun get(): StateFlow<T> = flow
override suspend fun store(value: T) {
flow.value = value
}
}

View file

@ -1,17 +0,0 @@
package com.tangem.blockchainsdk.store
import kotlinx.coroutines.flow.StateFlow
/**
* Runtime store
*
[REDACTED_AUTHOR]
*/
internal interface RuntimeStore<T> {
/** Get flow of elements [T] */
fun get(): StateFlow<T>
/** Store [value] */
suspend fun store(value: T)
}

View file

@ -1,4 +1,4 @@
package com.tangem.blockchainsdk.loader package com.tangem.blockchainsdk.providers
import com.google.common.truth.Truth import com.google.common.truth.Truth
import com.google.firebase.crashlytics.FirebaseCrashlytics import com.google.firebase.crashlytics.FirebaseCrashlytics