From 7caeaf3a122d6b174f70013157450fc799dfd19d Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 2 Feb 2024 19:10:13 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../java/com/tangem/tap/TapApplication.kt | 5 ++++ .../di/domain/WalletManagersFacadeModule.kt | 6 ++-- .../com/tangem/tap/domain/TapWalletManager.kt | 13 ++++----- .../tap/proxy/redux/DaggerGraphState.kt | 2 ++ .../BlockchainWalletManagerFactoryModule.kt | 28 ++++++++++++++++++ .../DefaultBlockchainDataStorage.kt | 29 +++++++++++++++++++ .../DefaultWalletManagersFacade.kt | 6 ++-- .../utils/WalletManagerFactory.kt | 9 ++---- gradle/dependencies.toml | 2 +- 9 files changed, 78 insertions(+), 22 deletions(-) create mode 100644 core/datasource/src/main/java/com/tangem/datasource/di/BlockchainWalletManagerFactoryModule.kt create mode 100644 core/datasource/src/main/java/com/tangem/datasource/local/blockchain/DefaultBlockchainDataStorage.kt diff --git a/app/src/main/java/com/tangem/tap/TapApplication.kt b/app/src/main/java/com/tangem/tap/TapApplication.kt index f892dddee4..7e200d31b9 100644 --- a/app/src/main/java/com/tangem/tap/TapApplication.kt +++ b/app/src/main/java/com/tangem/tap/TapApplication.kt @@ -10,6 +10,7 @@ import com.orhanobut.logger.AndroidLogAdapter import com.orhanobut.logger.Logger import com.tangem.Log import com.tangem.LogFormat +import com.tangem.blockchain.common.WalletManagerFactory import com.tangem.blockchain.network.BlockchainSdkRetrofitBuilder import com.tangem.core.analytics.Analytics import com.tangem.core.analytics.filter.OneTimeEventFilter @@ -159,6 +160,9 @@ internal class TapApplication : Application(), ImageLoaderFactory { @Inject lateinit var testerFeatureToggles: TesterFeatureToggles + + @Inject + lateinit var blockchainWalletManagerFactory: WalletManagerFactory // endregion Injected override fun onCreate() { @@ -236,6 +240,7 @@ internal class TapApplication : Application(), ImageLoaderFactory { sendFeatureToggles = sendFeatureToggles, derivationsRepository = derivationsRepository, testerFeatureToggles = testerFeatureToggles, + blockchainWalletManagerFactory = blockchainWalletManagerFactory, ), ), ) diff --git a/app/src/main/java/com/tangem/tap/di/domain/WalletManagersFacadeModule.kt b/app/src/main/java/com/tangem/tap/di/domain/WalletManagersFacadeModule.kt index 02a52ce342..65a6dce65c 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/WalletManagersFacadeModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/WalletManagersFacadeModule.kt @@ -1,8 +1,8 @@ package com.tangem.tap.di.domain import com.squareup.moshi.Moshi +import com.tangem.blockchain.common.WalletManagerFactory import com.tangem.datasource.asset.AssetReader -import com.tangem.datasource.config.ConfigManager import com.tangem.datasource.di.SdkMoshi import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.datasource.local.walletmanager.WalletManagersStore @@ -24,7 +24,7 @@ internal object WalletManagersFacadeModule { fun provideWalletManagersFacade( walletManagersStore: WalletManagersStore, userWalletsStore: UserWalletsStore, - configManager: ConfigManager, + blockchainWalletManagerFactory: WalletManagerFactory, mnemonicRepository: MnemonicRepository, assetReader: AssetReader, @SdkMoshi moshi: Moshi, @@ -32,7 +32,7 @@ internal object WalletManagersFacadeModule { return DefaultWalletManagersFacade( walletManagersStore = walletManagersStore, userWalletsStore = userWalletsStore, - configManager = configManager, + blockchainWalletManagerFactory = blockchainWalletManagerFactory, assetReader = assetReader, moshi = moshi, mnemonic = mnemonicRepository.generateDefaultMnemonic(), diff --git a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt index 8d9ba42e6a..4379b387ab 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt @@ -1,23 +1,23 @@ package com.tangem.tap.domain -import com.tangem.blockchain.common.BlockchainSdkConfig import com.tangem.blockchain.common.Token import com.tangem.blockchain.common.Wallet import com.tangem.blockchain.common.WalletManagerFactory import com.tangem.core.analytics.Analytics +import com.tangem.core.analytics.models.Basic import com.tangem.datasource.config.ConfigManager import com.tangem.domain.common.extensions.withMainContext import com.tangem.domain.common.util.cardTypesResolver import com.tangem.domain.models.scan.ScanResponse import com.tangem.domain.wallets.models.UserWallet import com.tangem.operations.attestation.Attestation -import com.tangem.core.analytics.models.Basic import com.tangem.tap.common.extensions.setContext import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.features.details.redux.walletconnect.WalletConnectAction import com.tangem.tap.features.disclaimer.createDisclaimer import com.tangem.tap.features.disclaimer.redux.DisclaimerAction import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsAction +import com.tangem.tap.proxy.redux.DaggerGraphState import com.tangem.tap.store import com.tangem.tap.tangemSdkManager import com.tangem.utils.coroutines.AppCoroutineDispatcherProvider @@ -30,18 +30,15 @@ class TapWalletManager( private val dispatchers: CoroutineDispatcherProvider = AppCoroutineDispatcherProvider(), ) { - private val blockchainSdkConfig by lazy { - store.state.globalState.configManager?.config?.blockchainSdkConfig ?: BlockchainSdkConfig() - } - private var loadUserWalletDataJob: Job? = null set(value) { field?.cancel() field = value } - val walletManagerFactory: WalletManagerFactory - by lazy { WalletManagerFactory(blockchainSdkConfig) } + val walletManagerFactory: WalletManagerFactory by lazy { + store.state.daggerGraphState.get(DaggerGraphState::blockchainWalletManagerFactory) + } suspend fun onWalletSelected(userWallet: UserWallet, sendAnalyticsEvent: Boolean) { // If a previous job was running, it gets cancelled before the new one starts, diff --git a/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt b/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt index b1839fae93..19875bc1be 100644 --- a/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt +++ b/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt @@ -1,5 +1,6 @@ package com.tangem.tap.proxy.redux +import com.tangem.blockchain.common.WalletManagerFactory import com.tangem.datasource.connection.NetworkConnectionManager import com.tangem.domain.appcurrency.repository.AppCurrencyRepository import com.tangem.domain.apptheme.repository.AppThemeModeRepository @@ -57,6 +58,7 @@ data class DaggerGraphState( val currenciesRepository: CurrenciesRepository? = null, val derivationsRepository: DerivationsRepository? = null, val testerFeatureToggles: TesterFeatureToggles? = null, + val blockchainWalletManagerFactory: WalletManagerFactory? = null, ) : StateType { inline fun get(getDependency: DaggerGraphState.() -> T?): T { diff --git a/core/datasource/src/main/java/com/tangem/datasource/di/BlockchainWalletManagerFactoryModule.kt b/core/datasource/src/main/java/com/tangem/datasource/di/BlockchainWalletManagerFactoryModule.kt new file mode 100644 index 0000000000..aeec8933f9 --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/di/BlockchainWalletManagerFactoryModule.kt @@ -0,0 +1,28 @@ +package com.tangem.datasource.di + +import com.tangem.blockchain.common.WalletManagerFactory +import com.tangem.datasource.config.ConfigManager +import com.tangem.datasource.local.blockchain.DefaultBlockchainDataStorage +import com.tangem.datasource.local.preferences.AppPreferencesStore +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal object BlockchainWalletManagerFactoryModule { + + @Provides + @Singleton + fun provideBlockchainWalletManagerFactory( + configManager: ConfigManager, + appPreferencesStore: AppPreferencesStore, + ): WalletManagerFactory { + return WalletManagerFactory( + config = configManager.config.blockchainSdkConfig, + blockchainDataStorage = DefaultBlockchainDataStorage(appPreferencesStore), + ) + } +} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/blockchain/DefaultBlockchainDataStorage.kt b/core/datasource/src/main/java/com/tangem/datasource/local/blockchain/DefaultBlockchainDataStorage.kt new file mode 100644 index 0000000000..3f3d7192f5 --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/local/blockchain/DefaultBlockchainDataStorage.kt @@ -0,0 +1,29 @@ +package com.tangem.datasource.local.blockchain + +import androidx.datastore.preferences.core.edit +import androidx.datastore.preferences.core.stringPreferencesKey +import com.tangem.blockchain.common.datastorage.BlockchainDataStorage +import com.tangem.datasource.local.preferences.AppPreferencesStore +import com.tangem.datasource.local.preferences.utils.getSyncOrNull + +/** + * [BlockchainDataStorage] implementation + * + * @property appPreferencesStore app preferences store + * +[REDACTED_AUTHOR] + */ +internal class DefaultBlockchainDataStorage( + private val appPreferencesStore: AppPreferencesStore, +) : BlockchainDataStorage { + + override suspend fun getOrNull(key: String): String? { + return appPreferencesStore.getSyncOrNull(key = stringPreferencesKey(name = key)) + } + + override suspend fun store(key: String, value: String) { + appPreferencesStore.edit { + it[stringPreferencesKey(key)] = value + } + } +} \ No newline at end of file diff --git a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt index 213a569e11..f5bbe8c596 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt @@ -19,7 +19,6 @@ import com.tangem.blockchain.extensions.SimpleResult import com.tangem.crypto.bip39.Mnemonic import com.tangem.crypto.hdWallet.DerivationPath import com.tangem.datasource.asset.AssetReader -import com.tangem.datasource.config.ConfigManager import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.datasource.local.walletmanager.WalletManagersStore import com.tangem.domain.common.util.hasDerivation @@ -39,6 +38,7 @@ import kotlinx.coroutines.flow.Flow import timber.log.Timber import java.math.BigDecimal import java.util.EnumSet +import com.tangem.blockchain.common.WalletManagerFactory as BlockchainWalletManagerFactory @Suppress("LargeClass", "TooManyFunctions") // FIXME: Move to its own module and make internal @@ -46,7 +46,7 @@ import java.util.EnumSet class DefaultWalletManagersFacade( private val walletManagersStore: WalletManagersStore, private val userWalletsStore: UserWalletsStore, - configManager: ConfigManager, + blockchainWalletManagerFactory: BlockchainWalletManagerFactory, mnemonic: Mnemonic, assetReader: AssetReader, moshi: Moshi, @@ -54,7 +54,7 @@ class DefaultWalletManagersFacade( private val demoConfig by lazy { DemoConfig() } private val resultFactory by lazy { UpdateWalletManagerResultFactory() } - private val walletManagerFactory by lazy { WalletManagerFactory(configManager) } + private val walletManagerFactory by lazy { WalletManagerFactory(blockchainWalletManagerFactory) } private val sdkTokenConverter by lazy { SdkTokenConverter() } private val txHistoryStateConverter by lazy { SdkTransactionHistoryStateConverter() } private val txHistoryItemConverter by lazy { SdkTransactionHistoryItemConverter(assetReader, moshi) } diff --git a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/WalletManagerFactory.kt b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/WalletManagerFactory.kt index 9e83e20e3a..d00e6d64a1 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/WalletManagerFactory.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/WalletManagerFactory.kt @@ -3,23 +3,18 @@ package com.tangem.domain.walletmanager.utils import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.DerivationParams import com.tangem.blockchain.common.WalletManager -import com.tangem.blockchain.common.WalletManagerFactory import com.tangem.crypto.hdWallet.DerivationPath -import com.tangem.datasource.config.ConfigManager import com.tangem.domain.common.DerivationStyleProvider import com.tangem.domain.common.extensions.makeWalletManagerForApp import com.tangem.domain.common.util.derivationStyleProvider import com.tangem.domain.models.scan.ScanResponse import timber.log.Timber +import com.tangem.blockchain.common.WalletManagerFactory as BlockchainWalletManagerFactory internal class WalletManagerFactory( - private val configManager: ConfigManager, + private val sdkWalletManagerFactory: BlockchainWalletManagerFactory, ) { - private val sdkWalletManagerFactory by lazy { - WalletManagerFactory(configManager.config.blockchainSdkConfig) - } - fun createWalletManager( scanResponse: ScanResponse, blockchain: Blockchain, diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index f6b9405dcf..f807b5d3a4 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -85,7 +85,7 @@ spr-client = "3.6.2" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "develop-471" +tangemBlockchainSdk = "develop-473" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "develop-324" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^