From f33ada03528e4c09ea2a38d346c62c70d1239663 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 5 Dec 2023 12:47:48 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../DefaultMarketCryptoCurrencyRepository.kt | 2 +- .../feature/swap/domain/SwapInteractor.kt | 2 ++ .../feature/swap/domain/SwapInteractorImpl.kt | 4 ++++ features/swap/presentation/build.gradle.kts | 2 ++ .../feature/swap/presentation/SwapFragment.kt | 5 +++++ .../tangem/feature/swap/router/SwapRouter.kt | 20 +++++++++++++++++++ .../tangem/feature/swap/ui/StateBuilder.kt | 5 ++--- .../feature/swap/viewmodels/SwapViewModel.kt | 6 +++++- 8 files changed, 41 insertions(+), 5 deletions(-) diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultMarketCryptoCurrencyRepository.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultMarketCryptoCurrencyRepository.kt index 1e3f9eef51..84188ea775 100644 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultMarketCryptoCurrencyRepository.kt +++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultMarketCryptoCurrencyRepository.kt @@ -15,7 +15,7 @@ class DefaultMarketCryptoCurrencyRepository( return assetsStore.getSyncOrNull(userWalletId)?.find { it.network == cryptoCurrency.network.backendId && - it.contractAddress == contractAddress + it.contractAddress.equals(contractAddress, ignoreCase = true) }?.exchangeAvailable ?: false } } \ No newline at end of file diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractor.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractor.kt index c75b56fd63..9c8ebfcbf3 100644 --- a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractor.kt +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractor.kt @@ -90,4 +90,6 @@ interface SwapInteractor { initialCryptoCurrency: CryptoCurrency, state: TokensDataStateExpress, ): CryptoCurrencyStatus? + + fun getNativeToken(networkId: String): CryptoCurrency } \ No newline at end of file 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 85be41f3bb..23cef2f968 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 @@ -596,6 +596,10 @@ internal class SwapInteractorImpl @Inject constructor( ?: state.toGroup.available.firstOrNull()?.currencyStatus } + override fun getNativeToken(networkId: String): CryptoCurrency { + return repository.getNativeTokenForNetwork(networkId) + } + @Deprecated("used in old swap mechanism") private fun getTangemFee(): Double { return repository.getTangemFee() diff --git a/features/swap/presentation/build.gradle.kts b/features/swap/presentation/build.gradle.kts index dc0cdcabd2..b2ea5cda48 100644 --- a/features/swap/presentation/build.gradle.kts +++ b/features/swap/presentation/build.gradle.kts @@ -12,6 +12,7 @@ dependencies { implementation(projects.core.analytics) implementation(projects.core.analytics.models) implementation(projects.core.featuretoggles) + implementation(projects.core.navigation) implementation(projects.core.utils) implementation(projects.core.ui) implementation(projects.common) @@ -45,6 +46,7 @@ dependencies { /** Api */ implementation(projects.features.swap.api) + implementation(projects.features.tokendetails.api) /** Domain */ implementation(projects.features.swap.domain) diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/presentation/SwapFragment.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/presentation/SwapFragment.kt index 00744ef60a..3b16f0df21 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/presentation/SwapFragment.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/presentation/SwapFragment.kt @@ -5,6 +5,7 @@ import androidx.compose.animation.Crossfade import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.fragment.app.viewModels +import com.tangem.core.navigation.ReduxNavController import com.tangem.core.ui.components.SystemBarsEffect import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.screen.ComposeFragment @@ -26,6 +27,9 @@ class SwapFragment : ComposeFragment() { @Inject override lateinit var appThemeModeHolder: AppThemeModeHolder + @Inject + lateinit var reduxNavController: ReduxNavController + private val viewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { @@ -35,6 +39,7 @@ class SwapFragment : ComposeFragment() { SwapRouter( fragmentManager = WeakReference(parentFragmentManager), customTabsManager = CustomTabsManager(WeakReference(context)), + reduxNavController = reduxNavController, ), ) } diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/router/SwapRouter.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/router/SwapRouter.kt index 62ce0901c5..081730868d 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/router/SwapRouter.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/router/SwapRouter.kt @@ -3,12 +3,20 @@ package com.tangem.feature.swap.router import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue +import androidx.core.os.bundleOf import androidx.fragment.app.FragmentManager +import com.tangem.core.navigation.AppScreen +import com.tangem.core.navigation.NavigationAction +import com.tangem.core.navigation.ReduxNavController +import com.tangem.domain.tokens.model.CryptoCurrency +import com.tangem.domain.wallets.models.UserWalletId +import com.tangem.features.tokendetails.navigation.TokenDetailsRouter import java.lang.ref.WeakReference internal class SwapRouter( private val fragmentManager: WeakReference, private val customTabsManager: CustomTabsManager, + private val reduxNavController: ReduxNavController, ) { var currentScreen by mutableStateOf(SwapNavScreen.Main) @@ -29,6 +37,18 @@ internal class SwapRouter( fun openUrl(url: String) { customTabsManager.openUrl(url) } + + fun openTokenDetails(userWalletId: UserWalletId, currency: CryptoCurrency) { + reduxNavController.navigate( + action = NavigationAction.NavigateTo( + screen = AppScreen.WalletDetails, + bundle = bundleOf( + TokenDetailsRouter.USER_WALLET_ID_KEY to userWalletId.stringValue, + TokenDetailsRouter.CRYPTO_CURRENCY_KEY to currency, + ), + ), + ) + } } enum class SwapNavScreen { diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt index 49bc2f821b..44ea71aac2 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt @@ -222,8 +222,7 @@ internal class StateBuilder( ), ) } - if (quoteModel.preparedSwapConfigState.isAllowedToSpend && - !quoteModel.preparedSwapConfigState.isFeeEnough && + if (!quoteModel.preparedSwapConfigState.isFeeEnough && quoteModel.preparedSwapConfigState.isBalanceEnough ) { warnings.add( @@ -896,7 +895,7 @@ internal class StateBuilder( ), iconResId = fromToken.networkIconResId, buttonsState = NotificationConfig.ButtonsState.SecondaryButtonConfig( - text = resourceReference(R.string.common_buy_currency, wrappedList(fromToken.name)), + text = resourceReference(R.string.common_buy_currency, wrappedList(fromToken.network.currencySymbol)), onClick = onBuyClick, ), ) diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt index dae161d290..65d865ae21 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt @@ -748,7 +748,11 @@ internal class SwapViewModel @Inject constructor( ) } }, - onBuyClick = {}, + onBuyClick = { + swapInteractor.getSelectedWallet()?.let { + swapRouter.openTokenDetails(it.walletId, swapInteractor.getNativeToken(dataState.networkId)) + } + }, ) }