Coverage Summary for Class: DebouncingClickListener (vit.khudenko.android.safe_click)
Class |
Class, %
|
Method, %
|
Block, %
|
Line, %
|
DebouncingClickListener |
100%
(1/1)
|
100%
(3/3)
|
100%
(3/3)
|
100%
(11/11)
|
1 package vit.khudenko.android.safe_click
2
3 import android.os.SystemClock
4 import android.view.View
5
6 /**
7 * Base class for building click listeners that use click event debouncing. Child classes should implement [onClickAction] method.
8 *
9 * @param debounceTimeoutMillis debounce timeout in milliseconds.
10 *
11 * @throws IllegalArgumentException if [debounceTimeoutMillis] parameter is negative
12 */
13 abstract class DebouncingClickListener(
14 private val debounceTimeoutMillis: Long
15 ) : View.OnClickListener {
16
17 init {
18 require(debounceTimeoutMillis >= 0) {
19 "debounceTimeoutMillis parameter can not be negative"
20 }
21 }
22
23 private var lastClickTimestamp: Long = 0
24
25 override fun onClick(v: View) {
26 val now = SystemClock.elapsedRealtime()
27 if (now - lastClickTimestamp < debounceTimeoutMillis) {
28 return
29 }
30 lastClickTimestamp = now
31 onClickAction(v)
32 }
33
34 abstract fun onClickAction(v: View)
35
36 fun reset() {
37 lastClickTimestamp = 0
38 }
39 }