From 279371a8b327501e8e9d3364281877a7784c6697 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 19 Jan 2026 20:51:14 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../ui/navigationButtons/NavigationButtonsBlock.kt | 9 ++++++--- .../tangem/core/ui/utils/MultipleClickPreventer.kt | 12 ++++++++++++ .../destination/ui/SendDestinationContent.kt | 7 ++++++- gradle/tangem_dependencies.toml | 2 +- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsBlock.kt b/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsBlock.kt index 1941c34ff9..dde935dbec 100644 --- a/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsBlock.kt +++ b/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsBlock.kt @@ -36,6 +36,7 @@ import com.tangem.core.ui.extensions.resolveReference import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.res.TangemThemePreview import com.tangem.core.ui.test.SendScreenTestTags +import com.tangem.core.ui.utils.GlobalMultipleClickPreventer import com.tangem.core.ui.utils.singleEvent @Composable @@ -112,10 +113,12 @@ fun NavigationPrimaryButton(primaryButton: NavigationButton?, modifier: Modifier text = button.textReference.resolveReference(), enabled = button.isEnabled, onClick = { - if (button.isHapticClick) { - hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress) + GlobalMultipleClickPreventer.processEvent { + if (button.isHapticClick) { + hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress) + } + button.onClick() } - button.onClick() }, showProgress = button.shouldShowProgress, colors = color, diff --git a/core/ui/src/main/java/com/tangem/core/ui/utils/MultipleClickPreventer.kt b/core/ui/src/main/java/com/tangem/core/ui/utils/MultipleClickPreventer.kt index 767e1ada4d..b6342687d3 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/utils/MultipleClickPreventer.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/utils/MultipleClickPreventer.kt @@ -15,6 +15,18 @@ interface MultipleClickPreventer { } } +/** + * A global instance of [MultipleClickPreventer] + * Use for preventing multiple clicks in the entire app. + * For example, when we must ensure correct data is passed while editing values and navigating to next screen. + * + * @example + * GlobalMultipleClickPreventer.processEvent { + * // Handle click event + * } + */ +val GlobalMultipleClickPreventer = MultipleClickPreventer.get() + private class DefaultMultipleClickPreventer : MultipleClickPreventer { private val now: Long get() = SystemClock.elapsedRealtime() private var lastEventTimeMs: Long = 0 diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/ui/SendDestinationContent.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/ui/SendDestinationContent.kt index 96592fdf28..af74dc8471 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/ui/SendDestinationContent.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/ui/SendDestinationContent.kt @@ -29,6 +29,7 @@ import com.tangem.core.ui.components.inputrow.InputRowRecipient import com.tangem.core.ui.extensions.* import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.test.SendAddressScreenTestTags +import com.tangem.core.ui.utils.GlobalMultipleClickPreventer import com.tangem.features.send.v2.api.subcomponents.destination.entity.DestinationRecipientListUM import com.tangem.features.send.v2.api.subcomponents.destination.entity.DestinationTextFieldUM import com.tangem.features.send.v2.api.subcomponents.destination.entity.DestinationUM @@ -135,7 +136,11 @@ private fun LazyListScope.addressItem( title = address.label, placeholder = address.placeholder, onValueChange = { onAddressChange(it, EnterAddressSource.InputField) }, - onPasteClick = { onAddressChange(it, EnterAddressSource.PasteButton) }, + onPasteClick = { + GlobalMultipleClickPreventer.processEvent { + onAddressChange(it, EnterAddressSource.PasteButton) + } + }, onQrCodeClick = onQrCodeClick, isError = isError, isLoading = isValidating, diff --git a/gradle/tangem_dependencies.toml b/gradle/tangem_dependencies.toml index 3a00dc0651..e31c24f2d0 100644 --- a/gradle/tangem_dependencies.toml +++ b/gradle/tangem_dependencies.toml @@ -5,7 +5,7 @@ # https://github.com/tangem/tangem-sdk-android/ # https://github.com/tangem/vico -tangemBlockchainSdk = "releases-5.31.1-1334" +tangemBlockchainSdk = "releases-5.31.1-1374" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "releases-5.31-569" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^