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 f6fe0f4b00..6556e4518b 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 @@ -42,7 +42,6 @@ fun globalReducer(action: Action, state: AppState, appStateHolder: AppStateHolde globalState.copy(scanResponse = action.scanResponse) } is GlobalAction.ChangeAppCurrency -> { - appStateHolder.appFiatCurrency = action.appCurrency globalState.copy(appCurrency = action.appCurrency) } is GlobalAction.RestoreAppCurrency.Success -> { 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 022b56497b..52beeb8387 100644 --- a/app/src/main/java/com/tangem/tap/proxy/AppStateHolder.kt +++ b/app/src/main/java/com/tangem/tap/proxy/AppStateHolder.kt @@ -3,7 +3,6 @@ package com.tangem.tap.proxy import com.tangem.core.navigation.AppScreen import com.tangem.core.navigation.NavigationAction import com.tangem.core.navigation.ReduxNavController -import com.tangem.domain.appcurrency.model.AppCurrency import com.tangem.domain.models.scan.CardDTO import com.tangem.domain.models.scan.ScanResponse import com.tangem.domain.redux.ReduxStateHolder @@ -43,7 +42,6 @@ class AppStateHolder @Inject constructor() : WalletsStateHolder, ReduxNavControl var scanResponse: ScanResponse? = null var mainStore: Store? = null var tangemSdkManager: TangemSdkManager? = null - var appFiatCurrency: AppCurrency = AppCurrency.Default var exchangeService: ExchangeService? = null fun getActualCard(): CardDTO? { 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 836356c40e..14000bb456 100644 --- a/app/src/main/java/com/tangem/tap/proxy/UserWalletManagerImpl.kt +++ b/app/src/main/java/com/tangem/tap/proxy/UserWalletManagerImpl.kt @@ -16,13 +16,11 @@ import com.tangem.lib.crypto.models.Currency import com.tangem.lib.crypto.models.Currency.NativeToken import com.tangem.lib.crypto.models.Currency.NonNativeToken import com.tangem.lib.crypto.models.ProxyAmount -import com.tangem.lib.crypto.models.ProxyFiatCurrency import com.tangem.tap.userWalletsListManager import timber.log.Timber import java.math.BigDecimal class UserWalletManagerImpl( - private val appStateHolder: AppStateHolder, private val walletManagersFacade: WalletManagersFacade, private val currenciesRepository: CurrenciesRepository, private val userWalletsStore: UserWalletsStore, @@ -171,15 +169,6 @@ class UserWalletManagerImpl( return blockchain.currency } - override fun getUserAppCurrency(): ProxyFiatCurrency { - val appCurrency = appStateHolder.appFiatCurrency - return ProxyFiatCurrency( - code = appCurrency.code, - name = appCurrency.name, - symbol = appCurrency.symbol, - ) - } - @Throws(IllegalArgumentException::class) private suspend fun getActualWalletManager(blockchain: Blockchain, derivationPath: String?): WalletManager { val selectedUserWallet = requireNotNull( 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 263fc1eec8..8c0c4eda47 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 @@ -30,13 +30,11 @@ internal object ProxyModule { @Provides @Singleton fun provideUserWalletManager( - appStateHolder: AppStateHolder, walletManagersFacade: WalletManagersFacade, currenciesRepository: CurrenciesRepository, userWalletsStore: UserWalletsStore, ): UserWalletManager { return UserWalletManagerImpl( - appStateHolder = appStateHolder, walletManagersFacade = walletManagersFacade, currenciesRepository = currenciesRepository, userWalletsStore = userWalletsStore, diff --git a/domain/app-currency/src/main/kotlin/com/tangem/domain/appcurrency/extenstions/UseCaseExtensions.kt b/domain/app-currency/src/main/kotlin/com/tangem/domain/appcurrency/extenstions/UseCaseExtensions.kt new file mode 100644 index 0000000000..724bddd8bc --- /dev/null +++ b/domain/app-currency/src/main/kotlin/com/tangem/domain/appcurrency/extenstions/UseCaseExtensions.kt @@ -0,0 +1,16 @@ +package com.tangem.domain.appcurrency.extenstions + +import arrow.core.getOrElse +import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase +import com.tangem.domain.appcurrency.model.AppCurrency +import kotlinx.coroutines.flow.firstOrNull +import kotlinx.coroutines.flow.map + +suspend fun GetSelectedAppCurrencyUseCase.unwrap(): AppCurrency { + return this() + .map { maybeAppCurrency -> + maybeAppCurrency.getOrElse { AppCurrency.Default } + } + .firstOrNull() + ?: AppCurrency.Default +} \ No newline at end of file diff --git a/features/swap/domain/build.gradle.kts b/features/swap/domain/build.gradle.kts index 762f7f0252..e0cb9a413a 100644 --- a/features/swap/domain/build.gradle.kts +++ b/features/swap/domain/build.gradle.kts @@ -19,6 +19,7 @@ dependencies { kapt(deps.hilt.kapt) /** Domain */ + implementation(projects.domain.appCurrency) implementation(projects.domain.models) implementation(projects.domain.tokens) implementation(projects.domain.tokens.models) diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt index 706bc88c68..58d2b33488 100644 --- a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt @@ -7,6 +7,9 @@ import com.tangem.blockchain.common.AmountType import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.transaction.Fee import com.tangem.blockchain.common.transaction.TransactionFee +import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase +import com.tangem.domain.appcurrency.extenstions.unwrap +import com.tangem.domain.appcurrency.repository.AppCurrencyRepository import com.tangem.domain.tokens.GetCryptoCurrencyStatusesSyncUseCase import com.tangem.domain.tokens.model.CryptoCurrency import com.tangem.domain.tokens.model.CryptoCurrencyStatus @@ -55,6 +58,7 @@ internal class SwapInteractorImpl @Inject constructor( private val quotesRepository: QuotesRepository, private val dispatcher: CoroutineDispatcherProvider, private val swapTransactionRepository: SwapTransactionRepository, + private val appCurrencyRepository: AppCurrencyRepository, private val initialToCurrencyResolver: InitialToCurrencyResolver, ) : SwapInteractor { @@ -62,6 +66,10 @@ internal class SwapInteractorImpl @Inject constructor( EstimateFeeUseCase(walletManagersFacade, dispatcher) } + private val getSelectedAppCurrencyUseCase by lazy(LazyThreadSafetyMode.NONE) { + GetSelectedAppCurrencyUseCase(appCurrencyRepository) + } + private val swapCurrencyConverter = SwapCurrencyConverter() private val amountFormatter = AmountFormatter() private val hundredPercent = BigInteger("100") @@ -755,8 +763,8 @@ internal class SwapInteractorImpl @Inject constructor( ) } - private fun createEmptyAmountState(): SwapState { - val appCurrency = userWalletManager.getUserAppCurrency() + private suspend fun createEmptyAmountState(): SwapState { + val appCurrency = getSelectedAppCurrencyUseCase.unwrap() return SwapState.EmptyAmountState( zeroAmountEquivalent = BigDecimal.ZERO.toFiatString( rateValue = BigDecimal.ONE, @@ -948,7 +956,7 @@ internal class SwapInteractorImpl @Inject constructor( } private suspend fun getFormattedFiatFees(networkId: String, vararg fees: BigDecimal): List { - val appCurrency = userWalletManager.getUserAppCurrency() + val appCurrency = getSelectedAppCurrencyUseCase.unwrap() val nativeToken = repository.getNativeTokenForNetwork(networkId) val rates = getQuotes(nativeToken.id) return rates[nativeToken.id]?.fiatRate?.let { rate -> diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/di/SwapDomainModule.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/di/SwapDomainModule.kt index d299f7824e..08acf5d871 100644 --- a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/di/SwapDomainModule.kt +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/di/SwapDomainModule.kt @@ -1,5 +1,6 @@ package com.tangem.feature.swap.domain.di +import com.tangem.domain.appcurrency.repository.AppCurrencyRepository import com.tangem.domain.card.repository.CardSdkConfigRepository import com.tangem.domain.demo.DemoConfig import com.tangem.domain.demo.IsDemoCardUseCase @@ -39,6 +40,7 @@ class SwapDomainModule { @SwapScope sendTransactionUseCase: SendTransactionUseCase, quotesRepository: QuotesRepository, swapTransactionRepository: SwapTransactionRepository, + appCurrencyRepository: AppCurrencyRepository, walletManagersFacade: WalletManagersFacade, coroutineDispatcherProvider: CoroutineDispatcherProvider, initialToCurrencyResolver: InitialToCurrencyResolver, @@ -55,6 +57,7 @@ class SwapDomainModule { walletManagersFacade = walletManagersFacade, dispatcher = coroutineDispatcherProvider, swapTransactionRepository = swapTransactionRepository, + appCurrencyRepository = appCurrencyRepository, initialToCurrencyResolver = initialToCurrencyResolver, ) } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/UseCaseExt.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/UseCaseExt.kt index 7e62eb79e3..1ab1765968 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/UseCaseExt.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/UseCaseExt.kt @@ -1,9 +1,6 @@ package com.tangem.feature.wallet.presentation.wallet.domain import arrow.core.Either -import arrow.core.getOrElse -import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase -import com.tangem.domain.appcurrency.model.AppCurrency import com.tangem.domain.tokens.GetPrimaryCurrencyStatusUpdatesUseCase import com.tangem.domain.tokens.error.CurrencyStatusError import com.tangem.domain.tokens.model.CryptoCurrencyStatus @@ -38,15 +35,6 @@ internal suspend fun GetPrimaryCurrencyStatusUpdatesUseCase.unwrap(userWalletId: ) } -internal suspend fun GetSelectedAppCurrencyUseCase.unwrap(): AppCurrency { - return this() - .map { maybeAppCurrency -> - maybeAppCurrency.getOrElse { AppCurrency.Default } - } - .firstOrNull() - ?: AppCurrency.Default -} - internal suspend fun GetPrimaryCurrencyStatusUpdatesUseCase.collectLatest( userWalletId: UserWalletId, onRight: suspend (CryptoCurrencyStatus) -> Unit, diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletCurrencyActionsClickIntents.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletCurrencyActionsClickIntents.kt index 3fd26c242b..b4e85a8422 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletCurrencyActionsClickIntents.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletCurrencyActionsClickIntents.kt @@ -10,6 +10,7 @@ import com.tangem.core.ui.components.bottomsheets.tokenreceive.mapToAddressModel import com.tangem.core.ui.extensions.WrappedList import com.tangem.core.ui.extensions.resourceReference import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase +import com.tangem.domain.appcurrency.extenstions.unwrap import com.tangem.domain.common.util.cardTypesResolver import com.tangem.domain.demo.IsDemoCardUseCase import com.tangem.domain.redux.ReduxStateHolder diff --git a/libs/crypto/src/main/java/com/tangem/lib/crypto/UserWalletManager.kt b/libs/crypto/src/main/java/com/tangem/lib/crypto/UserWalletManager.kt index 34322c70b2..82b89c030b 100644 --- a/libs/crypto/src/main/java/com/tangem/lib/crypto/UserWalletManager.kt +++ b/libs/crypto/src/main/java/com/tangem/lib/crypto/UserWalletManager.kt @@ -2,7 +2,6 @@ package com.tangem.lib.crypto import com.tangem.lib.crypto.models.Currency import com.tangem.lib.crypto.models.ProxyAmount -import com.tangem.lib.crypto.models.ProxyFiatCurrency /** * Provider for user tokens data @@ -67,11 +66,6 @@ interface UserWalletManager { @Throws(IllegalStateException::class) fun getNetworkCurrency(networkId: String): String - /** - * Returns selected app currency - */ - fun getUserAppCurrency(): ProxyFiatCurrency - @Throws(IllegalStateException::class) suspend fun getLastTransactionHash(networkId: String, derivationPath: String?): String? } \ No newline at end of file