Updated on 2026-08-14
This commit is contained in:
parent
ad0c793b00
commit
7caeaf3a12
9 changed files with 78 additions and 22 deletions
|
|
@ -10,6 +10,7 @@ import com.orhanobut.logger.AndroidLogAdapter
|
||||||
import com.orhanobut.logger.Logger
|
import com.orhanobut.logger.Logger
|
||||||
import com.tangem.Log
|
import com.tangem.Log
|
||||||
import com.tangem.LogFormat
|
import com.tangem.LogFormat
|
||||||
|
import com.tangem.blockchain.common.WalletManagerFactory
|
||||||
import com.tangem.blockchain.network.BlockchainSdkRetrofitBuilder
|
import com.tangem.blockchain.network.BlockchainSdkRetrofitBuilder
|
||||||
import com.tangem.core.analytics.Analytics
|
import com.tangem.core.analytics.Analytics
|
||||||
import com.tangem.core.analytics.filter.OneTimeEventFilter
|
import com.tangem.core.analytics.filter.OneTimeEventFilter
|
||||||
|
|
@ -159,6 +160,9 @@ internal class TapApplication : Application(), ImageLoaderFactory {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var testerFeatureToggles: TesterFeatureToggles
|
lateinit var testerFeatureToggles: TesterFeatureToggles
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
lateinit var blockchainWalletManagerFactory: WalletManagerFactory
|
||||||
// endregion Injected
|
// endregion Injected
|
||||||
|
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
|
|
@ -236,6 +240,7 @@ internal class TapApplication : Application(), ImageLoaderFactory {
|
||||||
sendFeatureToggles = sendFeatureToggles,
|
sendFeatureToggles = sendFeatureToggles,
|
||||||
derivationsRepository = derivationsRepository,
|
derivationsRepository = derivationsRepository,
|
||||||
testerFeatureToggles = testerFeatureToggles,
|
testerFeatureToggles = testerFeatureToggles,
|
||||||
|
blockchainWalletManagerFactory = blockchainWalletManagerFactory,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
package com.tangem.tap.di.domain
|
package com.tangem.tap.di.domain
|
||||||
|
|
||||||
import com.squareup.moshi.Moshi
|
import com.squareup.moshi.Moshi
|
||||||
|
import com.tangem.blockchain.common.WalletManagerFactory
|
||||||
import com.tangem.datasource.asset.AssetReader
|
import com.tangem.datasource.asset.AssetReader
|
||||||
import com.tangem.datasource.config.ConfigManager
|
|
||||||
import com.tangem.datasource.di.SdkMoshi
|
import com.tangem.datasource.di.SdkMoshi
|
||||||
import com.tangem.datasource.local.userwallet.UserWalletsStore
|
import com.tangem.datasource.local.userwallet.UserWalletsStore
|
||||||
import com.tangem.datasource.local.walletmanager.WalletManagersStore
|
import com.tangem.datasource.local.walletmanager.WalletManagersStore
|
||||||
|
|
@ -24,7 +24,7 @@ internal object WalletManagersFacadeModule {
|
||||||
fun provideWalletManagersFacade(
|
fun provideWalletManagersFacade(
|
||||||
walletManagersStore: WalletManagersStore,
|
walletManagersStore: WalletManagersStore,
|
||||||
userWalletsStore: UserWalletsStore,
|
userWalletsStore: UserWalletsStore,
|
||||||
configManager: ConfigManager,
|
blockchainWalletManagerFactory: WalletManagerFactory,
|
||||||
mnemonicRepository: MnemonicRepository,
|
mnemonicRepository: MnemonicRepository,
|
||||||
assetReader: AssetReader,
|
assetReader: AssetReader,
|
||||||
@SdkMoshi moshi: Moshi,
|
@SdkMoshi moshi: Moshi,
|
||||||
|
|
@ -32,7 +32,7 @@ internal object WalletManagersFacadeModule {
|
||||||
return DefaultWalletManagersFacade(
|
return DefaultWalletManagersFacade(
|
||||||
walletManagersStore = walletManagersStore,
|
walletManagersStore = walletManagersStore,
|
||||||
userWalletsStore = userWalletsStore,
|
userWalletsStore = userWalletsStore,
|
||||||
configManager = configManager,
|
blockchainWalletManagerFactory = blockchainWalletManagerFactory,
|
||||||
assetReader = assetReader,
|
assetReader = assetReader,
|
||||||
moshi = moshi,
|
moshi = moshi,
|
||||||
mnemonic = mnemonicRepository.generateDefaultMnemonic(),
|
mnemonic = mnemonicRepository.generateDefaultMnemonic(),
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,23 @@
|
||||||
package com.tangem.tap.domain
|
package com.tangem.tap.domain
|
||||||
|
|
||||||
import com.tangem.blockchain.common.BlockchainSdkConfig
|
|
||||||
import com.tangem.blockchain.common.Token
|
import com.tangem.blockchain.common.Token
|
||||||
import com.tangem.blockchain.common.Wallet
|
import com.tangem.blockchain.common.Wallet
|
||||||
import com.tangem.blockchain.common.WalletManagerFactory
|
import com.tangem.blockchain.common.WalletManagerFactory
|
||||||
import com.tangem.core.analytics.Analytics
|
import com.tangem.core.analytics.Analytics
|
||||||
|
import com.tangem.core.analytics.models.Basic
|
||||||
import com.tangem.datasource.config.ConfigManager
|
import com.tangem.datasource.config.ConfigManager
|
||||||
import com.tangem.domain.common.extensions.withMainContext
|
import com.tangem.domain.common.extensions.withMainContext
|
||||||
import com.tangem.domain.common.util.cardTypesResolver
|
import com.tangem.domain.common.util.cardTypesResolver
|
||||||
import com.tangem.domain.models.scan.ScanResponse
|
import com.tangem.domain.models.scan.ScanResponse
|
||||||
import com.tangem.domain.wallets.models.UserWallet
|
import com.tangem.domain.wallets.models.UserWallet
|
||||||
import com.tangem.operations.attestation.Attestation
|
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.extensions.setContext
|
||||||
import com.tangem.tap.common.redux.global.GlobalAction
|
import com.tangem.tap.common.redux.global.GlobalAction
|
||||||
import com.tangem.tap.features.details.redux.walletconnect.WalletConnectAction
|
import com.tangem.tap.features.details.redux.walletconnect.WalletConnectAction
|
||||||
import com.tangem.tap.features.disclaimer.createDisclaimer
|
import com.tangem.tap.features.disclaimer.createDisclaimer
|
||||||
import com.tangem.tap.features.disclaimer.redux.DisclaimerAction
|
import com.tangem.tap.features.disclaimer.redux.DisclaimerAction
|
||||||
import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsAction
|
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.store
|
||||||
import com.tangem.tap.tangemSdkManager
|
import com.tangem.tap.tangemSdkManager
|
||||||
import com.tangem.utils.coroutines.AppCoroutineDispatcherProvider
|
import com.tangem.utils.coroutines.AppCoroutineDispatcherProvider
|
||||||
|
|
@ -30,18 +30,15 @@ class TapWalletManager(
|
||||||
private val dispatchers: CoroutineDispatcherProvider = AppCoroutineDispatcherProvider(),
|
private val dispatchers: CoroutineDispatcherProvider = AppCoroutineDispatcherProvider(),
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private val blockchainSdkConfig by lazy {
|
|
||||||
store.state.globalState.configManager?.config?.blockchainSdkConfig ?: BlockchainSdkConfig()
|
|
||||||
}
|
|
||||||
|
|
||||||
private var loadUserWalletDataJob: Job? = null
|
private var loadUserWalletDataJob: Job? = null
|
||||||
set(value) {
|
set(value) {
|
||||||
field?.cancel()
|
field?.cancel()
|
||||||
field = value
|
field = value
|
||||||
}
|
}
|
||||||
|
|
||||||
val walletManagerFactory: WalletManagerFactory
|
val walletManagerFactory: WalletManagerFactory by lazy {
|
||||||
by lazy { WalletManagerFactory(blockchainSdkConfig) }
|
store.state.daggerGraphState.get(DaggerGraphState::blockchainWalletManagerFactory)
|
||||||
|
}
|
||||||
|
|
||||||
suspend fun onWalletSelected(userWallet: UserWallet, sendAnalyticsEvent: Boolean) {
|
suspend fun onWalletSelected(userWallet: UserWallet, sendAnalyticsEvent: Boolean) {
|
||||||
// If a previous job was running, it gets cancelled before the new one starts,
|
// If a previous job was running, it gets cancelled before the new one starts,
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.tangem.tap.proxy.redux
|
package com.tangem.tap.proxy.redux
|
||||||
|
|
||||||
|
import com.tangem.blockchain.common.WalletManagerFactory
|
||||||
import com.tangem.datasource.connection.NetworkConnectionManager
|
import com.tangem.datasource.connection.NetworkConnectionManager
|
||||||
import com.tangem.domain.appcurrency.repository.AppCurrencyRepository
|
import com.tangem.domain.appcurrency.repository.AppCurrencyRepository
|
||||||
import com.tangem.domain.apptheme.repository.AppThemeModeRepository
|
import com.tangem.domain.apptheme.repository.AppThemeModeRepository
|
||||||
|
|
@ -57,6 +58,7 @@ data class DaggerGraphState(
|
||||||
val currenciesRepository: CurrenciesRepository? = null,
|
val currenciesRepository: CurrenciesRepository? = null,
|
||||||
val derivationsRepository: DerivationsRepository? = null,
|
val derivationsRepository: DerivationsRepository? = null,
|
||||||
val testerFeatureToggles: TesterFeatureToggles? = null,
|
val testerFeatureToggles: TesterFeatureToggles? = null,
|
||||||
|
val blockchainWalletManagerFactory: WalletManagerFactory? = null,
|
||||||
) : StateType {
|
) : StateType {
|
||||||
|
|
||||||
inline fun <reified T> get(getDependency: DaggerGraphState.() -> T?): T {
|
inline fun <reified T> get(getDependency: DaggerGraphState.() -> T?): T {
|
||||||
|
|
|
||||||
|
|
@ -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),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -19,7 +19,6 @@ import com.tangem.blockchain.extensions.SimpleResult
|
||||||
import com.tangem.crypto.bip39.Mnemonic
|
import com.tangem.crypto.bip39.Mnemonic
|
||||||
import com.tangem.crypto.hdWallet.DerivationPath
|
import com.tangem.crypto.hdWallet.DerivationPath
|
||||||
import com.tangem.datasource.asset.AssetReader
|
import com.tangem.datasource.asset.AssetReader
|
||||||
import com.tangem.datasource.config.ConfigManager
|
|
||||||
import com.tangem.datasource.local.userwallet.UserWalletsStore
|
import com.tangem.datasource.local.userwallet.UserWalletsStore
|
||||||
import com.tangem.datasource.local.walletmanager.WalletManagersStore
|
import com.tangem.datasource.local.walletmanager.WalletManagersStore
|
||||||
import com.tangem.domain.common.util.hasDerivation
|
import com.tangem.domain.common.util.hasDerivation
|
||||||
|
|
@ -39,6 +38,7 @@ import kotlinx.coroutines.flow.Flow
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.math.BigDecimal
|
import java.math.BigDecimal
|
||||||
import java.util.EnumSet
|
import java.util.EnumSet
|
||||||
|
import com.tangem.blockchain.common.WalletManagerFactory as BlockchainWalletManagerFactory
|
||||||
|
|
||||||
@Suppress("LargeClass", "TooManyFunctions")
|
@Suppress("LargeClass", "TooManyFunctions")
|
||||||
// FIXME: Move to its own module and make internal
|
// FIXME: Move to its own module and make internal
|
||||||
|
|
@ -46,7 +46,7 @@ import java.util.EnumSet
|
||||||
class DefaultWalletManagersFacade(
|
class DefaultWalletManagersFacade(
|
||||||
private val walletManagersStore: WalletManagersStore,
|
private val walletManagersStore: WalletManagersStore,
|
||||||
private val userWalletsStore: UserWalletsStore,
|
private val userWalletsStore: UserWalletsStore,
|
||||||
configManager: ConfigManager,
|
blockchainWalletManagerFactory: BlockchainWalletManagerFactory,
|
||||||
mnemonic: Mnemonic,
|
mnemonic: Mnemonic,
|
||||||
assetReader: AssetReader,
|
assetReader: AssetReader,
|
||||||
moshi: Moshi,
|
moshi: Moshi,
|
||||||
|
|
@ -54,7 +54,7 @@ class DefaultWalletManagersFacade(
|
||||||
|
|
||||||
private val demoConfig by lazy { DemoConfig() }
|
private val demoConfig by lazy { DemoConfig() }
|
||||||
private val resultFactory by lazy { UpdateWalletManagerResultFactory() }
|
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 sdkTokenConverter by lazy { SdkTokenConverter() }
|
||||||
private val txHistoryStateConverter by lazy { SdkTransactionHistoryStateConverter() }
|
private val txHistoryStateConverter by lazy { SdkTransactionHistoryStateConverter() }
|
||||||
private val txHistoryItemConverter by lazy { SdkTransactionHistoryItemConverter(assetReader, moshi) }
|
private val txHistoryItemConverter by lazy { SdkTransactionHistoryItemConverter(assetReader, moshi) }
|
||||||
|
|
|
||||||
|
|
@ -3,23 +3,18 @@ package com.tangem.domain.walletmanager.utils
|
||||||
import com.tangem.blockchain.common.Blockchain
|
import com.tangem.blockchain.common.Blockchain
|
||||||
import com.tangem.blockchain.common.DerivationParams
|
import com.tangem.blockchain.common.DerivationParams
|
||||||
import com.tangem.blockchain.common.WalletManager
|
import com.tangem.blockchain.common.WalletManager
|
||||||
import com.tangem.blockchain.common.WalletManagerFactory
|
|
||||||
import com.tangem.crypto.hdWallet.DerivationPath
|
import com.tangem.crypto.hdWallet.DerivationPath
|
||||||
import com.tangem.datasource.config.ConfigManager
|
|
||||||
import com.tangem.domain.common.DerivationStyleProvider
|
import com.tangem.domain.common.DerivationStyleProvider
|
||||||
import com.tangem.domain.common.extensions.makeWalletManagerForApp
|
import com.tangem.domain.common.extensions.makeWalletManagerForApp
|
||||||
import com.tangem.domain.common.util.derivationStyleProvider
|
import com.tangem.domain.common.util.derivationStyleProvider
|
||||||
import com.tangem.domain.models.scan.ScanResponse
|
import com.tangem.domain.models.scan.ScanResponse
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
import com.tangem.blockchain.common.WalletManagerFactory as BlockchainWalletManagerFactory
|
||||||
|
|
||||||
internal class WalletManagerFactory(
|
internal class WalletManagerFactory(
|
||||||
private val configManager: ConfigManager,
|
private val sdkWalletManagerFactory: BlockchainWalletManagerFactory,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private val sdkWalletManagerFactory by lazy {
|
|
||||||
WalletManagerFactory(configManager.config.blockchainSdkConfig)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun createWalletManager(
|
fun createWalletManager(
|
||||||
scanResponse: ScanResponse,
|
scanResponse: ScanResponse,
|
||||||
blockchain: Blockchain,
|
blockchain: Blockchain,
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@ spr-client = "3.6.2"
|
||||||
# endregion Other libraries
|
# endregion Other libraries
|
||||||
|
|
||||||
# region Tangem
|
# region Tangem
|
||||||
tangemBlockchainSdk = "develop-471"
|
tangemBlockchainSdk = "develop-473"
|
||||||
#tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds
|
#tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds
|
||||||
tangemCardSdk = "develop-324"
|
tangemCardSdk = "develop-324"
|
||||||
#tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^
|
#tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue