package com.aiosman.ravenow.utils import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch import java.util.concurrent.atomic.AtomicBoolean /** * 防抖工具类 * 用于防止用户快速重复点击 */ object DebounceUtils { /** * 防抖点击处理 * @param scope 协程作用域 * @param delayMillis 防抖延迟时间(毫秒),默认500ms * @param action 要执行的操作 */ fun debounceClick( scope: CoroutineScope, delayMillis: Long = 500L, action: () -> Unit ) { scope.launch { delay(delayMillis) action() } } /** * 带状态检查的防抖点击处理 * @param scope 协程作用域 * @param delayMillis 防抖延迟时间(毫秒),默认500ms * @param isProcessing 是否正在处理中的状态 * @param action 要执行的操作 */ fun debounceClickWithState( scope: CoroutineScope, delayMillis: Long = 500L, isProcessing: AtomicBoolean, action: () -> Unit ) { if (isProcessing.get()) { return } isProcessing.set(true) scope.launch { delay(delayMillis) try { action() } finally { isProcessing.set(false) } } } /** * 简单的防抖点击处理(无协程) * @param lastClickTime 上次点击时间 * @param delayMillis 防抖延迟时间(毫秒),默认500ms * @param action 要执行的操作 * @return 是否执行了操作 */ fun simpleDebounceClick( lastClickTime: Long, delayMillis: Long = 500L, action: () -> Unit ): Boolean { val currentTime = System.currentTimeMillis() if (currentTime - lastClickTime < delayMillis) { return false } action() return true } }