package org.goodev.droidddle.widget; import android.content.Context; import android.os.Parcel; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.style.ClickableSpan; import android.text.style.URLSpan; import android.view.View; import org.goodev.droidddle.utils.UiUtils; import org.goodev.droidddle.utils.Utils; /** * Created by goodev on 2015/1/7. */ public class GoURLSpan extends ClickableSpan { private static final String SLASH = "/"; private final String mURL; public GoURLSpan(String url) { mURL = url; } public GoURLSpan(Parcel src) { mURL = src.readString(); } public static final Spanned hackURLSpan(Spanned spanText) { if (spanText instanceof SpannableStringBuilder) { SpannableStringBuilder text = (SpannableStringBuilder) spanText; hackURLSpanHasResult(text); return text; } return spanText; } /** * @param spanText * @return true if have url */ public static final boolean hackURLSpanHasResult(SpannableStringBuilder spanText) { boolean result = false; URLSpan[] spans = spanText.getSpans(0, spanText.length(), URLSpan.class); // TODO URLSpan need change to ClickableSpan (GoURLSpan) , otherwise URLSpan can not click, not display underline.WHY? for (URLSpan span : spans) { int start = spanText.getSpanStart(span); int end = spanText.getSpanEnd(span); String url = span.getURL(); if (url != null) { result = true; spanText.removeSpan(span); ClickableSpan span1 = new GoURLSpan(span.getURL()); spanText.setSpan(span1, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } } return result; } public String getURL() { return mURL; } @Override public void onClick(View widget) { // TODO handler inapp String url = getURL(); // ArrayList<String> imgs = (ArrayList<String>) widget.getTag(R.id.poste_image_data); // if (imgs != null && imgs.contains(url)) { // Context a = widget.getContext(); // final int index = imgs.indexOf(url); // String[] img = new String[imgs.size()]; // img = imgs.toArray(img); // ActivityUtils.openPhotosActivity(a, index, img); // return; // } if (url.startsWith(SLASH)) { url = Utils.SITE_URL + url; } if (url.startsWith(Utils.SITE_URL) && !Utils.isSpecialUrl(url)) { handleInAppClicked(widget); } else { openUrl(widget); } } private void handleInAppClicked(View widget) { String url = getURL(); Context ctx = widget.getContext(); UiUtils.openDroidddleLinks(ctx, url); } public void openUrl(View widget) { Context context = widget.getContext(); UiUtils.openUrl(context, getURL()); } }