From 18d0c3274bea9781d0acb8bc63d5829b667f04c2 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 10 Nov 2023 15:39:33 +0300 Subject: [PATCH 01/27] Updated on 2026-08-14 --- gradle/dependencies.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index 6de5a3f3ab..7befcd6495 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -88,9 +88,9 @@ spr-client = "3.6.2" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "develop-384" +tangemBlockchainSdk = "release-app_5.2-385" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds -tangemCardSdk = "develop-310" +tangemCardSdk = "release-app_5.2-311" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds # endregion Tangem From ec251e07e452fdd749993faf1744e73c17e814e0 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 13 Nov 2023 19:01:05 +0300 Subject: [PATCH 02/27] Updated on 2026-08-14 --- gradle/dependencies.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index 7befcd6495..4cda278a00 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -88,7 +88,7 @@ spr-client = "3.6.2" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "release-app_5.2-385" +tangemBlockchainSdk = "release-app_5.2-386" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "release-app_5.2-311" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds From 0d636794d37972bddaf84948cb74fa4dea5f5a4c Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 14 Nov 2023 11:11:01 +0300 Subject: [PATCH 03/27] Updated on 2026-08-14 --- .../tap/features/details/ui/details/DetailsScreenState.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreenState.kt b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreenState.kt index 6675322128..5a1c6150cf 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreenState.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreenState.kt @@ -143,9 +143,9 @@ internal object TangemSocialAccounts { SocialNetworkLink(SocialNetwork.Telegram, "https://t.me/tangem_chat"), SocialNetworkLink(SocialNetwork.Discord, "https://discord.gg/tangem"), SocialNetworkLink(SocialNetwork.Reddit, "https://www.reddit.com/r/Tangem/"), - SocialNetworkLink(SocialNetwork.Instagram, "https://instagram.com/tangemcards"), + SocialNetworkLink(SocialNetwork.Instagram, "https://www.instagram.com/tangemwallet"), SocialNetworkLink(SocialNetwork.GitHub, "https://github.com/tangem"), - SocialNetworkLink(SocialNetwork.Facebook, "https://facebook.com/TangemCards/"), + SocialNetworkLink(SocialNetwork.Facebook, "https://www.facebook.com/tangemwallet"), SocialNetworkLink(SocialNetwork.LinkedIn, "https://www.linkedin.com/company/tangem"), SocialNetworkLink(SocialNetwork.YouTube, "https://youtube.com/@tangem3890"), ) @@ -154,9 +154,9 @@ internal object TangemSocialAccounts { SocialNetworkLink(SocialNetwork.Telegram, "https://t.me/tangem_chat_ru"), SocialNetworkLink(SocialNetwork.Discord, "https://discord.gg/tangem"), SocialNetworkLink(SocialNetwork.Reddit, "https://www.reddit.com/r/Tangem/"), - SocialNetworkLink(SocialNetwork.Instagram, "https://instagram.com/tangemcards"), + SocialNetworkLink(SocialNetwork.Instagram, "https://www.instagram.com/tangemwallet"), SocialNetworkLink(SocialNetwork.GitHub, "https://github.com/tangem"), - SocialNetworkLink(SocialNetwork.Facebook, "https://facebook.com/TangemCards/"), + SocialNetworkLink(SocialNetwork.Facebook, "https://www.facebook.com/tangemwallet"), SocialNetworkLink(SocialNetwork.LinkedIn, "https://www.linkedin.com/company/tangem"), SocialNetworkLink(SocialNetwork.YouTube, "https://youtube.com/@tangem3890"), ) From 894958995e42f19499d0ba6b45844d6215fe9d5a Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 14 Nov 2023 17:53:07 +0300 Subject: [PATCH 04/27] Updated on 2026-08-14 --- app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt b/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt index e919fa41ec..42bd7ec930 100644 --- a/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt @@ -112,6 +112,7 @@ internal class MainViewModel @Inject constructor( override fun onHiddenBalanceNotificationAction(isPermanent: Boolean) { onDismissBottomSheet() + stateHolder.updateWithHiddenBalancesToast(true) if (isPermanent) { viewModelScope.launch { updateBalanceHidingSettingsUseCase.invoke { @@ -123,5 +124,6 @@ internal class MainViewModel @Inject constructor( override fun onDismissBottomSheet() { stateHolder.updateWithoutModalNotification() + stateHolder.updateWithHiddenBalancesToast(true) } } \ No newline at end of file From 608fc06cf177b12b09d233e8cf21a2b3663ba306 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 14 Nov 2023 17:54:05 +0300 Subject: [PATCH 05/27] Updated on 2026-08-14 --- .../main/java/com/tangem/tap/features/main/MainViewModel.kt | 2 ++ .../com/tangem/domain/balancehiding/ListenToFlipsUseCase.kt | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt b/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt index 42bd7ec930..0d810f77fb 100644 --- a/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt @@ -51,6 +51,7 @@ internal class MainViewModel @Inject constructor( } .onEach { if (state.value.modalNotification?.isShow != true) { + listenToFlipsUseCase.isEnabled = false stateHolder.updateWithHiddenBalancesNotification() reduxNavController.navigate(NavigationAction.NavigateTo(AppScreen.ModalNotification)) } @@ -123,6 +124,7 @@ internal class MainViewModel @Inject constructor( } override fun onDismissBottomSheet() { + listenToFlipsUseCase.isEnabled = true stateHolder.updateWithoutModalNotification() stateHolder.updateWithHiddenBalancesToast(true) } diff --git a/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/ListenToFlipsUseCase.kt b/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/ListenToFlipsUseCase.kt index c80577e10e..0c926f6acf 100644 --- a/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/ListenToFlipsUseCase.kt +++ b/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/ListenToFlipsUseCase.kt @@ -14,6 +14,8 @@ class ListenToFlipsUseCase( private val balanceHidingRepository: BalanceHidingRepository, ) { + var isEnabled: Boolean = true + operator fun invoke(): Flow> = channelFlow { flipDetector.getDeviceFlipFlow().collectLatest { val balanceHidingSettings = catch( @@ -24,7 +26,7 @@ class ListenToFlipsUseCase( }, ) - if (balanceHidingSettings.isHidingEnabledInSettings) { + if (balanceHidingSettings.isHidingEnabledInSettings && isEnabled) { catch( block = { balanceHidingRepository.storeBalanceHidingSettings( From cf66f5f2d82e25bc07977201eecee5f6a50df99c Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 14 Nov 2023 17:56:21 +0300 Subject: [PATCH 06/27] Updated on 2026-08-14 --- .../main/ui/ModalNotificationBottomSheetFragment.kt | 8 +++++++- .../main/ui/components/ModalNotificationScreen.kt | 8 ++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/main/ui/ModalNotificationBottomSheetFragment.kt b/app/src/main/java/com/tangem/tap/features/main/ui/ModalNotificationBottomSheetFragment.kt index 2a40e92ef8..ec7cb8d416 100644 --- a/app/src/main/java/com/tangem/tap/features/main/ui/ModalNotificationBottomSheetFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/main/ui/ModalNotificationBottomSheetFragment.kt @@ -2,12 +2,14 @@ package com.tangem.tap.features.main.ui import android.content.DialogInterface import androidx.activity.compose.BackHandler +import androidx.compose.foundation.background import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.fragment.app.activityViewModels import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.screen.ComposeBottomSheetFragment import com.tangem.core.ui.theme.AppThemeModeHolder import com.tangem.tap.features.main.MainViewModel @@ -37,7 +39,11 @@ internal class ModalNotificationBottomSheetFragment : ComposeBottomSheetFragment when (val content = notification.content) { is ModalNotification -> ModalNotificationContent( - modifier = modifier, + modifier = modifier + .background( + color = TangemTheme.colors.background.primary, + shape = TangemTheme.shapes.bottomSheet, + ), notification = content, ) else -> Unit diff --git a/app/src/main/java/com/tangem/tap/features/main/ui/components/ModalNotificationScreen.kt b/app/src/main/java/com/tangem/tap/features/main/ui/components/ModalNotificationScreen.kt index 3ebb87e8dd..587b734dc0 100644 --- a/app/src/main/java/com/tangem/tap/features/main/ui/components/ModalNotificationScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/main/ui/components/ModalNotificationScreen.kt @@ -88,9 +88,9 @@ private fun ModalNotificationContentPreview_Light( ) { TangemTheme(isDark = false) { ModalNotificationContent( - param, + notification = param, modifier = Modifier.background( - color = TangemTheme.colors.background.plain, + color = TangemTheme.colors.background.primary, shape = TangemTheme.shapes.bottomSheet, ), ) @@ -104,9 +104,9 @@ private fun ModalNotificationContentPreview_Dark( ) { TangemTheme(isDark = true) { ModalNotificationContent( - param, + notification = param, modifier = Modifier.background( - color = TangemTheme.colors.background.plain, + color = TangemTheme.colors.background.primary, shape = TangemTheme.shapes.bottomSheet, ), ) From ed34a8da881674d86710b6d5805e15340c224e86 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 14 Nov 2023 17:57:09 +0300 Subject: [PATCH 07/27] Updated on 2026-08-14 --- .../com/tangem/tap/features/send/ui/SendViewModel.kt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/send/ui/SendViewModel.kt b/app/src/main/java/com/tangem/tap/features/send/ui/SendViewModel.kt index fe7c000ae6..4d9bdb266a 100644 --- a/app/src/main/java/com/tangem/tap/features/send/ui/SendViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/send/ui/SendViewModel.kt @@ -17,10 +17,10 @@ import com.tangem.utils.coroutines.CoroutineDispatcherProvider import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext import timber.log.Timber import javax.inject.Inject @@ -44,13 +44,12 @@ internal class SendViewModel @Inject constructor( getBalanceHidingSettingsUseCase() .flowWithLifecycle(owner.lifecycle) .onEach { - withContext(dispatchers.main) { - appStateHolder.mainStore?.dispatch(AmountAction.HideBalance(it.isBalanceHidden)) - } + appStateHolder.mainStore?.dispatch(AmountAction.HideBalance(it.isBalanceHidden)) } + .flowOn(dispatchers.main) .launchIn(viewModelScope) - viewModelScope.launch { + viewModelScope.launch(dispatchers.main) { listenToFlipsUseCase() .flowWithLifecycle(owner.lifecycle) .collect() From 7763737278680ab28bdfb52595f7ffec1465feaf Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 14 Nov 2023 17:58:14 +0300 Subject: [PATCH 08/27] Updated on 2026-08-14 --- .../com/tangem/tap/features/main/MainViewModel.kt | 14 +++++++++++--- .../domain/balancehiding/BalanceHidingSettings.kt | 1 + .../domain/balancehiding/ListenToFlipsUseCase.kt | 1 + 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt b/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt index 0d810f77fb..8c26991fa2 100644 --- a/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt @@ -80,7 +80,9 @@ internal class MainViewModel @Inject constructor( return@onEach } - displayBalancesHiddenStatusToast(settings) + if (!settings.isUpdateFromToast) { + displayBalancesHiddenStatusToast(settings) + } previousSettings = settings } @@ -97,7 +99,10 @@ internal class MainViewModel @Inject constructor( override fun onHiddenBalanceToastAction() { viewModelScope.launch { updateBalanceHidingSettingsUseCase.invoke { - copy(isBalanceHidden = false) + copy( + isBalanceHidden = false, + isUpdateFromToast = true + ) } } } @@ -105,7 +110,10 @@ internal class MainViewModel @Inject constructor( override fun onShownBalanceToastAction() { viewModelScope.launch { updateBalanceHidingSettingsUseCase.invoke { - copy(isBalanceHidden = true) + copy( + isBalanceHidden = true, + isUpdateFromToast = true + ) } } } diff --git a/domain/balance-hiding/models/src/main/kotlin/com/tangem/domain/balancehiding/BalanceHidingSettings.kt b/domain/balance-hiding/models/src/main/kotlin/com/tangem/domain/balancehiding/BalanceHidingSettings.kt index 2432bbc2ec..b646dd8c30 100644 --- a/domain/balance-hiding/models/src/main/kotlin/com/tangem/domain/balancehiding/BalanceHidingSettings.kt +++ b/domain/balance-hiding/models/src/main/kotlin/com/tangem/domain/balancehiding/BalanceHidingSettings.kt @@ -4,4 +4,5 @@ data class BalanceHidingSettings( val isHidingEnabledInSettings: Boolean, val isBalanceHidden: Boolean, val isBalanceHidingNotificationEnabled: Boolean, + val isUpdateFromToast: Boolean = false, ) \ No newline at end of file diff --git a/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/ListenToFlipsUseCase.kt b/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/ListenToFlipsUseCase.kt index 0c926f6acf..38b29bb587 100644 --- a/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/ListenToFlipsUseCase.kt +++ b/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/ListenToFlipsUseCase.kt @@ -32,6 +32,7 @@ class ListenToFlipsUseCase( balanceHidingRepository.storeBalanceHidingSettings( balanceHidingSettings.copy( isBalanceHidden = !balanceHidingSettings.isBalanceHidden, + isUpdateFromToast = false, ), ) }, From cef6a7b3722c9a7b002bfddcea9d405ab0ab2603 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 14 Nov 2023 18:26:36 +0300 Subject: [PATCH 09/27] Updated on 2026-08-14 --- .../main/java/com/tangem/tap/features/main/MainViewModel.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt b/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt index 8c26991fa2..951ad331bc 100644 --- a/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt @@ -50,7 +50,7 @@ internal class MainViewModel @Inject constructor( it.isBalanceHidingNotificationEnabled && it.isBalanceHidden } .onEach { - if (state.value.modalNotification?.isShow != true) { + if (state.value.modalNotification?.isShow != true && !it.isUpdateFromToast) { listenToFlipsUseCase.isEnabled = false stateHolder.updateWithHiddenBalancesNotification() reduxNavController.navigate(NavigationAction.NavigateTo(AppScreen.ModalNotification)) @@ -101,7 +101,7 @@ internal class MainViewModel @Inject constructor( updateBalanceHidingSettingsUseCase.invoke { copy( isBalanceHidden = false, - isUpdateFromToast = true + isUpdateFromToast = true, ) } } @@ -112,7 +112,7 @@ internal class MainViewModel @Inject constructor( updateBalanceHidingSettingsUseCase.invoke { copy( isBalanceHidden = true, - isUpdateFromToast = true + isUpdateFromToast = true, ) } } From f394a5b57b5cbe37e3001a731c0c6b51e3850e29 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 14 Nov 2023 19:07:28 +0300 Subject: [PATCH 10/27] Updated on 2026-08-14 --- .../java/com/tangem/tap/features/main/MainViewModel.kt | 4 ++-- .../data/balancehiding/DefaultBalanceHidingRepository.kt | 2 ++ .../tangem/domain/balancehiding/ListenToFlipsUseCase.kt | 8 +++++--- .../balancehiding/repositories/BalanceHidingRepository.kt | 2 ++ 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt b/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt index 951ad331bc..5725564ef4 100644 --- a/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/main/MainViewModel.kt @@ -51,7 +51,7 @@ internal class MainViewModel @Inject constructor( } .onEach { if (state.value.modalNotification?.isShow != true && !it.isUpdateFromToast) { - listenToFlipsUseCase.isEnabled = false + listenToFlipsUseCase.changeUpdateEnabled(false) stateHolder.updateWithHiddenBalancesNotification() reduxNavController.navigate(NavigationAction.NavigateTo(AppScreen.ModalNotification)) } @@ -132,7 +132,7 @@ internal class MainViewModel @Inject constructor( } override fun onDismissBottomSheet() { - listenToFlipsUseCase.isEnabled = true + listenToFlipsUseCase.changeUpdateEnabled(true) stateHolder.updateWithoutModalNotification() stateHolder.updateWithHiddenBalancesToast(true) } diff --git a/data/balance-hiding/src/main/java/com/tangem/data/balancehiding/DefaultBalanceHidingRepository.kt b/data/balance-hiding/src/main/java/com/tangem/data/balancehiding/DefaultBalanceHidingRepository.kt index 879bef5f17..780b3705a8 100644 --- a/data/balance-hiding/src/main/java/com/tangem/data/balancehiding/DefaultBalanceHidingRepository.kt +++ b/data/balance-hiding/src/main/java/com/tangem/data/balancehiding/DefaultBalanceHidingRepository.kt @@ -15,6 +15,8 @@ internal class DefaultBalanceHidingRepository( private val dispatchers: CoroutineDispatcherProvider, ) : BalanceHidingRepository { + override var isUpdateEnabled: Boolean = true + override fun getBalanceHidingSettingsFlow(): Flow { return balanceHidingSettingsStore.get() .onStart { emit(getBalanceHidingSettings()) } diff --git a/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/ListenToFlipsUseCase.kt b/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/ListenToFlipsUseCase.kt index 38b29bb587..d518006d05 100644 --- a/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/ListenToFlipsUseCase.kt +++ b/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/ListenToFlipsUseCase.kt @@ -14,8 +14,6 @@ class ListenToFlipsUseCase( private val balanceHidingRepository: BalanceHidingRepository, ) { - var isEnabled: Boolean = true - operator fun invoke(): Flow> = channelFlow { flipDetector.getDeviceFlipFlow().collectLatest { val balanceHidingSettings = catch( @@ -26,7 +24,7 @@ class ListenToFlipsUseCase( }, ) - if (balanceHidingSettings.isHidingEnabledInSettings && isEnabled) { + if (balanceHidingSettings.isHidingEnabledInSettings && balanceHidingRepository.isUpdateEnabled) { catch( block = { balanceHidingRepository.storeBalanceHidingSettings( @@ -43,4 +41,8 @@ class ListenToFlipsUseCase( } } } + + fun changeUpdateEnabled(isUpdateEnabled: Boolean) { + balanceHidingRepository.isUpdateEnabled = isUpdateEnabled + } } \ No newline at end of file diff --git a/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/repositories/BalanceHidingRepository.kt b/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/repositories/BalanceHidingRepository.kt index 84161a07d9..93d21ef4b2 100644 --- a/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/repositories/BalanceHidingRepository.kt +++ b/domain/balance-hiding/src/main/kotlin/com/tangem/domain/balancehiding/repositories/BalanceHidingRepository.kt @@ -5,6 +5,8 @@ import kotlinx.coroutines.flow.Flow interface BalanceHidingRepository { + var isUpdateEnabled: Boolean + fun getBalanceHidingSettingsFlow(): Flow suspend fun storeBalanceHidingSettings(isBalanceHidden: BalanceHidingSettings) From 42cb399a12a76dbdb56b2aff40c702a62cd8612a Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 14 Nov 2023 12:35:45 +0300 Subject: [PATCH 11/27] Updated on 2026-08-14 --- .../DefaultMarketCryptoCurrencyRepository.kt | 8 +++++++- .../com/tangem/domain/tokens/model/CryptoCurrency.kt | 2 ++ .../tangem/feature/swap/domain/SwapInteractorImpl.kt | 10 +++++++++- 3 files changed, 18 insertions(+), 2 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 441f3f97d2..2211aa96cd 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 @@ -17,6 +17,12 @@ class DefaultMarketCryptoCurrencyRepository( return userMarketCoinsStore.getSyncOrNull(userWalletId)?.coins ?.firstOrNull { it.id == cryptoCurrencyId.rawCurrencyId } ?.networks - ?.firstOrNull { it.networkId == apiNetworkId }?.exchangeable ?: false + ?.firstOrNull { + if (it.contractAddress != null) { + it.networkId == apiNetworkId && it.contractAddress == cryptoCurrencyId.contractAddress + } else { + it.networkId == apiNetworkId + } + }?.exchangeable ?: false } } \ No newline at end of file diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/CryptoCurrency.kt b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/CryptoCurrency.kt index e360bda6e4..87015b1305 100644 --- a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/CryptoCurrency.kt +++ b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/CryptoCurrency.kt @@ -94,6 +94,8 @@ sealed class CryptoCurrency : Parcelable { /** Represents a raw cryptocurrency ID. If it is a custom token, the value will be `null`. */ val rawCurrencyId: String? get() = (suffix as? Suffix.RawID)?.rawId + val contractAddress: String? get() = (suffix as? Suffix.RawID)?.contractAddress + /** Represents a raw cryptocurrency's network ID. */ val rawNetworkId: String get() = when (body) { 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 d76a2d777e..4e6dcfa4cf 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 @@ -23,6 +23,7 @@ import timber.log.Timber import java.math.BigDecimal import java.math.RoundingMode import javax.inject.Inject +import com.tangem.lib.crypto.models.Currency as LibCurrency @Suppress("LargeClass", "LongParameterList") internal class SwapInteractorImpl @Inject constructor( @@ -70,7 +71,14 @@ internal class SwapInteractorImpl @Inject constructor( isExcludeCustom = true, ) .map { token -> - allLoadedTokens.firstOrNull { it.symbol == token.symbol }?.let { + val contractAddress = (token as? LibCurrency.NonNativeToken)?.contractAddress + allLoadedTokens.firstOrNull { + if (it is Currency.NonNativeToken) { + it.symbol == token.symbol && it.contractAddress == contractAddress + } else { + it.symbol == token.symbol + } + }?.let { loadedOnWalletsMap.add(it.symbol) it } ?: swapCurrencyConverter.convertBack(token) From 31b391250a1a63a87414b8475705f1520de14d62 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 15 Nov 2023 11:11:01 +0300 Subject: [PATCH 12/27] Updated on 2026-08-14 --- app/src/main/assets/tangem-app-config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config index 2b49c08b92..f5a90466d2 160000 --- a/app/src/main/assets/tangem-app-config +++ b/app/src/main/assets/tangem-app-config @@ -1 +1 @@ -Subproject commit 2b49c08b924c03322f35542a7482e4e9fb1928d3 +Subproject commit f5a90466d2245ca5cfde59b49dc7fa82a6b7cbc2 From e7b84d6b8bd989e80b699a358593f7c13749b46d Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 15 Nov 2023 11:30:44 +0300 Subject: [PATCH 13/27] Updated on 2026-08-14 --- gradle/dependencies.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index 4cda278a00..ee032b368e 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -88,7 +88,7 @@ spr-client = "3.6.2" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "release-app_5.2-386" +tangemBlockchainSdk = "release-app_5.2-388" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "release-app_5.2-311" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds From 01f7a64b0b81df8a92b2f8941cd19e0f47621c26 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 16 Nov 2023 12:27:10 +0300 Subject: [PATCH 14/27] Updated on 2026-08-14 --- .../impl/presentation/viewmodels/AddCustomTokenViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/viewmodels/AddCustomTokenViewModel.kt b/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/viewmodels/AddCustomTokenViewModel.kt index 0a38a59439..d29e81ad9e 100644 --- a/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/viewmodels/AddCustomTokenViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/viewmodels/AddCustomTokenViewModel.kt @@ -606,7 +606,7 @@ internal class AddCustomTokenViewModel @Inject constructor( val savedTokenId = if (token.isCustom) null else token.id.rawCurrencyId val sameId = foundToken?.id == savedTokenId - val sameAddress = contractAddress == token.contractAddress + val sameAddress = contractAddress.equals(token.contractAddress, ignoreCase = true) val sameBlockchain = networkId == token.network.id.value val isSameDerivationPath = getDerivationPath()?.rawPath == token.network.derivationPath.value From 01800949ab8ac57a31ea22e9bd4386475a8b12f8 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 16 Nov 2023 12:27:31 +0300 Subject: [PATCH 15/27] Updated on 2026-08-14 --- core/ui/src/main/java/com/tangem/core/ui/res/TangemTheme.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/ui/src/main/java/com/tangem/core/ui/res/TangemTheme.kt b/core/ui/src/main/java/com/tangem/core/ui/res/TangemTheme.kt index db286e6d51..93dae822ba 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/res/TangemTheme.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/res/TangemTheme.kt @@ -156,7 +156,7 @@ private fun darkThemeColors(): TangemColors { attention = TangemColorPalette.Mustard, ), button = TangemColors.Button( - primary = TangemColorPalette.Light1, + primary = TangemColorPalette.Light4, secondary = TangemColorPalette.Dark5, disabled = TangemColorPalette.Dark5, positiveDisabled = TangemColorPalette.DarkGreen, From ff1da9629ff357ac34dad95d267da244afeca8e2 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 16 Nov 2023 16:02:10 +0800 Subject: [PATCH 16/27] Updated on 2026-08-14 --- .../bottomsheets/tokenreceive/TokenReceiveBottomSheet.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/bottomsheets/tokenreceive/TokenReceiveBottomSheet.kt b/core/ui/src/main/java/com/tangem/core/ui/components/bottomsheets/tokenreceive/TokenReceiveBottomSheet.kt index b9dc31d04f..704418b5ec 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/bottomsheets/tokenreceive/TokenReceiveBottomSheet.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/bottomsheets/tokenreceive/TokenReceiveBottomSheet.kt @@ -2,9 +2,7 @@ package com.tangem.core.ui.components.bottomsheets.tokenreceive import android.widget.Toast import androidx.compose.animation.animateColorAsState -import androidx.compose.foundation.ExperimentalFoundationApi -import androidx.compose.foundation.Image -import androidx.compose.foundation.background +import androidx.compose.foundation.* import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.rememberLazyListState @@ -43,6 +41,7 @@ private fun TokenReceiveBottomSheetContent(content: TokenReceiveBottomSheetConfi var selectedAddress by remember { mutableStateOf(content.addresses.first()) } Column( modifier = Modifier + .verticalScroll(state = rememberScrollState()) .padding( start = TangemTheme.dimens.spacing24, top = TangemTheme.dimens.spacing24, From af5e1b0eb1d48cd3749e6b8f388e4d5e296bd805 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 16 Nov 2023 18:14:08 +0500 Subject: [PATCH 17/27] Updated on 2026-08-14 --- gradle/dependencies.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index ee032b368e..6b1a2ec671 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -88,7 +88,7 @@ spr-client = "3.6.2" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "release-app_5.2-388" +tangemBlockchainSdk = "release-app_5.2-389" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "release-app_5.2-311" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds From 4aeca2c72ea97495032fa1b8872aea312a186481 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 16 Nov 2023 21:37:36 +0800 Subject: [PATCH 18/27] Updated on 2026-08-14 --- .../presentation/common/component/TokenItem.kt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/component/TokenItem.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/component/TokenItem.kt index ac0fac75db..9a3d17502f 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/component/TokenItem.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/component/TokenItem.kt @@ -45,13 +45,18 @@ internal fun TokenItem( .tokenClickable(state = state) .background(color = TangemTheme.colors.background.primary), ) { - TokenIcon(state = state.iconState, modifier = Modifier.layoutId(layoutId = LayoutId.ICON)) + TokenIcon( + state = state.iconState, + modifier = Modifier + .layoutId(layoutId = LayoutId.ICON) + .padding(end = TangemTheme.dimens.spacing8), + ) TokenTitle( state = state.titleState, modifier = Modifier .layoutId(layoutId = LayoutId.TITLE) - .padding(horizontal = TangemTheme.dimens.spacing8) + .padding(end = TangemTheme.dimens.spacing8) .padding(bottom = betweenRowsMargin), ) @@ -67,7 +72,7 @@ internal fun TokenItem( state = state.cryptoPriceState, modifier = Modifier .layoutId(layoutId = LayoutId.CRYPTO_PRICE) - .padding(horizontal = TangemTheme.dimens.spacing8), + .padding(end = TangemTheme.dimens.spacing8), ) TokenCryptoAmount( @@ -233,7 +238,10 @@ private fun CustomContainer(state: TokenItemState, modifier: Modifier = Modifier ) cryptoAmount?.placeRelative( - x = layoutWidth - cryptoAmount.width - layoutPadding, + x = when (state) { + is TokenItemState.Draggable -> layoutPadding + icon.width + else -> layoutWidth - cryptoAmount.width - layoutPadding + }, y = layoutHeight - cryptoAmount.height - layoutPadding, ) From 00900bbf50c34217ac36d1fa354d2038e19f1487 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 17 Nov 2023 14:01:17 +0800 Subject: [PATCH 19/27] Updated on 2026-08-14 --- .../tangem/tap/common/redux/legacy/LegacyMiddleware.kt | 6 ++++++ .../src/main/java/com/tangem/domain/redux/LegacyAction.kt | 8 ++++++++ .../presentation/wallet/viewmodels/WalletViewModel.kt | 6 ++++++ 3 files changed, 20 insertions(+) diff --git a/app/src/main/java/com/tangem/tap/common/redux/legacy/LegacyMiddleware.kt b/app/src/main/java/com/tangem/tap/common/redux/legacy/LegacyMiddleware.kt index 495a45f59b..81d40b5307 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/legacy/LegacyMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/legacy/LegacyMiddleware.kt @@ -3,6 +3,7 @@ package com.tangem.tap.common.redux.legacy import com.tangem.domain.redux.LegacyAction import com.tangem.tap.common.feedback.RateCanBeBetterEmail import com.tangem.tap.common.redux.AppState +import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.store import org.rekotlin.Middleware @@ -14,6 +15,11 @@ internal object LegacyMiddleware { is LegacyAction.SendEmailRateCanBeBetter -> { store.state.globalState.feedbackManager?.sendEmail(RateCanBeBetterEmail()) } + is LegacyAction.StartOnboardingProcess -> { + store.dispatch( + GlobalAction.Onboarding.Start(action.scanResponse, canSkipBackup = action.canSkipBackup), + ) + } } next(action) } diff --git a/domain/legacy/src/main/java/com/tangem/domain/redux/LegacyAction.kt b/domain/legacy/src/main/java/com/tangem/domain/redux/LegacyAction.kt index 2565d2f226..f715061ac7 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/redux/LegacyAction.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/redux/LegacyAction.kt @@ -1,8 +1,16 @@ package com.tangem.domain.redux +import com.tangem.domain.models.scan.ScanResponse import org.rekotlin.Action sealed interface LegacyAction : Action { object SendEmailRateCanBeBetter : LegacyAction + + /** + * Initiate an onboarding process. + * For resuming unfinished backup of standard Wallet see + * BackupAction.CheckForUnfinishedBackup, GlobalAction.Onboarding.StartForUnfinishedBackup + */ + data class StartOnboardingProcess(val scanResponse: ScanResponse, val canSkipBackup: Boolean = true) : LegacyAction } \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt index d943c0f76a..bc1c275b2f 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt @@ -431,6 +431,12 @@ internal class WalletViewModel @Inject constructor( override fun onBackupCardClick() { analyticsEventsHandler.send(WalletScreenAnalyticsEvent.MainScreen.NoticeBackupYourWalletTapped) + reduxStateHolder.dispatch( + LegacyAction.StartOnboardingProcess( + scanResponse = getSelectedWallet().scanResponse, + canSkipBackup = false, + ), + ) router.openOnboardingScreen() } From fd73e63258b90ea5b9a3f56ff0c0c99b618e5e5b Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 17 Nov 2023 16:30:35 +0800 Subject: [PATCH 20/27] Updated on 2026-08-14 --- .../com/tangem/core/ui/extensions/BlockchainIcons.kt | 2 ++ core/ui/src/main/res/drawable/ic_near_22.xml | 9 +++++++++ 2 files changed, 11 insertions(+) create mode 100644 core/ui/src/main/res/drawable/ic_near_22.xml diff --git a/core/ui/src/main/java/com/tangem/core/ui/extensions/BlockchainIcons.kt b/core/ui/src/main/java/com/tangem/core/ui/extensions/BlockchainIcons.kt index 3c29a58544..e418da8ea3 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/extensions/BlockchainIcons.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/extensions/BlockchainIcons.kt @@ -45,6 +45,7 @@ fun getActiveIconRes(blockchainId: String): Int { "aleph-zero", "aleph-zero/test" -> R.drawable.img_azero_22 "octaspace", "octaspace/test" -> R.drawable.img_octaspace_22 "chia", "chia/test" -> R.drawable.img_chia_22 + "NEAR", "NEAR/test" -> R.drawable.img_near_22 "decimal", "decimal/testnet" -> R.drawable.img_decimal_22 else -> R.drawable.ic_alert_24 } @@ -135,6 +136,7 @@ fun getGreyedOutIconRes(blockchainId: String): Int { "aleph-zero", "aleph-zero/test" -> R.drawable.ic_azero_22 "octaspace", "octaspace/test" -> R.drawable.ic_octaspace_22 "chia", "chia/test" -> R.drawable.ic_chia_22 + "NEAR", "NEAR/test" -> R.drawable.ic_near_22 "decimal", "decimal/test" -> R.drawable.ic_decimal_22 else -> R.drawable.ic_alert_24 } diff --git a/core/ui/src/main/res/drawable/ic_near_22.xml b/core/ui/src/main/res/drawable/ic_near_22.xml new file mode 100644 index 0000000000..31661112fb --- /dev/null +++ b/core/ui/src/main/res/drawable/ic_near_22.xml @@ -0,0 +1,9 @@ + + + From 841cc26fb1bbb0afc785ff0391165cec34d1aad2 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 17 Nov 2023 16:30:35 +0800 Subject: [PATCH 21/27] Updated on 2026-08-14 --- gradle/dependencies.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index 6b1a2ec671..c5883d66de 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -88,7 +88,7 @@ spr-client = "3.6.2" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "release-app_5.2-389" +tangemBlockchainSdk = "release-app_5.2-391" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "release-app_5.2-311" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds From e35a99dbb018fe52a08cefa477019cbde1c711bb Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 17 Nov 2023 14:13:47 +0300 Subject: [PATCH 22/27] Updated on 2026-08-14 --- .../com/tangem/tap/features/home/compose/views/HomeButtons.kt | 4 ++-- app/src/main/res/values-night/colors.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/views/HomeButtons.kt b/app/src/main/java/com/tangem/tap/features/home/compose/views/HomeButtons.kt index 1bd1a192c6..aebf48b161 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/views/HomeButtons.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/views/HomeButtons.kt @@ -73,9 +73,9 @@ private fun OrderCardButton(onClick: () -> Unit, modifier: Modifier = Modifier) } private val LightBgScanCardButtonColors: ButtonColors = TangemButtonColors( - backgroundColor = TangemColorPalette.Light2, + backgroundColor = TangemColorPalette.Light4, contentColor = TangemColorPalette.Dark6, - disabledBackgroundColor = TangemColorPalette.Light2, + disabledBackgroundColor = TangemColorPalette.Dark5, disabledContentColor = TangemColorPalette.Dark6, ) diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 29535c674f..7b2c91dd38 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -10,7 +10,7 @@ #303030 - #F5F5F5 + #FFC9C9C9 #303030 #1ACE80 From dd4cb6eb52bd11743acb02daa27c203adb6868f4 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 17 Nov 2023 14:35:14 +0300 Subject: [PATCH 23/27] Updated on 2026-08-14 --- .../presentation/viewmodels/AddCustomTokenViewModel.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/viewmodels/AddCustomTokenViewModel.kt b/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/viewmodels/AddCustomTokenViewModel.kt index d29e81ad9e..b1f939c0f6 100644 --- a/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/viewmodels/AddCustomTokenViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/customtoken/impl/presentation/viewmodels/AddCustomTokenViewModel.kt @@ -602,10 +602,13 @@ internal class AddCustomTokenViewModel @Inject constructor( val networkSelectorValue = uiState.form.networkSelectorField.selectedItem.blockchain val networkId = Blockchain.fromNetworkId(networkSelectorValue.toNetworkId())?.id - // todo after move foundToken to CryptoCurrency model, use only id - val savedTokenId = if (token.isCustom) null else token.id.rawCurrencyId + val sameId = if (!token.isCustom) { + // todo after move foundToken to CryptoCurrency model, use only id + foundToken?.id == token.id.rawCurrencyId + } else { + true + } - val sameId = foundToken?.id == savedTokenId val sameAddress = contractAddress.equals(token.contractAddress, ignoreCase = true) val sameBlockchain = networkId == token.network.id.value val isSameDerivationPath = getDerivationPath()?.rawPath == token.network.derivationPath.value From 397d643fa0204c9358dcbeb432934a3c1185d925 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 17 Nov 2023 14:34:26 +0300 Subject: [PATCH 24/27] Updated on 2026-08-14 --- .../com/tangem/tap/features/send/ui/SendViewModel.kt | 9 --------- 1 file changed, 9 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/send/ui/SendViewModel.kt b/app/src/main/java/com/tangem/tap/features/send/ui/SendViewModel.kt index 4d9bdb266a..de5e810b88 100644 --- a/app/src/main/java/com/tangem/tap/features/send/ui/SendViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/send/ui/SendViewModel.kt @@ -2,7 +2,6 @@ package com.tangem.tap.features.send.ui import androidx.lifecycle.* import com.tangem.domain.balancehiding.GetBalanceHidingSettingsUseCase -import com.tangem.domain.balancehiding.ListenToFlipsUseCase import com.tangem.domain.tokens.FetchPendingTransactionsUseCase import com.tangem.domain.tokens.UpdateDelayedNetworkStatusUseCase import com.tangem.domain.tokens.model.CryptoCurrency @@ -16,7 +15,6 @@ import com.tangem.tap.proxy.AppStateHolder import com.tangem.utils.coroutines.CoroutineDispatcherProvider import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -30,7 +28,6 @@ internal class SendViewModel @Inject constructor( private val dispatchers: CoroutineDispatcherProvider, private val appStateHolder: AppStateHolder, private val getBalanceHidingSettingsUseCase: GetBalanceHidingSettingsUseCase, - private val listenToFlipsUseCase: ListenToFlipsUseCase, private val updateDelayedCurrencyStatusUseCase: UpdateDelayedNetworkStatusUseCase, private val getSelectedWalletSyncUseCase: GetSelectedWalletSyncUseCase, private val fetchPendingTransactionsUseCase: FetchPendingTransactionsUseCase, @@ -48,12 +45,6 @@ internal class SendViewModel @Inject constructor( } .flowOn(dispatchers.main) .launchIn(viewModelScope) - - viewModelScope.launch(dispatchers.main) { - listenToFlipsUseCase() - .flowWithLifecycle(owner.lifecycle) - .collect() - } } fun updateCurrencyDelayed() { From 33c966c9345ca39bdd1cbd19b670029ad8829fa0 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 17 Nov 2023 16:53:44 +0300 Subject: [PATCH 25/27] Updated on 2026-08-14 --- .../ui/components/transactions/TransactionList.kt | 2 +- .../ui/components/transactions/TxHistoryGroupTitle.kt | 9 +++++++-- .../components/transactions/state/TxHistoryState.kt | 6 +++++- .../TokenDetailsTxHistoryItemFlowConverter.kt | 11 +++++++++-- .../wallet/presentation/common/WalletPreviewData.kt | 10 ++++++++-- .../txhistory/WalletTxHistoryItemFlowConverter.kt | 8 ++++++-- gradle/dependencies.toml | 2 +- 7 files changed, 37 insertions(+), 11 deletions(-) diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/TransactionList.kt b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/TransactionList.kt index 5920e09e81..202930549a 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/TransactionList.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/TransactionList.kt @@ -81,7 +81,7 @@ private fun LazyListScope.contentItems( count = txHistoryItems.itemCount, key = txHistoryItems.itemKey { item -> when (item) { - is TxHistoryState.TxHistoryItemState.GroupTitle -> item.title + is TxHistoryState.TxHistoryItemState.GroupTitle -> item.itemKey is TxHistoryState.TxHistoryItemState.Title -> item.onExploreClick.hashCode() is TxHistoryState.TxHistoryItemState.Transaction -> item.state.txHash } diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/TxHistoryGroupTitle.kt b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/TxHistoryGroupTitle.kt index c7eaaa7978..4676fd5c49 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/TxHistoryGroupTitle.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/TxHistoryGroupTitle.kt @@ -10,6 +10,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import com.tangem.core.ui.components.transactions.state.TxHistoryState.TxHistoryItemState import com.tangem.core.ui.res.TangemTheme +import java.util.UUID /** * Transactions block group title @@ -38,7 +39,9 @@ internal fun TxHistoryGroupTitle(config: TxHistoryItemState.GroupTitle, modifier @Composable private fun Preview_TransactionsBlockGroupTitle_Light() { TangemTheme(isDark = false) { - TxHistoryGroupTitle(config = TxHistoryItemState.GroupTitle(title = "Today")) + TxHistoryGroupTitle( + config = TxHistoryItemState.GroupTitle(title = "Today", itemKey = UUID.randomUUID().toString()), + ) } } @@ -46,6 +49,8 @@ private fun Preview_TransactionsBlockGroupTitle_Light() { @Composable private fun Preview_TransactionsBlockGroupTitle_Dark() { TangemTheme(isDark = true) { - TxHistoryGroupTitle(config = TxHistoryItemState.GroupTitle(title = "Today")) + TxHistoryGroupTitle( + config = TxHistoryItemState.GroupTitle(title = "Today", itemKey = UUID.randomUUID().toString()), + ) } } \ No newline at end of file diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/state/TxHistoryState.kt b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/state/TxHistoryState.kt index 6e297a4196..9801f79276 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/state/TxHistoryState.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/state/TxHistoryState.kt @@ -49,8 +49,12 @@ sealed interface TxHistoryState { * Group title item * * @property title title + * @property itemKey key to use in compose */ - data class GroupTitle(val title: String) : TxHistoryItemState + data class GroupTitle( + val title: String, + val itemKey: String, + ) : TxHistoryItemState /** * Transaction item diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/txhistory/TokenDetailsTxHistoryItemFlowConverter.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/txhistory/TokenDetailsTxHistoryItemFlowConverter.kt index 40261aefd2..f43fa49739 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/txhistory/TokenDetailsTxHistoryItemFlowConverter.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/txhistory/TokenDetailsTxHistoryItemFlowConverter.kt @@ -18,6 +18,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.* import org.joda.time.DateTime import org.joda.time.DateTimeZone +import java.util.UUID internal class TokenDetailsTxHistoryItemFlowConverter( private val currentStateProvider: Provider, @@ -75,7 +76,10 @@ internal class TokenDetailsTxHistoryItemFlowConverter( // If [afterDate] is the first transaction in the flow, add the group title val afterDate = after.getTimestamp()?.toDateFormat() ?: return@insertSeparators null if (before is TxHistoryItemState.Title) { - return@insertSeparators TxHistoryItemState.GroupTitle(afterDate) + return@insertSeparators TxHistoryItemState.GroupTitle( + title = afterDate, + itemKey = UUID.randomUUID().toString(), + ) } /* @@ -84,7 +88,10 @@ internal class TokenDetailsTxHistoryItemFlowConverter( */ val beforeDate = before.getTimestamp()?.toDateFormat() ?: return@insertSeparators null return@insertSeparators if (beforeDate != afterDate) { - TxHistoryItemState.GroupTitle(afterDate) + TxHistoryItemState.GroupTitle( + title = afterDate, + itemKey = UUID.randomUUID().toString(), + ) } else { null } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/WalletPreviewData.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/WalletPreviewData.kt index e4f7243ad9..9ffd482c85 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/WalletPreviewData.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/WalletPreviewData.kt @@ -418,7 +418,10 @@ internal object WalletPreviewData { contentItems = MutableStateFlow( PagingData.from( listOf( - TxHistoryState.TxHistoryItemState.GroupTitle("Today"), + TxHistoryState.TxHistoryItemState.GroupTitle( + title = "Today", + itemKey = UUID.randomUUID().toString(), + ), TxHistoryState.TxHistoryItemState.Transaction( TransactionState.Content( txHash = UUID.randomUUID().toString(), @@ -432,7 +435,10 @@ internal object WalletPreviewData { onClick = {}, ), ), - TxHistoryState.TxHistoryItemState.GroupTitle("Yesterday"), + TxHistoryState.TxHistoryItemState.GroupTitle( + title = "Yesterday", + itemKey = UUID.randomUUID().toString(), + ), TxHistoryState.TxHistoryItemState.Transaction( TransactionState.Content( txHash = UUID.randomUUID().toString(), diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/factory/txhistory/WalletTxHistoryItemFlowConverter.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/factory/txhistory/WalletTxHistoryItemFlowConverter.kt index 8f3e20271e..32b55caef0 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/factory/txhistory/WalletTxHistoryItemFlowConverter.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/factory/txhistory/WalletTxHistoryItemFlowConverter.kt @@ -20,6 +20,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.* import org.joda.time.DateTime import org.joda.time.DateTimeZone +import java.util.UUID /** * Convert from [Flow] of [TxHistoryItem] to [TxHistoryState] @@ -83,7 +84,10 @@ internal class WalletTxHistoryItemFlowConverter( // If [afterDate] is the first transaction in the flow, add the group title val afterDate = after.getTimestamp()?.toDateFormat() ?: return@insertSeparators null if (before is TxHistoryItemState.Title) { - return@insertSeparators TxHistoryItemState.GroupTitle(afterDate) + return@insertSeparators TxHistoryItemState.GroupTitle( + title = afterDate, + itemKey = UUID.randomUUID().toString(), + ) } /* @@ -92,7 +96,7 @@ internal class WalletTxHistoryItemFlowConverter( */ val beforeDate = before.getTimestamp()?.toDateFormat() ?: return@insertSeparators null return@insertSeparators if (beforeDate != afterDate) { - TxHistoryItemState.GroupTitle(afterDate) + TxHistoryItemState.GroupTitle(title = afterDate, itemKey = UUID.randomUUID().toString()) } else { null } diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index c5883d66de..78c28fd647 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -88,7 +88,7 @@ spr-client = "3.6.2" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "release-app_5.2-391" +tangemBlockchainSdk = "release-app_5.2-392" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "release-app_5.2-311" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds From 92b1376868c82c969ee0fdfdbccc5e179529d52e Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 17 Nov 2023 19:16:12 +0500 Subject: [PATCH 26/27] Updated on 2026-08-14 --- core/res/src/main/res/values-ru/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 2af2ae2c68..1f60d46e46 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -88,6 +88,7 @@ Ошибка Обменять Посмотреть историю транзакций + Обозреватель Обозреватель Скорость и комиссия Сетевые комиссии за транзакции используются для поддержки безопасности сети, поощрения валидаторов, выделения ресурсов и определения приоритета транзакции. From 510a07f8af962c7dad71e24613bdcb71cc57a1bf Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 20 Nov 2023 15:08:31 +0300 Subject: [PATCH 27/27] Updated on 2026-08-14 --- .../main/java/com/tangem/domain/common/extensions/Blockchain.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/domain/legacy/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt b/domain/legacy/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt index df437d1241..2e72d3e67f 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt @@ -224,4 +224,6 @@ private const val NODL_AMOUNT_TO_CREATE_ACCOUNT = 1.5 private val excludedBlockchains = listOf( Blockchain.Unknown, Blockchain.Ducatus, + Blockchain.Decimal, + Blockchain.DecimalTestnet, ) \ No newline at end of file