improve double tap behavior

This commit is contained in:
Bnyro 2022-08-16 17:23:08 +02:00
parent a086cba894
commit a71cb344a5

View File

@ -7,39 +7,34 @@ import android.view.View
abstract class DoubleTapListener : View.OnClickListener { abstract class DoubleTapListener : View.OnClickListener {
private val maximumTimeDifference = 300L
private val handler = Handler(Looper.getMainLooper())
private var isSingleEvent = false private var isSingleEvent = false
private val doubleClickQualificationSpanInMillis: Long private var timeStampLastClick = 0L
private var timestampLastClick: Long private var timeStampLastDoubleClick = 0L
private val handler: Handler
private val runnable: Runnable
override fun onClick(v: View?) { override fun onClick(v: View?) {
if (SystemClock.elapsedRealtime() - timestampLastClick < doubleClickQualificationSpanInMillis) { if (SystemClock.elapsedRealtime() - timeStampLastClick < maximumTimeDifference) {
isSingleEvent = false isSingleEvent = false
handler.removeCallbacks(runnable) handler.removeCallbacks(runnable)
timeStampLastDoubleClick = SystemClock.elapsedRealtime()
onDoubleClick() onDoubleClick()
return return
} }
isSingleEvent = true isSingleEvent = true
handler.postDelayed(runnable, DEFAULT_QUALIFICATION_SPAN) handler.removeCallbacks(runnable)
timestampLastClick = SystemClock.elapsedRealtime() handler.postDelayed(runnable, maximumTimeDifference)
timeStampLastClick = SystemClock.elapsedRealtime()
} }
abstract fun onDoubleClick() abstract fun onDoubleClick()
abstract fun onSingleClick() abstract fun onSingleClick()
companion object { private val runnable = Runnable {
private const val DEFAULT_QUALIFICATION_SPAN: Long = 200 if (!isSingleEvent ||
} SystemClock.elapsedRealtime() - timeStampLastDoubleClick < maximumTimeDifference
) return@Runnable
init { onSingleClick()
doubleClickQualificationSpanInMillis = DEFAULT_QUALIFICATION_SPAN
timestampLastClick = 0
handler = Handler(Looper.getMainLooper())
runnable = Runnable {
if (isSingleEvent) {
onSingleClick()
}
}
} }
} }