From 4242a8f2fb420895a5985d095bea685fad696aa8 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 4 Nov 2025 18:03:47 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../main/java/com/tangem/tap/MainActivity.kt | 32 ---- .../java/com/tangem/tap/di/ActivityModule.kt | 19 -- .../tap/di/domain/TokensDomainModule.kt | 9 - .../tangem/data/tokens/di/TokensDataModule.kt | 16 -- ...ultPolkadotAccountHealthCheckRepository.kt | 179 ------------------ .../GetPolkadotCheckHasImmortalUseCase.kt | 11 -- .../tokens/GetPolkadotCheckHasResetUseCase.kt | 12 -- .../RunPolkadotAccountHealthCheckUseCase.kt | 15 -- .../PolkadotAccountHealthCheckRepository.kt | 14 -- .../implementors/MultiWalletContentLoader.kt | 11 +- .../MultiWalletContentLoaderFactory.kt | 3 - .../SingleWalletWithTokenContentLoader.kt | 3 - ...ngleWalletWithTokenContentLoaderFactory.kt | 3 - .../subscribers/BasicTokenListSubscriber.kt | 29 +-- .../MultiWalletTokenListSubscriber.kt | 2 - .../SingleWalletWithTokenListSubscriber.kt | 2 - 16 files changed, 6 insertions(+), 354 deletions(-) delete mode 100644 data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultPolkadotAccountHealthCheckRepository.kt delete mode 100644 domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetPolkadotCheckHasImmortalUseCase.kt delete mode 100644 domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetPolkadotCheckHasResetUseCase.kt delete mode 100644 domain/tokens/src/main/kotlin/com/tangem/domain/tokens/RunPolkadotAccountHealthCheckUseCase.kt delete mode 100644 domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/PolkadotAccountHealthCheckRepository.kt diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index 9d6af9296f..0ef437226d 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -22,7 +22,6 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb import androidx.core.net.toUri import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen -import androidx.lifecycle.Lifecycle import androidx.lifecycle.flowWithLifecycle import androidx.lifecycle.lifecycleScope import arrow.core.getOrElse @@ -44,11 +43,8 @@ import com.tangem.domain.settings.SetGoogleServicesAvailabilityUseCase import com.tangem.domain.settings.ShouldInitiallyAskPermissionUseCase import com.tangem.domain.settings.repositories.SettingsRepository import com.tangem.domain.staking.SendUnsubmittedHashesUseCase -import com.tangem.domain.tokens.GetPolkadotCheckHasImmortalUseCase -import com.tangem.domain.tokens.GetPolkadotCheckHasResetUseCase import com.tangem.domain.wallets.legacy.UserWalletsListManager import com.tangem.domain.wallets.usecase.ClearAllHotWalletContextualUnlockUseCase -import com.tangem.feature.wallet.presentation.wallet.analytics.WalletScreenAnalyticsEvent import com.tangem.features.hotwallet.HotWalletFeatureToggles import com.tangem.features.tangempay.TangemPayFeatureToggles import com.tangem.features.tester.api.TesterMenuLauncher @@ -115,12 +111,6 @@ class MainActivity : AppCompatActivity(), ActivityResultCallbackHolder { @Inject lateinit var sendUnsubmittedHashesUseCase: SendUnsubmittedHashesUseCase - @Inject - lateinit var getPolkadotCheckHasResetUseCase: GetPolkadotCheckHasResetUseCase - - @Inject - lateinit var getPolkadotCheckHasImmortalUseCase: GetPolkadotCheckHasImmortalUseCase - @Inject lateinit var analyticsEventsHandler: AnalyticsEventHandler @@ -228,7 +218,6 @@ class MainActivity : AppCompatActivity(), ActivityResultCallbackHolder { initContent() - observePolkadotAccountHealthCheck() sendStakingUnsubmittedHashes() checkGoogleServicesAvailability() @@ -436,27 +425,6 @@ class MainActivity : AppCompatActivity(), ActivityResultCallbackHolder { } } - private fun observePolkadotAccountHealthCheck() { - lifecycleScope.launch { - getPolkadotCheckHasResetUseCase() - .flowWithLifecycle(lifecycle, minActiveState = Lifecycle.State.CREATED) - .distinctUntilChanged() - .collect { - analyticsEventsHandler.send(WalletScreenAnalyticsEvent.Token.PolkadotAccountReset(it.second)) - } - } - lifecycleScope.launch { - getPolkadotCheckHasImmortalUseCase() - .flowWithLifecycle(lifecycle, minActiveState = Lifecycle.State.CREATED) - .distinctUntilChanged() - .collect { (_, hasImmortalTransaction) -> - analyticsEventsHandler.send( - WalletScreenAnalyticsEvent.Token.PolkadotImmortalTransactions(hasImmortalTransaction), - ) - } - } - } - private fun sendStakingUnsubmittedHashes() { lifecycleScope.launch { sendUnsubmittedHashesUseCase.invoke() diff --git a/app/src/main/java/com/tangem/tap/di/ActivityModule.kt b/app/src/main/java/com/tangem/tap/di/ActivityModule.kt index e963c1f140..1ee8ec2a46 100644 --- a/app/src/main/java/com/tangem/tap/di/ActivityModule.kt +++ b/app/src/main/java/com/tangem/tap/di/ActivityModule.kt @@ -5,10 +5,7 @@ import com.tangem.datasource.exchangeservice.swap.ExpressServiceLoader import com.tangem.domain.card.ScanCardUseCase import com.tangem.domain.card.repository.CardSdkConfigRepository import com.tangem.domain.exchange.RampStateManager -import com.tangem.domain.tokens.GetPolkadotCheckHasImmortalUseCase -import com.tangem.domain.tokens.GetPolkadotCheckHasResetUseCase import com.tangem.domain.tokens.repository.CurrenciesRepository -import com.tangem.domain.tokens.repository.PolkadotAccountHealthCheckRepository import com.tangem.sdk.api.TangemSdkManager import com.tangem.tap.domain.scanCard.repository.DefaultScanCardRepository import com.tangem.tap.network.exchangeServices.DefaultRampManager @@ -66,20 +63,4 @@ internal object ActivityModule { fun provideActivityDelayedWorkCoroutineScope(): CoroutineScope { return CoroutineScope(SupervisorJob() + Dispatchers.IO) } - - @Provides - @Singleton - fun provideGetPolkadotCheckHasResetUseCase( - polkadotAccountHealthCheckRepository: PolkadotAccountHealthCheckRepository, - ): GetPolkadotCheckHasResetUseCase { - return GetPolkadotCheckHasResetUseCase(polkadotAccountHealthCheckRepository) - } - - @Provides - @Singleton - fun provideGetPolkadotCheckHasImmortalUseCase( - polkadotAccountHealthCheckRepository: PolkadotAccountHealthCheckRepository, - ): GetPolkadotCheckHasImmortalUseCase { - return GetPolkadotCheckHasImmortalUseCase(polkadotAccountHealthCheckRepository) - } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/di/domain/TokensDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/TokensDomainModule.kt index 960857e2eb..9a22983e55 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/TokensDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/TokensDomainModule.kt @@ -22,7 +22,6 @@ import com.tangem.domain.tokens.operations.BaseCurrencyStatusOperations import com.tangem.domain.tokens.operations.CachedCurrenciesStatusesOperations import com.tangem.domain.tokens.repository.CurrenciesRepository import com.tangem.domain.tokens.repository.CurrencyChecksRepository -import com.tangem.domain.tokens.repository.PolkadotAccountHealthCheckRepository import com.tangem.domain.tokens.repository.TokenReceiveWarningsViewedRepository import com.tangem.domain.tokens.repository.YieldSupplyWarningsViewedRepository import com.tangem.domain.tokens.wallet.WalletBalanceFetcher @@ -334,14 +333,6 @@ internal object TokensDomainModule { return IsAmountSubtractAvailableUseCase(currenciesRepository, dispatchers) } - @Provides - @Singleton - fun provideRunPolkadotAccountHealthCheckUseCase( - repository: PolkadotAccountHealthCheckRepository, - ): RunPolkadotAccountHealthCheckUseCase { - return RunPolkadotAccountHealthCheckUseCase(repository) - } - @Provides @Singleton fun provideGetNetworkStatusesUseCase(networksRepository: NetworksRepository): GetNetworkAddressesUseCase { diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/di/TokensDataModule.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/di/TokensDataModule.kt index 23f10b2f4d..8495e3e6fa 100644 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/di/TokensDataModule.kt +++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/di/TokensDataModule.kt @@ -7,7 +7,6 @@ import com.tangem.data.common.currency.ResponseCryptoCurrenciesFactory import com.tangem.data.common.currency.UserTokensSaver import com.tangem.data.tokens.repository.DefaultCurrenciesRepository import com.tangem.data.tokens.repository.DefaultCurrencyChecksRepository -import com.tangem.data.tokens.repository.DefaultPolkadotAccountHealthCheckRepository import com.tangem.data.tokens.repository.DefaultTokenReceiveWarningsViewedRepository import com.tangem.data.tokens.repository.DefaultYieldSupplyWarningsViewedRepository import com.tangem.datasource.api.tangemTech.TangemTechApi @@ -18,7 +17,6 @@ import com.tangem.datasource.local.token.UserTokensResponseStore import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.domain.tokens.repository.CurrenciesRepository import com.tangem.domain.tokens.repository.CurrencyChecksRepository -import com.tangem.domain.tokens.repository.PolkadotAccountHealthCheckRepository import com.tangem.domain.tokens.repository.TokenReceiveWarningsViewedRepository import com.tangem.domain.tokens.repository.YieldSupplyWarningsViewedRepository import com.tangem.domain.walletmanager.WalletManagersFacade @@ -75,20 +73,6 @@ internal object TokensDataModule { ) } - @Provides - @Singleton - fun providePolkadotAccountHealthCheckRepository( - walletManagersFacade: WalletManagersFacade, - appPreferencesStore: AppPreferencesStore, - dispatchers: CoroutineDispatcherProvider, - ): PolkadotAccountHealthCheckRepository { - return DefaultPolkadotAccountHealthCheckRepository( - walletManagersFacade = walletManagersFacade, - appPreferencesStore = appPreferencesStore, - dispatchers = dispatchers, - ) - } - @Provides @Singleton fun provideTokenReceiveWarningsViewedRepository( diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultPolkadotAccountHealthCheckRepository.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultPolkadotAccountHealthCheckRepository.kt deleted file mode 100644 index 2e2a8ae876..0000000000 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultPolkadotAccountHealthCheckRepository.kt +++ /dev/null @@ -1,179 +0,0 @@ -package com.tangem.data.tokens.repository - -import androidx.datastore.preferences.core.Preferences -import com.tangem.blockchain.blockchains.polkadot.AccountCheckProvider -import com.tangem.blockchain.blockchains.polkadot.network.accounthealthcheck.ExtrinsicListItemResponse -import com.tangem.blockchain.common.Blockchain -import com.tangem.blockchain.common.BlockchainSdkError -import com.tangem.blockchainsdk.utils.toBlockchain -import com.tangem.datasource.local.preferences.AppPreferencesStore -import com.tangem.datasource.local.preferences.PreferencesKeys.POLKADOT_HEALTH_CHECKED_IMMUTABLE_ACCOUNTS_KEY -import com.tangem.datasource.local.preferences.PreferencesKeys.POLKADOT_HEALTH_CHECKED_RESET_ACCOUNTS_KEY -import com.tangem.datasource.local.preferences.PreferencesKeys.POLKADOT_HEALTH_CHECK_LAST_INDEXED_TX_KEY -import com.tangem.datasource.local.preferences.utils.getObjectMapSync -import com.tangem.datasource.local.preferences.utils.getObjectSetSync -import com.tangem.domain.models.network.Network -import com.tangem.domain.models.wallet.UserWalletId -import com.tangem.domain.tokens.repository.PolkadotAccountHealthCheckRepository -import com.tangem.domain.walletmanager.WalletManagersFacade -import com.tangem.utils.coroutines.CoroutineDispatcherProvider -import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.asSharedFlow -import kotlinx.coroutines.sync.Mutex -import kotlinx.coroutines.sync.withLock -import kotlinx.coroutines.withContext -import timber.log.Timber -import java.util.concurrent.ConcurrentHashMap - -internal class DefaultPolkadotAccountHealthCheckRepository( - private val walletManagersFacade: WalletManagersFacade, - private val appPreferencesStore: AppPreferencesStore, - private val dispatchers: CoroutineDispatcherProvider, -) : PolkadotAccountHealthCheckRepository { - - private val hasImmortalTransaction = MutableSharedFlow>() - private val hasResetTransaction = MutableSharedFlow>() - - private val mutex = Mutex() - private val mutexes = ConcurrentHashMap() - - override suspend fun runCheck(userWalletId: UserWalletId, network: Network) { - // Run Polkadot account health check - if (network.toBlockchain() != Blockchain.Polkadot) return - - val walletManager = walletManagersFacade.getOrCreateWalletManager(userWalletId, network) - val address = requireNotNull(walletManager?.wallet?.address) { - Timber.e("Address is null") - return - } - val accountCheckProvider = requireNotNull(walletManager as? AccountCheckProvider) { - Timber.e("Unable to cast wallet manager to AccountCheckProvider") - return - } - - // use a separate mutexForKey for each key to avoid multiple calls block() to the same key - // also used mutex to safe create mutexForKey, otherwise it can lead to multiple calls for the same key - val mutexForKey = mutex.withLock { mutexes.getOrPut(address) { Mutex() } } - mutexForKey.withLock { - withContext(dispatchers.io) { - checkHasReset(accountCheckProvider, address) - checkHasImmortal(accountCheckProvider, address) - } - } - } - - override fun subscribeToHasImmortalResults() = hasImmortalTransaction.asSharedFlow() - - override fun subscribeToHasResetResults() = hasResetTransaction.asSharedFlow() - - private suspend fun checkHasReset(polkadotManager: AccountCheckProvider, address: String) { - val checkedAddresses = appPreferencesStore.getObjectSetSync(POLKADOT_HEALTH_CHECKED_RESET_ACCOUNTS_KEY) - if (checkedAddresses.contains(address)) return - runCatching { - val accountInfo = requireNotNull(polkadotManager.getAccountInfo().account) { - Timber.e("Account info is null") - } - val nonce = accountInfo.nonce - val extrinsicCount = accountInfo.countExtrinsic - - // Account was reset - if (nonce != null && extrinsicCount != null) { - val hasReset = nonce < extrinsicCount - updateChecked(address, POLKADOT_HEALTH_CHECKED_RESET_ACCOUNTS_KEY) - hasResetTransaction.emit(address to hasReset) - } - }.onFailure { - if ((it as? BlockchainSdkError.CustomError)?.customMessage == ACCOUNT_NOT_FOUND) { - updateChecked(address, POLKADOT_HEALTH_CHECKED_RESET_ACCOUNTS_KEY) - } - } - } - - private suspend fun checkHasImmortal(accountCheckerProvider: AccountCheckProvider, address: String) { - val checkedAddresses = - appPreferencesStore.getObjectSetSync(POLKADOT_HEALTH_CHECKED_IMMUTABLE_ACCOUNTS_KEY) - if (checkedAddresses.contains(address)) return - - runCatching { - do { - // Getting batch of extrinsics to check - val lastChecked = appPreferencesStore.getObjectMapSync(POLKADOT_HEALTH_CHECK_LAST_INDEXED_TX_KEY) - val lastExtrinsic = lastChecked[address] - val extrinsicListResult = accountCheckerProvider.getExtrinsicList(afterExtrinsicId = lastExtrinsic) - extrinsicListResult.extrinsic - ?.forEach { tx -> - // Checking extrinsic one by one - if (checkTx(tx, address, accountCheckerProvider)) return - } - } while (!extrinsicListResult.extrinsic.isNullOrEmpty()) - - // We checked all transactions up to current moment and did not found an `immortal` transaction - hasImmortalTransaction.emit(address to false) - updateChecked(address, POLKADOT_HEALTH_CHECKED_IMMUTABLE_ACCOUNTS_KEY) - clearLastCheckedTransaction(address) - } - } - - private suspend fun checkTx( - tx: ExtrinsicListItemResponse, - address: String, - accountCheckerProvider: AccountCheckProvider, - ): Boolean { - val hash = tx.hash - val id = tx.id - if (hash != null && id != null) { - val details = accountCheckerProvider.getExtrinsicDetail(hash) - - // We found an `immortal` transaction - if (details.lifetime == null) { - hasImmortalTransaction.emit(address to true) - updateChecked(address, POLKADOT_HEALTH_CHECKED_IMMUTABLE_ACCOUNTS_KEY) - clearLastCheckedTransaction(address) - return true - } - - // Saving last checked transaction - updateLastCheckedTransaction(address, id) - } - return false - } - - private suspend fun updateLastCheckedTransaction(address: String, txId: Long) { - appPreferencesStore.editData { - val savedList = it.getObjectMap(POLKADOT_HEALTH_CHECK_LAST_INDEXED_TX_KEY) - val updatedList = savedList.toMutableMap() - updatedList[address] = txId - it.setObjectMap(POLKADOT_HEALTH_CHECK_LAST_INDEXED_TX_KEY, updatedList) - } - } - - private suspend fun clearLastCheckedTransaction(address: String) { - appPreferencesStore.editData { mutablePreferences -> - val savedList = mutablePreferences.getObjectMap(POLKADOT_HEALTH_CHECK_LAST_INDEXED_TX_KEY) - val updatedList = savedList.toMutableMap() - updatedList.remove(address) - mutablePreferences.setObjectMap(POLKADOT_HEALTH_CHECK_LAST_INDEXED_TX_KEY, updatedList) - } - } - - private suspend fun updateChecked(address: String, key: Preferences.Key) { - appPreferencesStore.editData { mutablePreferences -> - val savedList = mutablePreferences.getObjectSet(key) - val updatedList = savedList?.toMutableSet() ?: mutableSetOf() - updatedList.add(address) - - if (updatedList.isNotEmpty()) { - mutablePreferences.setObjectSet( - key, - updatedList.toSet(), - ) - } else { - mutablePreferences.remove(key) - } - } - } - - private companion object { - const val ACCOUNT_NOT_FOUND = "Record Not Found" - } -} \ No newline at end of file diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetPolkadotCheckHasImmortalUseCase.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetPolkadotCheckHasImmortalUseCase.kt deleted file mode 100644 index 527f6e1703..0000000000 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetPolkadotCheckHasImmortalUseCase.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.tangem.domain.tokens - -import com.tangem.domain.tokens.repository.PolkadotAccountHealthCheckRepository -import kotlinx.coroutines.flow.Flow - -class GetPolkadotCheckHasImmortalUseCase( - private val polkadotAccountHealthCheckRepository: PolkadotAccountHealthCheckRepository, -) { - operator fun invoke(): Flow> = - polkadotAccountHealthCheckRepository.subscribeToHasImmortalResults() -} \ No newline at end of file diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetPolkadotCheckHasResetUseCase.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetPolkadotCheckHasResetUseCase.kt deleted file mode 100644 index 33ce7e960e..0000000000 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetPolkadotCheckHasResetUseCase.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.tangem.domain.tokens - -import com.tangem.domain.tokens.repository.PolkadotAccountHealthCheckRepository -import kotlinx.coroutines.flow.Flow - -class GetPolkadotCheckHasResetUseCase( - private val polkadotAccountHealthCheckRepository: PolkadotAccountHealthCheckRepository, -) { - - operator fun invoke(): Flow> = - polkadotAccountHealthCheckRepository.subscribeToHasResetResults() -} \ No newline at end of file diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/RunPolkadotAccountHealthCheckUseCase.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/RunPolkadotAccountHealthCheckUseCase.kt deleted file mode 100644 index 9f665e442e..0000000000 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/RunPolkadotAccountHealthCheckUseCase.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.tangem.domain.tokens - -import arrow.core.Either -import com.tangem.domain.models.network.Network -import com.tangem.domain.tokens.repository.PolkadotAccountHealthCheckRepository -import com.tangem.domain.models.wallet.UserWalletId - -class RunPolkadotAccountHealthCheckUseCase( - private val polkadotAccountHealthCheckRepository: PolkadotAccountHealthCheckRepository, -) { - - suspend operator fun invoke(userWalletId: UserWalletId, network: Network): Either = Either.catch { - polkadotAccountHealthCheckRepository.runCheck(userWalletId, network) - } -} \ No newline at end of file diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/PolkadotAccountHealthCheckRepository.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/PolkadotAccountHealthCheckRepository.kt deleted file mode 100644 index 88ca5927ae..0000000000 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/PolkadotAccountHealthCheckRepository.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.tangem.domain.tokens.repository - -import com.tangem.domain.models.network.Network -import com.tangem.domain.models.wallet.UserWalletId -import kotlinx.coroutines.flow.Flow - -interface PolkadotAccountHealthCheckRepository { - - suspend fun runCheck(userWalletId: UserWalletId, network: Network) - - fun subscribeToHasImmortalResults(): Flow> - - fun subscribeToHasResetResults(): Flow> -} \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/MultiWalletContentLoader.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/MultiWalletContentLoader.kt index 5eb6975247..b08d9fb996 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/MultiWalletContentLoader.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/MultiWalletContentLoader.kt @@ -2,17 +2,17 @@ package com.tangem.feature.wallet.presentation.wallet.loaders.implementors import com.tangem.core.decompose.di.ModelScoped import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase +import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.nft.GetNFTCollectionsUseCase import com.tangem.domain.promo.GetStoryContentUseCase -import com.tangem.domain.tokens.ApplyTokenListSortingUseCase -import com.tangem.domain.tokens.RunPolkadotAccountHealthCheckUseCase -import com.tangem.domain.tokens.repository.CurrenciesRepository -import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.staking.usecase.StakingApyFlowUseCase +import com.tangem.domain.tokens.ApplyTokenListSortingUseCase +import com.tangem.domain.tokens.repository.CurrenciesRepository import com.tangem.domain.wallets.repository.WalletsRepository import com.tangem.domain.wallets.usecase.ShouldSaveUserWalletsUseCase import com.tangem.domain.yield.supply.usecase.YieldSupplyApyFlowUseCase import com.tangem.feature.wallet.child.wallet.model.intents.WalletClickIntents +import com.tangem.feature.wallet.presentation.account.AccountDependencies import com.tangem.feature.wallet.presentation.wallet.analytics.utils.TokenListAnalyticsSender import com.tangem.feature.wallet.presentation.wallet.analytics.utils.WalletWarningsAnalyticsSender import com.tangem.feature.wallet.presentation.wallet.analytics.utils.WalletWarningsSingleEventSender @@ -21,7 +21,6 @@ import com.tangem.feature.wallet.presentation.wallet.domain.MultiWalletTokenList import com.tangem.feature.wallet.presentation.wallet.domain.WalletWithFundsChecker import com.tangem.feature.wallet.presentation.wallet.state.WalletStateController import com.tangem.feature.wallet.presentation.wallet.subscribers.* -import com.tangem.feature.wallet.presentation.account.AccountDependencies @Suppress("LongParameterList") @ModelScoped @@ -38,7 +37,6 @@ internal class MultiWalletContentLoader( private val getSelectedAppCurrencyUseCase: GetSelectedAppCurrencyUseCase, private val applyTokenListSortingUseCase: ApplyTokenListSortingUseCase, private val getMultiWalletWarningsFactory: GetMultiWalletWarningsFactory, - private val runPolkadotAccountHealthCheckUseCase: RunPolkadotAccountHealthCheckUseCase, private val shouldSaveUserWalletsUseCase: ShouldSaveUserWalletsUseCase, private val getStoryContentUseCase: GetStoryContentUseCase, private val walletsRepository: WalletsRepository, @@ -59,7 +57,6 @@ internal class MultiWalletContentLoader( tokenListStore = tokenListStore, getSelectedAppCurrencyUseCase = getSelectedAppCurrencyUseCase, applyTokenListSortingUseCase = applyTokenListSortingUseCase, - runPolkadotAccountHealthCheckUseCase = runPolkadotAccountHealthCheckUseCase, accountDependencies = accountDependencies, yieldSupplyApyFlowUseCase = yieldSupplyApyFlowUseCase, stakingApyFlowUseCase = stakingApyFlowUseCase, diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/MultiWalletContentLoaderFactory.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/MultiWalletContentLoaderFactory.kt index 63d8447f57..e2dae7da64 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/MultiWalletContentLoaderFactory.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/MultiWalletContentLoaderFactory.kt @@ -5,7 +5,6 @@ import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase import com.tangem.domain.nft.GetNFTCollectionsUseCase import com.tangem.domain.promo.GetStoryContentUseCase import com.tangem.domain.tokens.ApplyTokenListSortingUseCase -import com.tangem.domain.tokens.RunPolkadotAccountHealthCheckUseCase import com.tangem.domain.tokens.repository.CurrenciesRepository import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.staking.usecase.StakingApyFlowUseCase @@ -35,7 +34,6 @@ internal class MultiWalletContentLoaderFactory @Inject constructor( private val applyTokenListSortingUseCase: ApplyTokenListSortingUseCase, private val walletWarningsAnalyticsSender: WalletWarningsAnalyticsSender, private val walletWarningsSingleEventSender: WalletWarningsSingleEventSender, - private val runPolkadotAccountHealthCheckUseCase: RunPolkadotAccountHealthCheckUseCase, private val shouldSaveUserWalletsUseCase: ShouldSaveUserWalletsUseCase, private val getStoryContentUseCase: GetStoryContentUseCase, private val walletsRepository: WalletsRepository, @@ -59,7 +57,6 @@ internal class MultiWalletContentLoaderFactory @Inject constructor( walletWarningsAnalyticsSender = walletWarningsAnalyticsSender, walletWarningsSingleEventSender = walletWarningsSingleEventSender, applyTokenListSortingUseCase = applyTokenListSortingUseCase, - runPolkadotAccountHealthCheckUseCase = runPolkadotAccountHealthCheckUseCase, getStoryContentUseCase = getStoryContentUseCase, shouldSaveUserWalletsUseCase = shouldSaveUserWalletsUseCase, walletsRepository = walletsRepository, diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/SingleWalletWithTokenContentLoader.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/SingleWalletWithTokenContentLoader.kt index 7b01ba0107..154c71724b 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/SingleWalletWithTokenContentLoader.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/SingleWalletWithTokenContentLoader.kt @@ -2,7 +2,6 @@ package com.tangem.feature.wallet.presentation.wallet.loaders.implementors import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase import com.tangem.domain.promo.GetStoryContentUseCase -import com.tangem.domain.tokens.RunPolkadotAccountHealthCheckUseCase import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.staking.usecase.StakingApyFlowUseCase import com.tangem.domain.wallets.usecase.ShouldSaveUserWalletsUseCase @@ -30,7 +29,6 @@ internal class SingleWalletWithTokenContentLoader( private val getMultiWalletWarningsFactory: GetMultiWalletWarningsFactory, private val tokenListStore: MultiWalletTokenListStore, private val getSelectedAppCurrencyUseCase: GetSelectedAppCurrencyUseCase, - private val runPolkadotAccountHealthCheckUseCase: RunPolkadotAccountHealthCheckUseCase, private val shouldSaveUserWalletsUseCase: ShouldSaveUserWalletsUseCase, private val getStoryContentUseCase: GetStoryContentUseCase, private val accountDependencies: AccountDependencies, @@ -48,7 +46,6 @@ internal class SingleWalletWithTokenContentLoader( walletWithFundsChecker = walletWithFundsChecker, tokenListStore = tokenListStore, getSelectedAppCurrencyUseCase = getSelectedAppCurrencyUseCase, - runPolkadotAccountHealthCheckUseCase = runPolkadotAccountHealthCheckUseCase, accountDependencies = accountDependencies, yieldSupplyApyFlowUseCase = yieldSupplyApyFlowUseCase, stakingApyFlowUseCase = stakingApyFlowUseCase, diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/SingleWalletWithTokenContentLoaderFactory.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/SingleWalletWithTokenContentLoaderFactory.kt index 4c178e1136..de00f8f290 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/SingleWalletWithTokenContentLoaderFactory.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/loaders/implementors/SingleWalletWithTokenContentLoaderFactory.kt @@ -3,7 +3,6 @@ package com.tangem.feature.wallet.presentation.wallet.loaders.implementors import com.tangem.core.decompose.di.ModelScoped import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase import com.tangem.domain.promo.GetStoryContentUseCase -import com.tangem.domain.tokens.RunPolkadotAccountHealthCheckUseCase import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.staking.usecase.StakingApyFlowUseCase import com.tangem.domain.wallets.usecase.ShouldSaveUserWalletsUseCase @@ -31,7 +30,6 @@ internal class SingleWalletWithTokenContentLoaderFactory @Inject constructor( private val getSelectedAppCurrencyUseCase: GetSelectedAppCurrencyUseCase, private val walletWarningsAnalyticsSender: WalletWarningsAnalyticsSender, private val walletWarningsSingleEventSender: WalletWarningsSingleEventSender, - private val runPolkadotAccountHealthCheckUseCase: RunPolkadotAccountHealthCheckUseCase, private val shouldSaveUserWalletsUseCase: ShouldSaveUserWalletsUseCase, private val getStoryContentUseCase: GetStoryContentUseCase, private val accountDependencies: AccountDependencies, @@ -51,7 +49,6 @@ internal class SingleWalletWithTokenContentLoaderFactory @Inject constructor( getSelectedAppCurrencyUseCase = getSelectedAppCurrencyUseCase, walletWarningsAnalyticsSender = walletWarningsAnalyticsSender, walletWarningsSingleEventSender = walletWarningsSingleEventSender, - runPolkadotAccountHealthCheckUseCase = runPolkadotAccountHealthCheckUseCase, getStoryContentUseCase = getStoryContentUseCase, shouldSaveUserWalletsUseCase = shouldSaveUserWalletsUseCase, accountDependencies = accountDependencies, diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/BasicTokenListSubscriber.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/BasicTokenListSubscriber.kt index 8fbd5a1d74..f5b62855de 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/BasicTokenListSubscriber.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/BasicTokenListSubscriber.kt @@ -14,10 +14,9 @@ import com.tangem.domain.models.currency.CryptoCurrencyStatus import com.tangem.domain.models.tokenlist.TokenList import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.staking.model.stakekit.Yield -import com.tangem.domain.tokens.RunPolkadotAccountHealthCheckUseCase +import com.tangem.domain.staking.usecase.StakingApyFlowUseCase import com.tangem.domain.tokens.error.TokenListError import com.tangem.domain.yield.supply.usecase.YieldSupplyApyFlowUseCase -import com.tangem.domain.staking.usecase.StakingApyFlowUseCase import com.tangem.feature.wallet.child.wallet.model.intents.WalletClickIntents import com.tangem.feature.wallet.presentation.account.AccountDependencies import com.tangem.feature.wallet.presentation.wallet.analytics.utils.TokenListAnalyticsSender @@ -43,7 +42,6 @@ internal abstract class BasicTokenListSubscriber : WalletSubscriber() { protected abstract val tokenListAnalyticsSender: TokenListAnalyticsSender protected abstract val walletWithFundsChecker: WalletWithFundsChecker protected abstract val getSelectedAppCurrencyUseCase: GetSelectedAppCurrencyUseCase - protected abstract val runPolkadotAccountHealthCheckUseCase: RunPolkadotAccountHealthCheckUseCase protected abstract val accountDependencies: AccountDependencies protected abstract val yieldSupplyApyFlowUseCase: YieldSupplyApyFlowUseCase protected abstract val stakingApyFlowUseCase: StakingApyFlowUseCase @@ -80,8 +78,6 @@ internal abstract class BasicTokenListSubscriber : WalletSubscriber() { coroutineScope.launch { onTokenListReceived(maybeTokenList) }.saveIn(onTokenListReceivedJobHolder) - - coroutineScope.launch { startCheck(maybeTokenList) } }, flow2 = appCurrencyFlow(), flow3 = yieldSupplyApyFlow(), @@ -137,20 +133,6 @@ internal abstract class BasicTokenListSubscriber : WalletSubscriber() { walletWithFundsChecker.check(tokenList) } - private suspend fun startCheck(maybeTokenList: Lce) { - // Run Polkadot account health check - maybeTokenList.getOrNull()?.let { tokenList -> - tokenList - .flattenCurrencies() - .forEach { - runPolkadotAccountHealthCheckUseCase( - userWalletId = userWallet.walletId, - network = it.currency.network, - ) - } - } - } - private fun createAccountListFlow(coroutineScope: CoroutineScope): Flow<*> = combine6( flow1 = accountListFlow(coroutineScope) .onEach { accountStatusList -> @@ -161,14 +143,7 @@ internal abstract class BasicTokenListSubscriber : WalletSubscriber() { ) }.saveIn(sendAnalyticsJobHolder) } - .distinctUntilChanged() - .onEach { accountList -> - // todo account see[onAccountListReceived] - // coroutineScope.launch { onAccountListReceived() }.saveIn(onTokenListReceivedJobHolder) - - accountList.flattenTokens() - .forEach { tokenList -> startCheck(Lce.Content(tokenList)) } - }, + .distinctUntilChanged(), flow2 = appCurrencyFlow(), flow3 = accountDependencies.expandedAccountsHolder.expandedAccounts(userWallet), flow4 = accountDependencies.isAccountsModeEnabledUseCase(), diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/MultiWalletTokenListSubscriber.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/MultiWalletTokenListSubscriber.kt index f64dafc766..8cea37e832 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/MultiWalletTokenListSubscriber.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/MultiWalletTokenListSubscriber.kt @@ -12,7 +12,6 @@ import com.tangem.domain.models.tokenlist.TokenList import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.staking.usecase.StakingApyFlowUseCase import com.tangem.domain.tokens.ApplyTokenListSortingUseCase -import com.tangem.domain.tokens.RunPolkadotAccountHealthCheckUseCase import com.tangem.domain.tokens.error.TokenListError import com.tangem.domain.yield.supply.usecase.YieldSupplyApyFlowUseCase import com.tangem.feature.wallet.child.wallet.model.intents.WalletClickIntents @@ -34,7 +33,6 @@ internal class MultiWalletTokenListSubscriber( override val tokenListAnalyticsSender: TokenListAnalyticsSender, override val walletWithFundsChecker: WalletWithFundsChecker, override val getSelectedAppCurrencyUseCase: GetSelectedAppCurrencyUseCase, - override val runPolkadotAccountHealthCheckUseCase: RunPolkadotAccountHealthCheckUseCase, override val accountDependencies: AccountDependencies, override val yieldSupplyApyFlowUseCase: YieldSupplyApyFlowUseCase, override val stakingApyFlowUseCase: StakingApyFlowUseCase, diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/SingleWalletWithTokenListSubscriber.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/SingleWalletWithTokenListSubscriber.kt index 15892dd13b..27f863f68a 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/SingleWalletWithTokenListSubscriber.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/SingleWalletWithTokenListSubscriber.kt @@ -8,7 +8,6 @@ import com.tangem.domain.core.lce.LceFlow import com.tangem.domain.models.tokenlist.TokenList import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.staking.usecase.StakingApyFlowUseCase -import com.tangem.domain.tokens.RunPolkadotAccountHealthCheckUseCase import com.tangem.domain.tokens.error.TokenListError import com.tangem.domain.yield.supply.usecase.YieldSupplyApyFlowUseCase import com.tangem.feature.wallet.child.wallet.model.intents.WalletClickIntents @@ -29,7 +28,6 @@ internal class SingleWalletWithTokenListSubscriber( override val tokenListAnalyticsSender: TokenListAnalyticsSender, override val walletWithFundsChecker: WalletWithFundsChecker, override val getSelectedAppCurrencyUseCase: GetSelectedAppCurrencyUseCase, - override val runPolkadotAccountHealthCheckUseCase: RunPolkadotAccountHealthCheckUseCase, override val accountDependencies: AccountDependencies, override val yieldSupplyApyFlowUseCase: YieldSupplyApyFlowUseCase, override val stakingApyFlowUseCase: StakingApyFlowUseCase,