ClickableMovementMethod.java

 1package eu.siacs.conversations.ui.widget;
 2
 3import android.text.Layout;
 4import android.text.Spannable;
 5import android.text.method.ArrowKeyMovementMethod;
 6import android.text.style.ClickableSpan;
 7import android.view.MotionEvent;
 8import android.widget.TextView;
 9
10public class ClickableMovementMethod extends ArrowKeyMovementMethod {
11
12	@Override
13	public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
14		// Just copied from android.text.method.LinkMovementMethod
15		if (event.getAction() == MotionEvent.ACTION_UP) {
16			int x = (int) event.getX();
17			int y = (int) event.getY();
18			x -= widget.getTotalPaddingLeft();
19			y -= widget.getTotalPaddingTop();
20			x += widget.getScrollX();
21			y += widget.getScrollY();
22			Layout layout = widget.getLayout();
23			int line = layout.getLineForVertical(y);
24			int off = layout.getOffsetForHorizontal(line, x);
25			ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);
26			if (link.length != 0) {
27				link[0].onClick(widget);
28				return true;
29			}
30		}
31		return super.onTouchEvent(widget, buffer, event);
32	}
33
34	public static ClickableMovementMethod getInstance() {
35		if (sInstance == null) {
36			sInstance = new ClickableMovementMethod();
37		}
38		return sInstance;
39	}
40
41	private static ClickableMovementMethod sInstance;
42}