Updated on 2026-08-14

This commit is contained in:
Tangem 2025-05-12 19:25:43 +05:00
parent 88b622053d
commit 8b47cd5aba
3 changed files with 52 additions and 7 deletions

View file

@ -0,0 +1,30 @@
package com.tangem.core.ui.extensions
import androidx.compose.foundation.LocalIndication
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
import androidx.compose.ui.semantics.Role
import com.tangem.core.ui.utils.MultipleClickPreventer
/**
* Clickable modifier with debounce multiple click in a short period of time
*/
fun Modifier.clickableSingle(
enabled: Boolean = true,
onClickLabel: String? = null,
role: Role? = null,
onClick: () -> Unit,
) = composed {
val multipleEventsCutter = remember { MultipleClickPreventer.get() }
Modifier.clickable(
enabled = enabled,
onClickLabel = onClickLabel,
onClick = { multipleEventsCutter.processEvent { onClick() } },
role = role,
indication = LocalIndication.current,
interactionSource = remember { MutableInteractionSource() },
)
}

View file

@ -2,6 +2,9 @@ package com.tangem.core.ui.utils
import android.os.SystemClock
/**
* Debounce multiple events (e.i. clicks, etc) in a short period of time
*/
interface MultipleClickPreventer {
fun processEvent(event: () -> Unit)
@ -24,4 +27,9 @@ private class DefaultMultipleClickPreventer : MultipleClickPreventer {
companion object {
private const val TIME_BETWEEN_CLICK_IN_MS = 500L
}
}
}
/**
* Debounce multiple events (e.i. clicks, etc) in a short period of time
*/
fun singleEvent(event: () -> Unit) = MultipleClickPreventer.get().processEvent(event)