mirror of
https://github.com/afollestad/nock-nock.git
synced 2025-08-05 07:38:38 +00:00
Debounce clicks on list items in the main screen
This commit is contained in:
parent
3507aec3db
commit
a8bcc60496
2 changed files with 50 additions and 6 deletions
|
@ -12,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.afollestad.nocknock.R
|
import com.afollestad.nocknock.R
|
||||||
import com.afollestad.nocknock.data.ServerModel
|
import com.afollestad.nocknock.data.ServerModel
|
||||||
import com.afollestad.nocknock.data.textRes
|
import com.afollestad.nocknock.data.textRes
|
||||||
|
import com.afollestad.nocknock.utilities.ui.onDebouncedClick
|
||||||
import kotlinx.android.synthetic.main.list_item_server.view.iconStatus
|
import kotlinx.android.synthetic.main.list_item_server.view.iconStatus
|
||||||
import kotlinx.android.synthetic.main.list_item_server.view.textInterval
|
import kotlinx.android.synthetic.main.list_item_server.view.textInterval
|
||||||
import kotlinx.android.synthetic.main.list_item_server.view.textName
|
import kotlinx.android.synthetic.main.list_item_server.view.textName
|
||||||
|
@ -24,10 +25,12 @@ typealias Listener = (model: ServerModel, longClick: Boolean) -> Unit
|
||||||
class ServerVH constructor(
|
class ServerVH constructor(
|
||||||
itemView: View,
|
itemView: View,
|
||||||
private val adapter: ServerAdapter
|
private val adapter: ServerAdapter
|
||||||
) : RecyclerView.ViewHolder(itemView), View.OnClickListener, View.OnLongClickListener {
|
) : RecyclerView.ViewHolder(itemView), View.OnLongClickListener {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
itemView.setOnClickListener(this)
|
itemView.onDebouncedClick {
|
||||||
|
adapter.performClick(adapterPosition, false)
|
||||||
|
}
|
||||||
itemView.setOnLongClickListener(this)
|
itemView.setOnLongClickListener(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,10 +49,6 @@ class ServerVH constructor(
|
||||||
itemView.textInterval.text = model.intervalText()
|
itemView.textInterval.text = model.intervalText()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onClick(view: View) {
|
|
||||||
adapter.performClick(adapterPosition, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onLongClick(view: View): Boolean {
|
override fun onLongClick(view: View): Boolean {
|
||||||
adapter.performClick(adapterPosition, true)
|
adapter.performClick(adapterPosition, true)
|
||||||
return false
|
return false
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* Licensed under Apache-2.0
|
||||||
|
*
|
||||||
|
* Designed and developed by Aidan Follestad (@afollestad)
|
||||||
|
*/
|
||||||
|
package com.afollestad.nocknock.utilities.ui
|
||||||
|
|
||||||
|
import android.view.View
|
||||||
|
import java.lang.System.currentTimeMillis
|
||||||
|
|
||||||
|
private const val DEFAULT_DEBOUNCE_INTERVAL = 750L
|
||||||
|
|
||||||
|
/** @author Aidan Follestad (@afollestad) */
|
||||||
|
abstract class DebouncedOnClickListener(
|
||||||
|
private val delayBetweenClicks: Long = DEFAULT_DEBOUNCE_INTERVAL
|
||||||
|
) : View.OnClickListener {
|
||||||
|
|
||||||
|
private var lastClickTimestamp = -1L
|
||||||
|
|
||||||
|
@Deprecated(
|
||||||
|
message = "onDebouncedClick should be overridden instead.",
|
||||||
|
replaceWith = ReplaceWith("onDebouncedClick(v)")
|
||||||
|
)
|
||||||
|
override fun onClick(v: View) {
|
||||||
|
val now = currentTimeMillis()
|
||||||
|
if (lastClickTimestamp == -1L || now >= (lastClickTimestamp + delayBetweenClicks)) {
|
||||||
|
onDebouncedClick(v)
|
||||||
|
}
|
||||||
|
lastClickTimestamp = now
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract fun onDebouncedClick(v: View)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @author Aidan Follestad (@afollestad) */
|
||||||
|
fun View.onDebouncedClick(
|
||||||
|
delayBetweenClicks: Long = DEFAULT_DEBOUNCE_INTERVAL,
|
||||||
|
click: (view: View) -> Unit
|
||||||
|
) {
|
||||||
|
setOnClickListener(object : DebouncedOnClickListener(delayBetweenClicks) {
|
||||||
|
override fun onDebouncedClick(v: View) {
|
||||||
|
click(v)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue