package net.dev123.yibo.widget;
import java.util.regex.Pattern;
import net.dev123.commons.ServiceProvider;
import net.dev123.mblog.FeaturePatternUtils;
import net.dev123.yibo.common.Constants;
import android.content.Context;
import android.text.Spannable;
import android.text.method.LinkMovementMethod;
import android.text.util.Linkify;
import android.util.AttributeSet;
import android.widget.TextView;
public class RichTextView extends TextView {
//平台
private ServiceProvider provider = ServiceProvider.Sina;
public RichTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public RichTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean getDefaultEditable() {
return false;
}
@Override
public void setText(CharSequence text, BufferType type) {
Spannable s;
if (text instanceof Spannable) {
s = (Spannable) text;
} else {
if (text == null) {
text = "";
}
s = Spannable.Factory.getInstance().newSpannable(text);
}
//email
Linkify.addLinks(s, Linkify.EMAIL_ADDRESSES);
//metion
Pattern mentionPattern = FeaturePatternUtils.getMentionPattern(provider);
if (mentionPattern != null) {
Linkify.addLinks(s, mentionPattern, Constants.URI_PERSONAL_INFO.toString());
}
//topic
Pattern topicPattern = FeaturePatternUtils.getTopicPattern(provider);
if (topicPattern != null) {
Linkify.addLinks(s, topicPattern, Constants.URI_TOPIC.toString());
}
//url
Pattern urlPattern = FeaturePatternUtils.getUrlPattern(provider);
if (urlPattern != null) {
Linkify.addLinks(s, urlPattern, "http://");
}
text = s;
super.setText(text, type);
if (this.getLinksClickable()) {
setMovementMethod(LinkMovementMethod.getInstance());
}
}
public ServiceProvider getProvider() {
return provider;
}
public void setProvider(ServiceProvider provider) {
this.provider = provider;
}
}