Updated on 2026-08-14
This commit is contained in:
parent
8f7f7c85ca
commit
8d5c607bcf
2 changed files with 34 additions and 1 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue