diff options
author | Mishiranu <fukurou.mishiranu@gmail.com> | 2016-09-16 02:15:07 +0300 |
---|---|---|
committer | Mishiranu <fukurou.mishiranu@gmail.com> | 2016-09-16 02:15:07 +0300 |
commit | 8ca5eb442952a40c16486b8abdc197087b7d7c2b (patch) | |
tree | 692b7045bc5c07e79614beb55cf8bbddcea2f945 /src/main/java/eu/siacs/conversations/ui/widget/ClickableMovementMethod.java | |
parent | 7b52e6984c04d3e6aa5d056382d748886111e14f (diff) |
Allow text selection with multiple links in message
Diffstat (limited to '')
-rw-r--r-- | src/main/java/eu/siacs/conversations/ui/widget/ClickableMovementMethod.java | 42 |
1 files changed, 42 insertions, 0 deletions
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 |