package com.xda.one.parser; import com.xda.one.ui.UserProfileActivity; import net.nightwhistler.htmlspanner.SpanStack; import net.nightwhistler.htmlspanner.TagNodeHandler; import org.htmlcleaner.TagNode; import android.content.Context; import android.content.Intent; import android.text.SpannableStringBuilder; import android.text.style.ClickableSpan; import android.text.style.URLSpan; import android.util.Log; import android.view.View; import static android.text.Spanned.SPAN_EXCLUSIVE_EXCLUSIVE; public class XDATagHandlers { public static class ImageHandler extends TagNodeHandler { @Override public void handleTagNode(final TagNode node, final SpannableStringBuilder builder, final int start, final int end, final SpanStack stack) { final String src = node.getAttributeByName("src"); final int newStart = builder.length(); builder.append("\uFFFC"); stack.pushSpan(new ImageSpan(src), newStart, builder.length()); } public static class ImageSpan { private final String mSrc; public ImageSpan(final String src) { mSrc = src; } public String getSrc() { return mSrc; } } } public static class MentionHandler extends TagNodeHandler { @Override public void handleTagNode(final TagNode node, final SpannableStringBuilder builder, final int start, final int end, final SpanStack spanStack) { final String userId = node.getAttributeByName("user"); final MentionSpan mentionSpan = new MentionSpan(userId); builder.setSpan(mentionSpan, start, end, SPAN_EXCLUSIVE_EXCLUSIVE); } public static class MentionSpan extends ClickableSpan { private final String mUserId; public MentionSpan(final String userId) { this.mUserId = userId; } @Override public void onClick(final View widget) { final Context context = widget.getContext(); final Intent intent = new Intent(context, UserProfileActivity.class); intent.putExtra(UserProfileActivity.USER_ID_ARGUMENT, mUserId); context.startActivity(intent); } } } public static class QuoteTagHandler extends TagNodeHandler { @Override public void handleTagNode(final TagNode node, final SpannableStringBuilder builder, final int start, final int end, final SpanStack spanStack) { final String userId = node.getAttributeByName("user"); builder.setSpan(new QuoteSpan(userId), start, end, SPAN_EXCLUSIVE_EXCLUSIVE); } public static class QuoteSpan { private final String mUserId; public QuoteSpan(final String userId) { mUserId = userId; } public String getUserId() { return mUserId; } } } public static class LinkHandler extends TagNodeHandler { @Override public void handleTagNode(final TagNode node, final SpannableStringBuilder builder, final int start, final int end, final SpanStack spanStack) { String url = node.getAttributeByName("href").trim(); if (!url.startsWith("http://") && !url.startsWith("https://")) { url = "http://" + url; } spanStack.pushSpan(new URLSpan(url), start, end); } } }