@TestTargetNew( level = TestLevel.COMPLETE, method = "resetMetaState", args = {android.text.Spannable.class}) public void testResetMetaState() { CharSequence str = "123456"; Spannable text = Editable.Factory.getInstance().newEditable(str); text.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT); text.setSpan(Selection.SELECTION_END, str.length(), str.length(), Spanned.SPAN_POINT_POINT); MetaKeyKeyListener.resetMetaState(text); assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_START)); assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_END)); str = "abc"; text = Editable.Factory.getInstance().newEditable(str); text.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT); text.setSpan(Selection.SELECTION_END, str.length(), str.length(), Spanned.SPAN_POINT_POINT); MetaKeyKeyListener.resetMetaState(text); assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_START)); assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_END)); str = "#@%#$^%^"; text = Editable.Factory.getInstance().newEditable(str); text.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT); text.setSpan(Selection.SELECTION_END, str.length(), str.length(), Spanned.SPAN_POINT_POINT); MetaKeyKeyListener.resetMetaState(text); assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_START)); assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_END)); }
@TestTargetNew( level = TestLevel.COMPLETE, method = "adjustMetaAfterKeypress", args = {android.text.Spannable.class}) public void testAdjustMetaAfterKeypress() { CharSequence str = "123456"; Spannable content = Editable.Factory.getInstance().newEditable(str); content.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT); int len = str.length(); // for one line less than 100 content.setSpan(Selection.SELECTION_END, len, len, Spanned.SPAN_POINT_POINT); MetaKeyKeyListener.adjustMetaAfterKeypress(content); assertEquals(Spanned.SPAN_POINT_POINT, content.getSpanFlags(Selection.SELECTION_START)); assertEquals(Spanned.SPAN_POINT_POINT, content.getSpanFlags(Selection.SELECTION_END)); str = "abc"; content = Editable.Factory.getInstance().newEditable(str); content.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT); len = str.length(); // for one line less than 100 content.setSpan(Selection.SELECTION_END, len, len, Spanned.SPAN_POINT_POINT); MetaKeyKeyListener.adjustMetaAfterKeypress(content); assertEquals(Spanned.SPAN_POINT_POINT, content.getSpanFlags(Selection.SELECTION_START)); assertEquals(Spanned.SPAN_POINT_POINT, content.getSpanFlags(Selection.SELECTION_END)); str = "#@%#$^%^"; content = Editable.Factory.getInstance().newEditable(str); content.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT); len = str.length(); // for one line less than 100 content.setSpan(Selection.SELECTION_END, len, len, Spanned.SPAN_POINT_POINT); MetaKeyKeyListener.adjustMetaAfterKeypress(content); assertEquals(Spanned.SPAN_POINT_POINT, content.getSpanFlags(Selection.SELECTION_START)); assertEquals(Spanned.SPAN_POINT_POINT, content.getSpanFlags(Selection.SELECTION_END)); }
public static CharSequence getHtmlText(String text) { // fixes an android bug (?): text layout fails on text with nested style tags text = removeNestedTags(text, new String[] {"i", "b", "strong"}); final Spanned htmlText = Html.fromHtml(text); if (htmlText.getSpans(0, htmlText.length(), URLSpan.class).length == 0) { return htmlText; } final Spannable newHtmlText = Spannable.Factory.getInstance().newSpannable(htmlText); for (URLSpan span : newHtmlText.getSpans(0, newHtmlText.length(), URLSpan.class)) { final int start = newHtmlText.getSpanStart(span); final int end = newHtmlText.getSpanEnd(span); final int flags = newHtmlText.getSpanFlags(span); final String url = NetworkLibrary.Instance().rewriteUrl(span.getURL(), true); newHtmlText.removeSpan(span); newHtmlText.setSpan(new URLSpan(url), start, end, flags); } return newHtmlText; }
private static void fixLinks(Spannable spannable) { for (URLSpan span : spannable.getSpans(0, spannable.length(), URLSpan.class)) { final String url = span.getURL(); int start = spannable.getSpanStart(span); int end = spannable.getSpanEnd(span); int flags = spannable.getSpanFlags(span); URLSpan newSpan = new URLSpan(url) { @Override public void updateDrawState(TextPaint paramTextPaint) { super.updateDrawState(paramTextPaint); paramTextPaint.setUnderlineText(false); paramTextPaint.setColor(0xff006FC8); } }; spannable.removeSpan(span); spannable.setSpan(newSpan, start, end, flags); } }
private static void resetLock(Spannable content, Object what) { int current = content.getSpanFlags(what); if (current == LOCKED) content.removeSpan(what); }
private static void adjust(Spannable content, Object what) { int current = content.getSpanFlags(what); if (current == PRESSED) content.setSpan(what, 0, 0, USED); else if (current == RELEASED) content.removeSpan(what); }