Skip to content
Snippets Groups Projects
Unverified Commit 548bcd63 authored by axelherbstreith's avatar axelherbstreith Committed by GitHub
Browse files

Contact Journal - Fast double click leads to double entry in contact journal...

Contact Journal - Fast double click leads to double entry in contact journal (EXPOSUREAPP-4561) #2068

* prevent double selection for persons and locations

* switched to extension function

* added default value to interval

* Linting

Co-authored-by: default avatarRalf Gehrer <ralfgehrer@users.noreply.github.com>
parent e21f13b7
No related branches found
No related tags found
No related merge requests found
...@@ -11,6 +11,7 @@ import de.rki.coronawarnapp.databinding.ContactDiaryLocationListItemBinding ...@@ -11,6 +11,7 @@ import de.rki.coronawarnapp.databinding.ContactDiaryLocationListItemBinding
import de.rki.coronawarnapp.ui.lists.BaseAdapter import de.rki.coronawarnapp.ui.lists.BaseAdapter
import de.rki.coronawarnapp.util.lists.BindableVH import de.rki.coronawarnapp.util.lists.BindableVH
import de.rki.coronawarnapp.util.lists.diffutil.AsyncDiffUtilAdapter import de.rki.coronawarnapp.util.lists.diffutil.AsyncDiffUtilAdapter
import de.rki.coronawarnapp.util.ui.setOnClickListenerThrottled
internal class ContactDiaryLocationListAdapter( internal class ContactDiaryLocationListAdapter(
private val onTappedCallback: (item: SelectableItem<ContactDiaryLocation>) -> Unit private val onTappedCallback: (item: SelectableItem<ContactDiaryLocation>) -> Unit
...@@ -22,7 +23,7 @@ internal class ContactDiaryLocationListAdapter( ...@@ -22,7 +23,7 @@ internal class ContactDiaryLocationListAdapter(
override fun onBindBaseVH(holder: CachedLocationViewHolder, position: Int, payloads: MutableList<Any>) { override fun onBindBaseVH(holder: CachedLocationViewHolder, position: Int, payloads: MutableList<Any>) {
val item = data[position] val item = data[position]
holder.itemView.setOnClickListener { holder.itemView.setOnClickListenerThrottled {
it.contentDescription = item.onClickDescription.get(holder.context) it.contentDescription = item.onClickDescription.get(holder.context)
it.sendAccessibilityEvent(AccessibilityEvent.CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION) it.sendAccessibilityEvent(AccessibilityEvent.CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION)
onTappedCallback(item) onTappedCallback(item)
......
...@@ -11,6 +11,7 @@ import de.rki.coronawarnapp.databinding.ContactDiaryPersonListItemBinding ...@@ -11,6 +11,7 @@ import de.rki.coronawarnapp.databinding.ContactDiaryPersonListItemBinding
import de.rki.coronawarnapp.ui.lists.BaseAdapter import de.rki.coronawarnapp.ui.lists.BaseAdapter
import de.rki.coronawarnapp.util.lists.BindableVH import de.rki.coronawarnapp.util.lists.BindableVH
import de.rki.coronawarnapp.util.lists.diffutil.AsyncDiffUtilAdapter import de.rki.coronawarnapp.util.lists.diffutil.AsyncDiffUtilAdapter
import de.rki.coronawarnapp.util.ui.setOnClickListenerThrottled
internal class ContactDiaryPersonListAdapter( internal class ContactDiaryPersonListAdapter(
private val onTappedCallback: (item: SelectableItem<ContactDiaryPerson>) -> Unit private val onTappedCallback: (item: SelectableItem<ContactDiaryPerson>) -> Unit
...@@ -22,7 +23,7 @@ internal class ContactDiaryPersonListAdapter( ...@@ -22,7 +23,7 @@ internal class ContactDiaryPersonListAdapter(
override fun onBindBaseVH(holder: CachedPersonViewHolder, position: Int, payloads: MutableList<Any>) { override fun onBindBaseVH(holder: CachedPersonViewHolder, position: Int, payloads: MutableList<Any>) {
val item = data[position] val item = data[position]
holder.itemView.setOnClickListener { holder.itemView.setOnClickListenerThrottled {
it.contentDescription = item.onClickDescription.get(holder.context) it.contentDescription = item.onClickDescription.get(holder.context)
it.sendAccessibilityEvent(AccessibilityEvent.CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION) it.sendAccessibilityEvent(AccessibilityEvent.CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION)
onTappedCallback(item) onTappedCallback(item)
......
package de.rki.coronawarnapp.util.recyclerview
import android.view.View
/* Prevents a recyclerview item to be double selected when double clicking on it */
class ThrottledClickListener(
private val interval: Long,
private val listenerBlock: (View) -> Unit
) : View.OnClickListener {
private var lastClickTime = 0L
override fun onClick(v: View) {
val time = System.currentTimeMillis()
if (time - lastClickTime >= interval) {
lastClickTime = time
listenerBlock(v)
}
}
}
...@@ -2,6 +2,7 @@ package de.rki.coronawarnapp.util.ui ...@@ -2,6 +2,7 @@ package de.rki.coronawarnapp.util.ui
import android.view.View import android.view.View
import androidx.databinding.BindingAdapter import androidx.databinding.BindingAdapter
import de.rki.coronawarnapp.util.recyclerview.ThrottledClickListener
@BindingAdapter("gone") @BindingAdapter("gone")
fun View.setGone(gone: Boolean) { fun View.setGone(gone: Boolean) {
...@@ -12,3 +13,6 @@ fun View.setGone(gone: Boolean) { ...@@ -12,3 +13,6 @@ fun View.setGone(gone: Boolean) {
fun View.setInvisible(invisible: Boolean) { fun View.setInvisible(invisible: Boolean) {
visibility = if (invisible) View.INVISIBLE else View.VISIBLE visibility = if (invisible) View.INVISIBLE else View.VISIBLE
} }
fun View.setOnClickListenerThrottled(interval: Long = 300L, listenerBlock: (View) -> Unit) =
setOnClickListener(ThrottledClickListener(interval, listenerBlock))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment