diff options
author | Allan Wang <me@allanwang.ca> | 2017-12-27 00:16:09 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-27 00:16:09 -0500 |
commit | bbaddee2ed4c5f2e534683d9687392d254c37d67 (patch) | |
tree | cb7bd886194f207cddb2f654e659acbaa65ee078 /adapter/src/main/kotlin/ca | |
parent | 23b9f24503130f1f3d29f0ab7a33ea3a08e0c064 (diff) | |
download | kau-bbaddee2ed4c5f2e534683d9687392d254c37d67.tar.gz kau-bbaddee2ed4c5f2e534683d9687392d254c37d67.tar.bz2 kau-bbaddee2ed4c5f2e534683d9687392d254c37d67.zip |
Feature/fast adapter (#119)
* Update fast adapter implementation
* Add repeated click listener
Diffstat (limited to 'adapter/src/main/kotlin/ca')
-rw-r--r-- | adapter/src/main/kotlin/ca/allanwang/kau/adapters/AdapterUtils.kt | 8 | ||||
-rw-r--r-- | adapter/src/main/kotlin/ca/allanwang/kau/adapters/RepeatedClickListener.kt | 53 |
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 |