From 8ca5eb442952a40c16486b8abdc197087b7d7c2b Mon Sep 17 00:00:00 2001 From: Mishiranu Date: Fri, 16 Sep 2016 02:15:07 +0300 Subject: Allow text selection with multiple links in message --- .../ui/widget/ClickableMovementMethod.java | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/main/java/eu/siacs/conversations/ui/widget/ClickableMovementMethod.java (limited to 'src/main/java/eu/siacs/conversations/ui/widget') diff --git a/src/main/java/eu/siacs/conversations/ui/widget/ClickableMovementMethod.java b/src/main/java/eu/siacs/conversations/ui/widget/ClickableMovementMethod.java new file mode 100644 index 00000000..8659a192 --- /dev/null +++ b/src/main/java/eu/siacs/conversations/ui/widget/ClickableMovementMethod.java @@ -0,0 +1,42 @@ +package eu.siacs.conversations.ui.widget; + +import android.text.Layout; +import android.text.Spannable; +import android.text.method.ArrowKeyMovementMethod; +import android.text.style.ClickableSpan; +import android.view.MotionEvent; +import android.widget.TextView; + +public class ClickableMovementMethod extends ArrowKeyMovementMethod { + + @Override + public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) { + // Just copied from android.text.method.LinkMovementMethod + if (event.getAction() == MotionEvent.ACTION_UP) { + int x = (int) event.getX(); + int y = (int) event.getY(); + x -= widget.getTotalPaddingLeft(); + y -= widget.getTotalPaddingTop(); + x += widget.getScrollX(); + y += widget.getScrollY(); + Layout layout = widget.getLayout(); + int line = layout.getLineForVertical(y); + int off = layout.getOffsetForHorizontal(line, x); + ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class); + if (link.length != 0) { + link[0].onClick(widget); + return true; + } + } + return super.onTouchEvent(widget, buffer, event); + } + + public static ClickableMovementMethod getInstance() { + if (sInstance == null) { + sInstance = new ClickableMovementMethod(); + } + return sInstance; + } + + private static ClickableMovementMethod sInstance; +} \ No newline at end of file -- cgit v1.2.3