aboutsummaryrefslogtreecommitdiff
path: root/adapter/src/main/kotlin/ca
diff options
context:
space:
mode:
Diffstat (limited to 'adapter/src/main/kotlin/ca')
-rw-r--r--adapter/src/main/kotlin/ca/allanwang/kau/adapters/AdapterUtils.kt8
-rw-r--r--adapter/src/main/kotlin/ca/allanwang/kau/adapters/RepeatedClickListener.kt53
2 files changed, 54 insertions, 7 deletions
diff --git a/adapter/src/main/kotlin/ca/allanwang/kau/adapters/AdapterUtils.kt b/adapter/src/main/kotlin/ca/allanwang/kau/adapters/AdapterUtils.kt
index 206c66b..dae2862 100644
--- a/adapter/src/main/kotlin/ca/allanwang/kau/adapters/AdapterUtils.kt
+++ b/adapter/src/main/kotlin/ca/allanwang/kau/adapters/AdapterUtils.kt
@@ -13,10 +13,4 @@ import com.mikepenz.fastadapter.commons.adapters.FastItemAdapter
* Add kotlin's generic syntax to better support out types
*/
fun <T : IItem<*, *>> fastAdapter(vararg adapter: IAdapter<out T>) =
- FastAdapter.with<T, IAdapter<out T>>(adapter.toList())!!
-
-/**
- * Helper to get an [IAdapter] directly from a [FastItemAdapter]
- */
-fun <T : IItem<*, *>> fastAdapter(adapter: IAdapter<out T>, fastAdapter: FastItemAdapter<out T>) =
- fastAdapter(adapter, fastAdapter.itemAdapter) \ No newline at end of file
+ FastAdapter.with<T, IAdapter<out T>>(adapter.toList())!! \ No newline at end of file
diff --git a/adapter/src/main/kotlin/ca/allanwang/kau/adapters/RepeatedClickListener.kt b/adapter/src/main/kotlin/ca/allanwang/kau/adapters/RepeatedClickListener.kt
new file mode 100644
index 0000000..d864a55
--- /dev/null
+++ b/adapter/src/main/kotlin/ca/allanwang/kau/adapters/RepeatedClickListener.kt
@@ -0,0 +1,53 @@
+package ca.allanwang.kau.adapters
+
+import android.support.annotation.IntRange
+import android.view.View
+import com.mikepenz.fastadapter.FastAdapter
+import com.mikepenz.fastadapter.IAdapter
+import com.mikepenz.fastadapter.IItem
+import com.mikepenz.fastadapter.listeners.OnClickListener
+
+/**
+ * Created by Allan Wang on 26/12/17.
+ */
+fun <Item : IItem<*, *>> FastAdapter<Item>.withOnRepeatedClickListener(count: Int,
+ duration: Long,
+ event: OnClickListener<Item>) =
+ withOnClickListener(RepeatedClickListener(count, duration, event))
+
+/**
+ * Registers and skips each click until the designated [count] clicks are triggered,
+ * each within [duration] from each other.
+ * Only then will the [event] be fired, and everything will be reset.
+ */
+private class RepeatedClickListener<Item : IItem<*, *>>(
+ @IntRange(from = 1) val count: Int,
+ @IntRange(from = 1) val duration: Long,
+ val event: OnClickListener<Item>) : OnClickListener<Item> {
+
+ init {
+ if (count <= 0)
+ throw IllegalArgumentException("RepeatedClickListener's count must be > 1")
+ if (duration <= 0)
+ throw IllegalArgumentException("RepeatedClickListener's duration must be > 1L")
+ }
+
+ private var chain = 0
+ private var time = -1L
+
+ override fun onClick(v: View, adapter: IAdapter<Item>, item: Item, position: Int): Boolean {
+ val now = System.currentTimeMillis()
+ if (time - now < duration)
+ chain++
+ else
+ chain = 0
+ time = now
+ if (chain == count) {
+ chain = 0
+ time = -1
+ event.onClick(v, adapter, item, position)
+ return true
+ }
+ return false
+ }
+} \ No newline at end of file