Updated on 2026-08-14

This commit is contained in:
Tangem 2024-02-08 20:40:12 +03:00
parent 8f7f7c85ca
commit 8d5c607bcf
2 changed files with 34 additions and 1 deletions

View file

@ -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,

View file

@ -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
}
}