From af2b62dbe30b8cc6f1916c0434bcb87c3954d027 Mon Sep 17 00:00:00 2001 From: Tangem Date: Sun, 9 Feb 2025 11:14:22 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../main/java/com/tangem/tap/MainActivity.kt | 1 - .../java/com/tangem/tap/TangemApplication.kt | 4 ++-- .../com/tangem/tap/common/redux/AppReducer.kt | 5 ++--- .../tap/common/redux/global/GlobalAction.kt | 2 -- .../tap/common/redux/global/GlobalReducer.kt | 6 +----- .../tap/common/redux/global/GlobalState.kt | 5 ----- .../com/tangem/tap/domain/TapWalletManager.kt | 4 ---- .../card/DefaultDerivationsRepository.kt | 4 +++- .../demo/DefaultDemoModeDatasource.kt | 11 ---------- .../tangem/tap/features/demo/di/DemoModule.kt | 18 ----------------- .../com/tangem/tap/proxy/AppStateHolder.kt | 5 ----- .../tangem/tap/proxy/UserWalletManagerImpl.kt | 15 +++++++++----- .../com/tangem/tap/proxy/di/ProxyModule.kt | 3 +++ .../datasource/demo/DemoModeDatasource.kt | 10 ---------- .../referral/data/ReferralRepositoryImpl.kt | 9 +++------ .../referral/di/ReferralRepositoryModule.kt | 3 --- .../referral/domain/ReferralInteractor.kt | 2 -- .../referral/domain/ReferralInteractorImpl.kt | 2 -- .../referral/domain/ReferralRepository.kt | 2 -- .../referral/presentation/build.gradle.kts | 2 ++ .../referral/viewmodels/ReferralViewModel.kt | 20 +++++++++++-------- 21 files changed, 38 insertions(+), 95 deletions(-) delete mode 100644 app/src/main/java/com/tangem/tap/features/demo/DefaultDemoModeDatasource.kt delete mode 100644 app/src/main/java/com/tangem/tap/features/demo/di/DemoModule.kt delete mode 100644 core/datasource/src/main/java/com/tangem/datasource/demo/DemoModeDatasource.kt diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index 123bebcfd0..0fcd5636c2 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -360,7 +360,6 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac private fun installActivityDependencies() { cardSdkOwner.register(activity = this) tangemSdkManager = injectedTangemSdkManager - appStateHolder.tangemSdkManager = tangemSdkManager if (onboardingV2FeatureToggles.isOnboardingV2Enabled) { backupServiceHolder.createAndSetService(cardSdkConfigRepository.sdk, this) diff --git a/app/src/main/java/com/tangem/tap/TangemApplication.kt b/app/src/main/java/com/tangem/tap/TangemApplication.kt index e8323470e3..540e44d667 100644 --- a/app/src/main/java/com/tangem/tap/TangemApplication.kt +++ b/app/src/main/java/com/tangem/tap/TangemApplication.kt @@ -8,7 +8,6 @@ import com.tangem.Log import com.tangem.TangemSdkLogger import com.tangem.blockchain.network.BlockchainSdkRetrofitBuilder import com.tangem.blockchainsdk.BlockchainSDKFactory -import com.tangem.data.card.TransactionSignerFactory import com.tangem.blockchainsdk.utils.ExcludedBlockchains import com.tangem.common.routing.AppRouter import com.tangem.core.analytics.Analytics @@ -23,6 +22,7 @@ import com.tangem.core.configtoggle.feature.FeatureTogglesManager import com.tangem.core.decompose.ui.UiMessageSender import com.tangem.core.navigation.settings.SettingsManager import com.tangem.core.ui.clipboard.ClipboardManager +import com.tangem.data.card.TransactionSignerFactory import com.tangem.datasource.api.common.MoshiConverter import com.tangem.datasource.api.common.createNetworkLoggingInterceptor import com.tangem.datasource.connection.NetworkConnectionManager @@ -274,7 +274,7 @@ abstract class TangemApplication : Application(), ImageLoaderFactory { private fun createReduxStore(): Store { return Store( - reducer = { action, state -> appReducer(action, state, appStateHolder) }, + reducer = { action, state -> appReducer(action, state) }, middleware = AppState.getMiddleware(), state = AppState( daggerGraphState = DaggerGraphState( diff --git a/app/src/main/java/com/tangem/tap/common/redux/AppReducer.kt b/app/src/main/java/com/tangem/tap/common/redux/AppReducer.kt index 38732f69ce..80b48b4193 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/AppReducer.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/AppReducer.kt @@ -10,16 +10,15 @@ import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsReducer import com.tangem.tap.features.onboarding.products.wallet.redux.OnboardingWalletReducer import com.tangem.tap.features.saveWallet.redux.SaveWalletReducer import com.tangem.tap.features.welcome.redux.WelcomeReducer -import com.tangem.tap.proxy.AppStateHolder import com.tangem.tap.proxy.redux.DaggerGraphReducer import org.rekotlin.Action -fun appReducer(action: Action, state: AppState?, appStateHolder: AppStateHolder): AppState { +fun appReducer(action: Action, state: AppState?): AppState { requireNotNull(state) if (action is AppAction.RestoreState) return action.state return AppState( - globalState = globalReducer(action, state, appStateHolder), + globalState = globalReducer(action, state), homeState = HomeReducer.reduce(action, state), onboardingNoteState = OnboardingNoteReducer.reduce(action, state), onboardingWalletState = OnboardingWalletReducer.reduce(action, state), diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt index 87fae53bc3..108d722975 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt @@ -58,8 +58,6 @@ sealed class GlobalAction : Action { data class SaveScanResponse(val scanResponse: ScanResponse) : GlobalAction() - data class SetIfCardVerifiedOnline(val verified: Boolean) : GlobalAction() - data class ChangeAppCurrency(val appCurrency: AppCurrency) : GlobalAction() object RestoreAppCurrency : GlobalAction() { data class Success(val appCurrency: AppCurrency) : GlobalAction() diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt index c05d9bbc89..c8372a3d0d 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalReducer.kt @@ -2,12 +2,11 @@ package com.tangem.tap.common.redux.global import com.tangem.tap.common.redux.AppState import com.tangem.tap.features.onboarding.OnboardingManager -import com.tangem.tap.proxy.AppStateHolder import com.tangem.utils.extensions.replaceBy import org.rekotlin.Action @Suppress("LongMethod", "ComplexMethod") -fun globalReducer(action: Action, state: AppState, appStateHolder: AppStateHolder): GlobalState { +fun globalReducer(action: Action, state: AppState): GlobalState { if (action !is GlobalAction) return state.globalState val globalState = state.globalState @@ -35,7 +34,6 @@ fun globalReducer(action: Action, state: AppState, appStateHolder: AppStateHolde globalState.copy(scanCardFailsCounter = 0) } is GlobalAction.SaveScanResponse -> { - appStateHolder.scanResponse = action.scanResponse globalState.copy(scanResponse = action.scanResponse) } is GlobalAction.ChangeAppCurrency -> { @@ -72,8 +70,6 @@ fun globalReducer(action: Action, state: AppState, appStateHolder: AppStateHolde is GlobalAction.ExchangeManager.Init.Success -> { globalState.copy(exchangeManager = action.exchangeManager) } - is GlobalAction.SetIfCardVerifiedOnline -> - globalState.copy(cardVerifiedOnline = action.verified) else -> globalState } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt index b75d7370d8..fb6bf4ae13 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt @@ -1,7 +1,6 @@ package com.tangem.tap.common.redux.global import com.tangem.domain.appcurrency.model.AppCurrency -import com.tangem.domain.apptheme.model.AppThemeMode import com.tangem.domain.models.scan.ScanResponse import com.tangem.domain.redux.StateDialog import com.tangem.tap.domain.TapWalletManager @@ -13,15 +12,11 @@ data class GlobalState( @Deprecated("Use scan response from selected user wallet") val scanResponse: ScanResponse? = null, val onboardingState: OnboardingState = OnboardingState(), - val cardVerifiedOnline: Boolean = false, val tapWalletManager: TapWalletManager = TapWalletManager(), val appCurrency: AppCurrency = AppCurrency.Default, val scanCardFailsCounter: Int = 0, val dialog: StateDialog? = null, val exchangeManager: CurrencyExchangeManager = CurrencyExchangeManager.dummy(), - @Deprecated("Use GetUserCountryCodeUseCase instead") - val userCountryCode: String? = null, - val appThemeMode: AppThemeMode = AppThemeMode.DEFAULT, val isLastSignWithRing: Boolean = false, ) : StateType 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 4a7fac7d10..8225f9014c 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt @@ -5,7 +5,6 @@ import com.tangem.blockchain.common.Wallet import com.tangem.core.analytics.Analytics import com.tangem.domain.common.extensions.withMainContext import com.tangem.domain.wallets.models.UserWallet -import com.tangem.operations.attestation.Attestation import com.tangem.tap.common.extensions.setContext import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsAction @@ -38,8 +37,6 @@ class TapWalletManager( private suspend fun loadUserWalletData(userWallet: UserWallet) { Analytics.setContext(userWallet.scanResponse) val scanResponse = userWallet.scanResponse - val card = scanResponse.card - val attestationFailed = card.attestation.status == Attestation.Status.Failed tangemSdkManager.changeDisplayedCardIdNumbersCount(scanResponse) @@ -47,7 +44,6 @@ class TapWalletManager( // Order is important store.dispatch(TwinCardsAction.IfTwinsPrepareState(scanResponse)) store.dispatch(GlobalAction.SaveScanResponse(scanResponse)) - store.dispatch(GlobalAction.SetIfCardVerifiedOnline(!attestationFailed)) } } } diff --git a/app/src/main/java/com/tangem/tap/domain/card/DefaultDerivationsRepository.kt b/app/src/main/java/com/tangem/tap/domain/card/DefaultDerivationsRepository.kt index f9e14a3a11..9b04ab7d07 100644 --- a/app/src/main/java/com/tangem/tap/domain/card/DefaultDerivationsRepository.kt +++ b/app/src/main/java/com/tangem/tap/domain/card/DefaultDerivationsRepository.kt @@ -58,7 +58,9 @@ internal class DefaultDerivationsRepository( } override suspend fun derivePublicKeysByNetworks(userWalletId: UserWalletId, networks: List) { - val userWallet = userWalletsStore.getSyncOrNull(userWalletId) ?: error("User wallet not found") + val userWallet = withContext(dispatchers.io) { + userWalletsStore.getSyncOrNull(userWalletId) ?: error("User wallet not found") + } if (!userWallet.scanResponse.card.settings.isHDWalletAllowed) { Timber.d("Nothing to derive") diff --git a/app/src/main/java/com/tangem/tap/features/demo/DefaultDemoModeDatasource.kt b/app/src/main/java/com/tangem/tap/features/demo/DefaultDemoModeDatasource.kt deleted file mode 100644 index 874aaa15c1..0000000000 --- a/app/src/main/java/com/tangem/tap/features/demo/DefaultDemoModeDatasource.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.tangem.tap.features.demo - -import com.tangem.datasource.demo.DemoModeDatasource -import com.tangem.tap.proxy.AppStateHolder -import javax.inject.Inject - -class DefaultDemoModeDatasource @Inject constructor(private val appStateHolder: AppStateHolder) : DemoModeDatasource { - - override val isDemoModeActive: Boolean - get() = appStateHolder.scanResponse?.let { DemoHelper.isDemoCard(it) } == true -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/demo/di/DemoModule.kt b/app/src/main/java/com/tangem/tap/features/demo/di/DemoModule.kt deleted file mode 100644 index de45fe6609..0000000000 --- a/app/src/main/java/com/tangem/tap/features/demo/di/DemoModule.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.tangem.tap.features.demo.di - -import com.tangem.datasource.demo.DemoModeDatasource -import com.tangem.tap.features.demo.DefaultDemoModeDatasource -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -internal interface DemoModule { - - @Binds - @Singleton - fun bindDemoModeHelper(demoModeHelper: DefaultDemoModeDatasource): DemoModeDatasource -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/proxy/AppStateHolder.kt b/app/src/main/java/com/tangem/tap/proxy/AppStateHolder.kt index 18c616034a..e45195044a 100644 --- a/app/src/main/java/com/tangem/tap/proxy/AppStateHolder.kt +++ b/app/src/main/java/com/tangem/tap/proxy/AppStateHolder.kt @@ -1,10 +1,8 @@ package com.tangem.tap.proxy -import com.tangem.domain.models.scan.ScanResponse import com.tangem.domain.redux.ReduxStateHolder import com.tangem.domain.redux.StateDialog import com.tangem.domain.wallets.models.UserWallet -import com.tangem.sdk.api.TangemSdkManager import com.tangem.tap.common.extensions.dispatchDialogShow import com.tangem.tap.common.extensions.dispatchWithMain import com.tangem.tap.common.extensions.onUserWalletSelected @@ -20,10 +18,7 @@ import javax.inject.Inject */ class AppStateHolder @Inject constructor() : ReduxStateHolder { - @Deprecated("Use scan response from selected user wallet") - var scanResponse: ScanResponse? = null var mainStore: Store? = null - var tangemSdkManager: TangemSdkManager? = null var exchangeService: ExchangeService? = null var buyService: ExchangeService? = null var sellService: ExchangeService? = null diff --git a/app/src/main/java/com/tangem/tap/proxy/UserWalletManagerImpl.kt b/app/src/main/java/com/tangem/tap/proxy/UserWalletManagerImpl.kt index ac5a55104e..767198d50e 100644 --- a/app/src/main/java/com/tangem/tap/proxy/UserWalletManagerImpl.kt +++ b/app/src/main/java/com/tangem/tap/proxy/UserWalletManagerImpl.kt @@ -8,12 +8,15 @@ import com.tangem.domain.walletmanager.WalletManagersFacade import com.tangem.domain.wallets.legacy.UserWalletsListManager import com.tangem.lib.crypto.UserWalletManager import com.tangem.lib.crypto.models.ProxyAmount +import com.tangem.utils.coroutines.CoroutineDispatcherProvider +import kotlinx.coroutines.withContext import timber.log.Timber import java.math.BigDecimal class UserWalletManagerImpl( private val walletManagersFacade: WalletManagersFacade, private val userWalletsListManager: UserWalletsListManager, + private val dispatchers: CoroutineDispatcherProvider, ) : UserWalletManager { override fun getWalletId(): String { @@ -61,11 +64,13 @@ class UserWalletManagerImpl( val selectedUserWallet = requireNotNull( userWalletsListManager.selectedUserWalletSync, ) { "userWallet or userWalletsListManager is null" } - val walletManager = walletManagersFacade.getOrCreateWalletManager( - selectedUserWallet.walletId, - blockchain, - derivationPath, - ) + val walletManager = withContext(dispatchers.io) { + walletManagersFacade.getOrCreateWalletManager( + selectedUserWallet.walletId, + blockchain, + derivationPath, + ) + } return requireNotNull(walletManager) { "No wallet manager found" diff --git a/app/src/main/java/com/tangem/tap/proxy/di/ProxyModule.kt b/app/src/main/java/com/tangem/tap/proxy/di/ProxyModule.kt index 5c9c990ba5..e9bcad2a6b 100644 --- a/app/src/main/java/com/tangem/tap/proxy/di/ProxyModule.kt +++ b/app/src/main/java/com/tangem/tap/proxy/di/ProxyModule.kt @@ -7,6 +7,7 @@ import com.tangem.lib.crypto.UserWalletManager import com.tangem.tap.proxy.AppStateHolder import com.tangem.tap.proxy.TransactionManagerImpl import com.tangem.tap.proxy.UserWalletManagerImpl +import com.tangem.utils.coroutines.CoroutineDispatcherProvider import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -28,10 +29,12 @@ internal object ProxyModule { fun provideUserWalletManager( walletManagersFacade: WalletManagersFacade, userWalletsListManager: UserWalletsListManager, + dispatchers: CoroutineDispatcherProvider, ): UserWalletManager { return UserWalletManagerImpl( walletManagersFacade = walletManagersFacade, userWalletsListManager = userWalletsListManager, + dispatchers = dispatchers, ) } diff --git a/core/datasource/src/main/java/com/tangem/datasource/demo/DemoModeDatasource.kt b/core/datasource/src/main/java/com/tangem/datasource/demo/DemoModeDatasource.kt deleted file mode 100644 index 68012d120b..0000000000 --- a/core/datasource/src/main/java/com/tangem/datasource/demo/DemoModeDatasource.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.tangem.datasource.demo - -/** - * Data provides for demo cards - * - */ -interface DemoModeDatasource { - - val isDemoModeActive: Boolean -} \ No newline at end of file diff --git a/features/referral/data/src/main/java/com/tangem/feature/referral/data/ReferralRepositoryImpl.kt b/features/referral/data/src/main/java/com/tangem/feature/referral/data/ReferralRepositoryImpl.kt index ae6768f793..f33ab65ce4 100644 --- a/features/referral/data/src/main/java/com/tangem/feature/referral/data/ReferralRepositoryImpl.kt +++ b/features/referral/data/src/main/java/com/tangem/feature/referral/data/ReferralRepositoryImpl.kt @@ -7,7 +7,6 @@ import com.tangem.blockchainsdk.utils.fromNetworkId import com.tangem.data.common.currency.CryptoCurrencyFactory import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.api.tangemTech.models.StartReferralBody -import com.tangem.datasource.demo.DemoModeDatasource import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.domain.tokens.model.CryptoCurrency import com.tangem.domain.wallets.models.UserWalletId @@ -24,16 +23,12 @@ internal class ReferralRepositoryImpl @Inject constructor( private val referralApi: TangemTechApi, private val referralConverter: ReferralConverter, private val coroutineDispatcher: CoroutineDispatcherProvider, - private val demoModeDatasource: DemoModeDatasource, private val userWalletsStore: UserWalletsStore, excludedBlockchains: ExcludedBlockchains, ) : ReferralRepository { private val cryptoCurrencyFactory = CryptoCurrencyFactory(excludedBlockchains) - override val isDemoMode: Boolean - get() = demoModeDatasource.isDemoModeActive - override suspend fun getReferralData(walletId: String): ReferralData { return withContext(coroutineDispatcher.io) { referralConverter.convert( @@ -65,7 +60,9 @@ internal class ReferralRepositoryImpl @Inject constructor( } override suspend fun getCryptoCurrency(userWalletId: UserWalletId, tokenData: TokenData): CryptoCurrency? { - val userWallet = userWalletsStore.getSyncOrNull(userWalletId) ?: error("Wallet $userWalletId not found") + val userWallet = withContext(coroutineDispatcher.io) { + userWalletsStore.getSyncOrNull(userWalletId) ?: error("Wallet $userWalletId not found") + } val blockchain = Blockchain.fromNetworkId(tokenData.networkId) ?: error("Blockchain ${tokenData.networkId} not found") diff --git a/features/referral/data/src/main/java/com/tangem/feature/referral/di/ReferralRepositoryModule.kt b/features/referral/data/src/main/java/com/tangem/feature/referral/di/ReferralRepositoryModule.kt index 7d01957033..153d375e6b 100644 --- a/features/referral/data/src/main/java/com/tangem/feature/referral/di/ReferralRepositoryModule.kt +++ b/features/referral/data/src/main/java/com/tangem/feature/referral/di/ReferralRepositoryModule.kt @@ -2,7 +2,6 @@ package com.tangem.feature.referral.di import com.tangem.blockchainsdk.utils.ExcludedBlockchains import com.tangem.datasource.api.tangemTech.TangemTechApi -import com.tangem.datasource.demo.DemoModeDatasource import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.feature.referral.converters.ReferralConverter import com.tangem.feature.referral.data.ReferralRepositoryImpl @@ -24,7 +23,6 @@ class ReferralRepositoryModule { tangemTechApi: TangemTechApi, referralConverter: ReferralConverter, coroutineDispatcherProvider: CoroutineDispatcherProvider, - demoModeDatasource: DemoModeDatasource, userWalletsStore: UserWalletsStore, excludedBlockchains: ExcludedBlockchains, ): ReferralRepository { @@ -32,7 +30,6 @@ class ReferralRepositoryModule { referralApi = tangemTechApi, referralConverter = referralConverter, coroutineDispatcher = coroutineDispatcherProvider, - demoModeDatasource = demoModeDatasource, userWalletsStore = userWalletsStore, excludedBlockchains = excludedBlockchains, ) diff --git a/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/ReferralInteractor.kt b/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/ReferralInteractor.kt index 2bf7174f00..c10ecfac7b 100644 --- a/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/ReferralInteractor.kt +++ b/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/ReferralInteractor.kt @@ -5,8 +5,6 @@ import com.tangem.feature.referral.domain.models.ReferralData interface ReferralInteractor { - val isDemoMode: Boolean - suspend fun getReferralStatus(userWalletId: UserWalletId): ReferralData suspend fun startReferral(userWalletId: UserWalletId): ReferralData diff --git a/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/ReferralInteractorImpl.kt b/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/ReferralInteractorImpl.kt index 04e3bb3028..4315d06992 100644 --- a/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/ReferralInteractorImpl.kt +++ b/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/ReferralInteractorImpl.kt @@ -23,8 +23,6 @@ internal class ReferralInteractorImpl( private val tokensForReferral = mutableListOf() - override val isDemoMode: Boolean get() = repository.isDemoMode - override suspend fun getReferralStatus(userWalletId: UserWalletId): ReferralData { val referralData = repository.getReferralData(userWalletId.stringValue) diff --git a/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/ReferralRepository.kt b/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/ReferralRepository.kt index 07897eb1be..760277f9f8 100644 --- a/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/ReferralRepository.kt +++ b/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/ReferralRepository.kt @@ -7,8 +7,6 @@ import com.tangem.feature.referral.domain.models.TokenData interface ReferralRepository { - val isDemoMode: Boolean - /** Returns data object of [ReferralData] depends on user program status */ suspend fun getReferralData(walletId: String): ReferralData diff --git a/features/referral/presentation/build.gradle.kts b/features/referral/presentation/build.gradle.kts index 63f2a5e291..6ee99e86cb 100644 --- a/features/referral/presentation/build.gradle.kts +++ b/features/referral/presentation/build.gradle.kts @@ -33,6 +33,8 @@ dependencies { implementation(deps.compose.ui.tooling) /** Domain */ + implementation(projects.domain.demo) + implementation(projects.domain.wallets) implementation(projects.domain.wallets.models) implementation(projects.features.referral.domain) diff --git a/features/referral/presentation/src/main/java/com/tangem/feature/referral/viewmodels/ReferralViewModel.kt b/features/referral/presentation/src/main/java/com/tangem/feature/referral/viewmodels/ReferralViewModel.kt index a0a455ee28..57d35abc7d 100644 --- a/features/referral/presentation/src/main/java/com/tangem/feature/referral/viewmodels/ReferralViewModel.kt +++ b/features/referral/presentation/src/main/java/com/tangem/feature/referral/viewmodels/ReferralViewModel.kt @@ -12,7 +12,9 @@ import com.tangem.common.routing.bundle.unbundle import com.tangem.core.analytics.api.AnalyticsEventHandler import com.tangem.core.navigation.share.ShareManager import com.tangem.core.navigation.url.UrlOpener +import com.tangem.domain.demo.IsDemoCardUseCase import com.tangem.domain.wallets.models.UserWalletId +import com.tangem.domain.wallets.usecase.GetUserWalletUseCase import com.tangem.feature.referral.analytics.ReferralEvents import com.tangem.feature.referral.domain.ReferralInteractor import com.tangem.feature.referral.domain.errors.ReferralError @@ -24,20 +26,20 @@ import com.tangem.feature.referral.models.ReferralStateHolder import com.tangem.feature.referral.models.ReferralStateHolder.ErrorSnackbar import com.tangem.feature.referral.models.ReferralStateHolder.ReferralInfoState import com.tangem.feature.referral.router.ReferralRouter -import com.tangem.utils.coroutines.CoroutineDispatcherProvider -import com.tangem.utils.coroutines.runCatching import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import javax.inject.Inject import kotlin.properties.Delegates +@Suppress("LongParameterList") @HiltViewModel internal class ReferralViewModel @Inject constructor( private val referralInteractor: ReferralInteractor, - private val dispatchers: CoroutineDispatcherProvider, private val analyticsEventHandler: AnalyticsEventHandler, private val shareManager: ShareManager, private val urlOpener: UrlOpener, + private val getUserWalletUseCase: GetUserWalletUseCase, + private val isDemoCardUseCase: IsDemoCardUseCase, savedStateHandle: SavedStateHandle, ) : ViewModel() { @@ -78,8 +80,8 @@ internal class ReferralViewModel @Inject constructor( private fun loadReferralData() { uiState = uiState.copy(referralInfoState = ReferralInfoState.Loading) - viewModelScope.launch(dispatchers.main) { - runCatching(dispatchers.io) { + viewModelScope.launch { + runCatching { referralInteractor.getReferralStatus(userWalletId).apply { lastReferralData = this } @@ -90,13 +92,15 @@ internal class ReferralViewModel @Inject constructor( } private fun participate() { - if (referralInteractor.isDemoMode) { + val userWallet = getUserWalletUseCase(userWalletId).getOrNull() ?: error("User wallet not found") + + if (isDemoCardUseCase(cardId = userWallet.cardId)) { showErrorSnackbar(DemoModeException()) } else { analyticsEventHandler.send(ReferralEvents.ClickParticipate) uiState = uiState.copy(referralInfoState = ReferralInfoState.Loading) - viewModelScope.launch(dispatchers.main) { - runCatching(dispatchers.io) { referralInteractor.startReferral(userWalletId) } + viewModelScope.launch { + runCatching { referralInteractor.startReferral(userWalletId) } .onSuccess(::showContent) .onFailure { throwable -> if (throwable is ReferralError.UserCancelledException) {