From 026d029614f1b6cbef313b3aa59b7d857f3985a2 Mon Sep 17 00:00:00 2001 From: Clark Date: Wed, 12 Apr 2023 10:56:49 -0400 Subject: [PATCH] Fix tapping too fast breaking my stories viewer. --- .../securesms/stories/my/MyStoriesItem.kt | 7 +++++- .../util/DebouncedOnClickListener.kt | 22 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/org/thoughtcrime/securesms/util/DebouncedOnClickListener.kt diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesItem.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesItem.kt index 55e1078c2c..9579ce55ce 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesItem.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesItem.kt @@ -21,6 +21,7 @@ import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader import org.thoughtcrime.securesms.mms.GlideApp import org.thoughtcrime.securesms.stories.StoryTextPostModel import org.thoughtcrime.securesms.util.DateUtils +import org.thoughtcrime.securesms.util.DebouncedOnClickListener import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter import org.thoughtcrime.securesms.util.adapter.mapping.MappingViewHolder @@ -104,7 +105,11 @@ object MyStoriesItem { override fun bind(model: Model) { storyPreview.isClickable = false - itemView.setOnClickListener { model.onClick(model, storyPreview) } + itemView.setOnClickListener( + DebouncedOnClickListener { + model.onClick(model, storyPreview) + } + ) downloadTarget.setOnClickListener { model.onSaveClick(model) } moreTarget.setOnClickListener { showContextMenu(model) } presentDateOrStatus(model) diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/DebouncedOnClickListener.kt b/app/src/main/java/org/thoughtcrime/securesms/util/DebouncedOnClickListener.kt new file mode 100644 index 0000000000..00b2ee6f73 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/util/DebouncedOnClickListener.kt @@ -0,0 +1,22 @@ +package org.thoughtcrime.securesms.util + +import android.view.View + +/** + * A View.OnClickListener that ignores clicks for a specified internal. This is useful for fixing + * double press events that might be more difficult/cumbersome to fix by managing explicit state. + */ +class DebouncedOnClickListener( + private val interval: Long = 500, + private val onClickListener: View.OnClickListener +) : View.OnClickListener { + private var lastClickTime = 0L + + override fun onClick(v: View) { + val time = System.currentTimeMillis() + if (time - lastClickTime >= interval) { + lastClickTime = time + onClickListener.onClick(v) + } + } +}