Merge pull request #4620 from vector-im/feature/adm/duplicate-long-press
Avoiding duplicate message long press events
This commit is contained in:
commit
f9a88db2f7
|
@ -0,0 +1 @@
|
||||||
|
Fixes message menu showing when copying message urls
|
|
@ -17,6 +17,7 @@
|
||||||
package im.vector.app.core.epoxy
|
package im.vector.app.core.epoxy
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import android.widget.TextView
|
||||||
import im.vector.app.core.utils.DebouncedClickListener
|
import im.vector.app.core.utils.DebouncedClickListener
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -32,6 +33,26 @@ fun View.onClick(listener: ClickListener?) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun TextView.onLongClickIgnoringLinks(listener: View.OnLongClickListener?) {
|
||||||
|
if (listener == null) {
|
||||||
|
setOnLongClickListener(null)
|
||||||
|
} else {
|
||||||
|
setOnLongClickListener(object : View.OnLongClickListener {
|
||||||
|
override fun onLongClick(v: View): Boolean {
|
||||||
|
if (hasLongPressedLink()) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return listener.onLongClick(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Infer that a Clickable span has been click by the presence of a selection
|
||||||
|
*/
|
||||||
|
private fun hasLongPressedLink() = selectionStart != -1 || selectionEnd != -1
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Simple Text listener lambda
|
* Simple Text listener lambda
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -25,6 +25,7 @@ import com.airbnb.epoxy.EpoxyAttribute
|
||||||
import com.airbnb.epoxy.EpoxyModelClass
|
import com.airbnb.epoxy.EpoxyModelClass
|
||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
import im.vector.app.core.epoxy.onClick
|
import im.vector.app.core.epoxy.onClick
|
||||||
|
import im.vector.app.core.epoxy.onLongClickIgnoringLinks
|
||||||
import im.vector.app.features.home.room.detail.timeline.TimelineEventController
|
import im.vector.app.features.home.room.detail.timeline.TimelineEventController
|
||||||
import im.vector.app.features.home.room.detail.timeline.tools.findPillsAndProcess
|
import im.vector.app.features.home.room.detail.timeline.tools.findPillsAndProcess
|
||||||
import im.vector.app.features.home.room.detail.timeline.url.PreviewUrlRetriever
|
import im.vector.app.features.home.room.detail.timeline.url.PreviewUrlRetriever
|
||||||
|
@ -94,10 +95,9 @@ abstract class MessageTextItem : AbsMessageItem<MessageTextItem.Holder>() {
|
||||||
}
|
}
|
||||||
super.bind(holder)
|
super.bind(holder)
|
||||||
holder.messageView.movementMethod = movementMethod
|
holder.messageView.movementMethod = movementMethod
|
||||||
|
|
||||||
renderSendState(holder.messageView, holder.messageView)
|
renderSendState(holder.messageView, holder.messageView)
|
||||||
holder.messageView.onClick(attributes.itemClickListener)
|
holder.messageView.onClick(attributes.itemClickListener)
|
||||||
holder.messageView.setOnLongClickListener(attributes.itemLongClickListener)
|
holder.messageView.onLongClickIgnoringLinks(attributes.itemLongClickListener)
|
||||||
|
|
||||||
if (canUseTextFuture) {
|
if (canUseTextFuture) {
|
||||||
holder.messageView.setTextFuture(textFuture)
|
holder.messageView.setTextFuture(textFuture)
|
||||||
|
@ -133,6 +133,7 @@ abstract class MessageTextItem : AbsMessageItem<MessageTextItem.Holder>() {
|
||||||
previewUrlView?.render(state, safeImageContentRenderer)
|
previewUrlView?.render(state, safeImageContentRenderer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val STUB_ID = R.id.messageContentTextStub
|
private const val STUB_ID = R.id.messageContentTextStub
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue