package io.plaidapp.util;
import android.content.res.ColorStateList;
import android.support.annotation.ColorInt;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.widget.TextView;
import in.uncod.android.bypass.style.TouchableUrlSpan;
import io.plaidapp.ui.span.PlayerSpan;
import okhttp3.HttpUrl;
public class DribbbleUtils {
private DribbbleUtils() { }
/**
* An extension to {@link HtmlUtils#parseHtml(String, ColorStateList, int)} which adds Dribbble
* specific behaviour.
*/
public static Spanned parseDribbbleHtml(
String input,
ColorStateList linkTextColor,
@ColorInt int linkHighlightColor) {
SpannableStringBuilder ssb = HtmlUtils.parseHtml(input, linkTextColor, linkHighlightColor);
TouchableUrlSpan[] urlSpans = ssb.getSpans(0, ssb.length(), TouchableUrlSpan.class);
for (TouchableUrlSpan urlSpan : urlSpans) {
int start = ssb.getSpanStart(urlSpan);
if (ssb.subSequence(start, start + 1).toString().equals("@")) {
int end = ssb.getSpanEnd(urlSpan);
ssb.removeSpan(urlSpan);
HttpUrl url = HttpUrl.parse(urlSpan.getURL());
long playerId = -1l;
String playerUsername = null;
try {
playerId = Long.parseLong(url.pathSegments().get(0));
} catch (NumberFormatException nfe) {
playerUsername = url.pathSegments().get(0);
}
ssb.setSpan(new PlayerSpan(urlSpan.getURL(),
ssb.subSequence(start + 1, end).toString(),
playerId,
playerUsername,
linkTextColor,
linkHighlightColor),
start,
end,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
return ssb;
}
public static void parseAndSetText(TextView textView, String input) {
if (TextUtils.isEmpty(input)) return;
HtmlUtils.setTextWithNiceLinks(textView, parseDribbbleHtml(input,
textView.getLinkTextColors(), textView.getHighlightColor()));
}
}