From 2a97712a720fb13551e33844b0603b1b0d38f76a Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 9 Oct 2023 11:49:43 +0800 Subject: [PATCH] Updated on 2026-08-14 --- .../java/com/tangem/tap/TapApplication.kt | 41 +++++++++++-------- .../common/feedback/AdditionalFeedbackInfo.kt | 31 +++++++++++++- .../DefaultWalletManagersStore.kt | 5 +++ .../walletmanager/WalletManagersStore.kt | 3 ++ .../DefaultWalletManagersFacade.kt | 7 +++- .../walletmanager/WalletManagersFacade.kt | 5 ++- 6 files changed, 72 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/TapApplication.kt b/app/src/main/java/com/tangem/tap/TapApplication.kt index 75211c56c5..919b23292e 100644 --- a/app/src/main/java/com/tangem/tap/TapApplication.kt +++ b/app/src/main/java/com/tangem/tap/TapApplication.kt @@ -255,9 +255,18 @@ internal class TapApplication : Application(), ImageLoaderFactory { walletConnectRepository = WalletConnectRepository(this) val configLoader = FeaturesLocalLoader(assetReader, MoshiConverter.sdkMoshi, BuildConfig.ENVIRONMENT) + initUserWalletsListManager() + + // TODO: Try to performance and user experience. + // [REDACTED_JIRA] + runBlocking { + featureTogglesManager.init() + appRatingRepository.initialize() + // learn2earnInteractor.init() + } + initConfigManager(configLoader, ::initWithConfigDependency) initWarningMessagesManager() - initUserWalletsListManager() loadNativeLibraries() @@ -283,14 +292,6 @@ internal class TapApplication : Application(), ImageLoaderFactory { appStateHolder.userTokensRepository = userTokensRepository appStateHolder.walletStoresManager = walletStoresManager - // TODO: Try to performance and user experience. - // [REDACTED_JIRA] - runBlocking { - featureTogglesManager.init() - appRatingRepository.initialize() - // learn2earnInteractor.init() - } - initTopUpController() walletConnect2Repository.init(projectId = configManager.config.walletConnectProjectId) } @@ -354,14 +355,20 @@ internal class TapApplication : Application(), ImageLoaderFactory { foregroundActivityObserver: ForegroundActivityObserver, store: Store, ) { - fun initAdditionalFeedbackInfo(context: Context): AdditionalFeedbackInfo = AdditionalFeedbackInfo().apply { - appVersion = try { - // TODO don't use deprecated method - val pInfo = context.packageManager.getPackageInfo(context.packageName, 0) - pInfo.versionName - } catch (e: PackageManager.NameNotFoundException) { - e.printStackTrace() - "x.y.z" + fun initAdditionalFeedbackInfo(context: Context): AdditionalFeedbackInfo { + return AdditionalFeedbackInfo( + userWalletsListManager = userWalletsListManager, + walletManagersFacade = walletManagersFacade, + walletFeatureToggles = walletFeatureToggles, + ).apply { + appVersion = try { + // TODO don't use deprecated method + val pInfo = context.packageManager.getPackageInfo(context.packageName, 0) + pInfo.versionName + } catch (e: PackageManager.NameNotFoundException) { + e.printStackTrace() + "x.y.z" + } } } diff --git a/app/src/main/java/com/tangem/tap/common/feedback/AdditionalFeedbackInfo.kt b/app/src/main/java/com/tangem/tap/common/feedback/AdditionalFeedbackInfo.kt index 947691b26f..a3407ad4d2 100644 --- a/app/src/main/java/com/tangem/tap/common/feedback/AdditionalFeedbackInfo.kt +++ b/app/src/main/java/com/tangem/tap/common/feedback/AdditionalFeedbackInfo.kt @@ -6,9 +6,36 @@ import com.tangem.blockchain.common.address.Address import com.tangem.domain.models.scan.CardDTO import com.tangem.domain.models.scan.ScanResponse import com.tangem.domain.userwallets.UserWalletIdBuilder +import com.tangem.domain.walletmanager.WalletManagersFacade +import com.tangem.domain.wallets.legacy.UserWalletsListManager +import com.tangem.features.wallet.featuretoggles.WalletFeatureToggles import com.tangem.tap.common.extensions.stripZeroPlainString +import com.tangem.tap.scope +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach + +class AdditionalFeedbackInfo( + userWalletsListManager: UserWalletsListManager, + walletManagersFacade: WalletManagersFacade, + walletFeatureToggles: WalletFeatureToggles, +) { + + init { + if (walletFeatureToggles.isRedesignedScreenEnabled) { + userWalletsListManager.selectedUserWallet + .distinctUntilChanged() + .onEach { userWallet -> + setCardInfo(data = userWallet.scanResponse) + + walletManagersFacade.getAll(userWalletId = userWallet.walletId) + .onEach(::setWalletsInfo) + .launchIn(scope) + } + .launchIn(scope) + } + } -class AdditionalFeedbackInfo { class EmailWalletInfo( var blockchain: Blockchain = Blockchain.Unknown, var derivationPath: String = "", @@ -46,6 +73,7 @@ class AdditionalFeedbackInfo { private val Address.name: String get() = type.javaClass.simpleName + @Deprecated("Don't use it directly") fun setCardInfo(data: ScanResponse) { cardId = data.card.cardId cardBlockchain = data.walletData?.blockchain ?: "" @@ -55,6 +83,7 @@ class AdditionalFeedbackInfo { userWalletId = UserWalletIdBuilder.scanResponse(data).build()?.stringValue ?: "" } + @Deprecated("Don't use it directly") fun setWalletsInfo(walletManagers: List) { walletsInfo.clear() tokens.clear() diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/walletmanager/DefaultWalletManagersStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/walletmanager/DefaultWalletManagersStore.kt index 36bc7723c2..1222edafb4 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/walletmanager/DefaultWalletManagersStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/walletmanager/DefaultWalletManagersStore.kt @@ -6,6 +6,7 @@ import com.tangem.datasource.local.datastore.core.StringKeyDataStore import com.tangem.datasource.local.datastore.core.StringKeyDataStoreDecorator import com.tangem.domain.wallets.models.UserWalletId import com.tangem.utils.extensions.addOrReplace +import kotlinx.coroutines.flow.Flow internal class DefaultWalletManagersStore( dataStore: StringKeyDataStore>, @@ -15,6 +16,10 @@ internal class DefaultWalletManagersStore( return key.stringValue } + override fun getAll(userWalletId: UserWalletId): Flow> { + return get(key = userWalletId) + } + override suspend fun getSyncOrNull( userWalletId: UserWalletId, blockchain: Blockchain, diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/walletmanager/WalletManagersStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/walletmanager/WalletManagersStore.kt index c025cf6911..8506eb5803 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/walletmanager/WalletManagersStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/walletmanager/WalletManagersStore.kt @@ -3,9 +3,12 @@ package com.tangem.datasource.local.walletmanager import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.WalletManager import com.tangem.domain.wallets.models.UserWalletId +import kotlinx.coroutines.flow.Flow interface WalletManagersStore { + fun getAll(userWalletId: UserWalletId): Flow> + suspend fun getSyncOrNull( userWalletId: UserWalletId, blockchain: Blockchain, 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 7d0e1e2593..9851ae5bc8 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 @@ -7,8 +7,8 @@ import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.BlockchainSdkError import com.tangem.blockchain.common.WalletManager import com.tangem.blockchain.common.address.Address -import com.tangem.blockchain.common.txhistory.TransactionHistoryRequest import com.tangem.blockchain.common.address.AddressType +import com.tangem.blockchain.common.txhistory.TransactionHistoryRequest import com.tangem.blockchain.extensions.Result import com.tangem.crypto.hdWallet.DerivationPath import com.tangem.datasource.config.ConfigManager @@ -26,6 +26,7 @@ import com.tangem.domain.walletmanager.model.UpdateWalletManagerResult import com.tangem.domain.walletmanager.utils.* import com.tangem.domain.wallets.models.UserWallet import com.tangem.domain.wallets.models.UserWalletId +import kotlinx.coroutines.flow.Flow import timber.log.Timber import java.math.BigDecimal @@ -275,6 +276,10 @@ class DefaultWalletManagersFacade( return if (manager is ExistentialDepositProvider) manager.getExistentialDeposit() else null } + override fun getAll(userWalletId: UserWalletId): Flow> { + return walletManagersStore.getAll(userWalletId) + } + private fun updateWalletManagerTokensIfNeeded(walletManager: WalletManager, tokens: Set) { if (tokens.isEmpty()) return diff --git a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/WalletManagersFacade.kt b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/WalletManagersFacade.kt index 5be94faf27..94ce68d1d3 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/WalletManagersFacade.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/WalletManagersFacade.kt @@ -4,15 +4,16 @@ import com.tangem.blockchain.blockchains.solana.RentProvider import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.WalletManager import com.tangem.blockchain.common.address.Address +import com.tangem.blockchain.common.address.AddressType import com.tangem.domain.tokens.model.CryptoCurrency import com.tangem.domain.tokens.model.Network import com.tangem.domain.tokens.model.warnings.CryptoCurrencyWarning -import com.tangem.blockchain.common.address.AddressType import com.tangem.domain.txhistory.models.PaginationWrapper import com.tangem.domain.txhistory.models.TxHistoryItem import com.tangem.domain.txhistory.models.TxHistoryState import com.tangem.domain.walletmanager.model.UpdateWalletManagerResult import com.tangem.domain.wallets.models.UserWalletId +import kotlinx.coroutines.flow.Flow import java.math.BigDecimal // TODO: Move to its own module @@ -97,4 +98,6 @@ interface WalletManagersFacade { * deactivated and any remaining funds will be destroyed. */ suspend fun getExistentialDeposit(userWalletId: UserWalletId, network: Network): BigDecimal? + + fun getAll(userWalletId: UserWalletId): Flow> } \ No newline at end of file