package im.zico.wingtwitter.utils; import android.text.Spannable; import android.text.SpannableString; import android.text.Spanned; import android.text.TextPaint; import android.text.style.URLSpan; import android.text.util.Linkify; import android.util.Log; import android.util.Patterns; import java.util.regex.Pattern; public class SpannableStringUtils { private static final Pattern PATTERN_WEB = Patterns.WEB_URL; // private static final Pattern PATTERN_TOPIC = Pattern.compile(Regex.HASHTAG_PATTERN); // private static final Pattern PATTERN_MENTION = Pattern.compile("@([A-Za-z0-9_-]+)"); private static final String HTTP_SCHEME = "http://"; private static final String TOPIC_SCHEME = "im.zico.wingtwittert.topic://"; private static final String MENTION_SCHEME = "im.zico.wingtwitter.user://"; public static SpannableString span(String text) { SpannableString ss = SpannableString.valueOf(text); Linkify.addLinks(ss, PATTERN_WEB, HTTP_SCHEME); Linkify.addLinks(ss, Regex.HASHTAG_PATTERN, TOPIC_SCHEME); Linkify.addLinks(ss, Regex.MENTION_PATTERN, MENTION_SCHEME); // Convert to our own span URLSpan[] spans = ss.getSpans(0, ss.length(), URLSpan.class); for (URLSpan span : spans) { WeiboSpan s = new WeiboSpan(span.getURL()); int start = ss.getSpanStart(span); int end = ss.getSpanEnd(span); ss.removeSpan(span); // if(ss.charAt(end-1) == ')') { // // Fix when url ended by ')' // s = new WeiboSpan(span.getURL().substring(0, span.getURL().length()-1)); // end--; // } // // if (span.getURL().startsWith("http") && span.getURL().length() > 30) { //// s = new WeiboSpan(span.getURL().substring(0, span.getURL().length()-1)); // Log.d("DEBUG", "Long url: " + span.getURL()); // } ss.setSpan(s, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } return ss; } public static void removeUnderlines(Spannable p_Text) { URLSpan[] spans = p_Text.getSpans(0, p_Text.length(), URLSpan.class); for(URLSpan span:spans) { int start = p_Text.getSpanStart(span); int end = p_Text.getSpanEnd(span); p_Text.removeSpan(span); span = new URLSpanNoUnderline(span.getURL()); p_Text.setSpan(span, start, end, 0); } } static class URLSpanNoUnderline extends URLSpan { public URLSpanNoUnderline(String p_Url) { super(p_Url); } public void updateDrawState(TextPaint p_DrawState) { super.updateDrawState(p_DrawState); p_DrawState.setUnderlineText(false); } } }