Updated on 2026-08-14
This commit is contained in:
parent
88b622053d
commit
8b47cd5aba
3 changed files with 52 additions and 7 deletions
|
|
@ -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() },
|
||||
)
|
||||
}
|
||||
|
|
@ -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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue