From 8d5c607bcfe355d2bbc47c0f9dddfac516124a00 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 8 Feb 2024 20:40:12 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../components/buttons/common/TangemButton.kt | 8 +++++- .../core/ui/utils/MultipleClickPreventer.kt | 27 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 core/ui/src/main/java/com/tangem/core/ui/utils/MultipleClickPreventer.kt diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/buttons/common/TangemButton.kt b/core/ui/src/main/java/com/tangem/core/ui/components/buttons/common/TangemButton.kt index ae762b2803..b603622d2f 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/buttons/common/TangemButton.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/buttons/common/TangemButton.kt @@ -4,6 +4,7 @@ import androidx.compose.foundation.layout.* import androidx.compose.material.* import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.composed @@ -17,6 +18,7 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.sp import com.tangem.core.ui.components.ResizableText import com.tangem.core.ui.res.TangemTheme +import com.tangem.core.ui.utils.MultipleClickPreventer @Suppress("LongParameterList") @Composable @@ -34,9 +36,13 @@ fun TangemButton( textStyle: TextStyle = TangemTheme.typography.button, shape: Shape = size.toShape(), ) { + val multipleClickPreventer = remember { MultipleClickPreventer.get() } + Button( modifier = modifier.heightIn(min = size.toHeightDp()), - onClick = { if (!showProgress) onClick() }, + onClick = { + multipleClickPreventer.processEvent { if (!showProgress) onClick() } + }, enabled = enabled, elevation = elevation, shape = shape, 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 new file mode 100644 index 0000000000..15ede204ae --- /dev/null +++ b/core/ui/src/main/java/com/tangem/core/ui/utils/MultipleClickPreventer.kt @@ -0,0 +1,27 @@ +package com.tangem.core.ui.utils + +import android.os.SystemClock + +interface MultipleClickPreventer { + + fun processEvent(event: () -> Unit) + + companion object { + + fun get(): MultipleClickPreventer = DefaultMultipleClickPreventer() + } +} + +private class DefaultMultipleClickPreventer : MultipleClickPreventer { + private val now: Long get() = SystemClock.elapsedRealtime() + private var lastEventTimeMs: Long = 0 + + override fun processEvent(event: () -> Unit) { + if (now - lastEventTimeMs >= TIME_BETWEEN_CLICK_IN_MS) event() + lastEventTimeMs = now + } + + companion object { + private const val TIME_BETWEEN_CLICK_IN_MS = 500L + } +} \ No newline at end of file