package com.fastaccess.ui.widgets; import android.graphics.drawable.Drawable; import android.support.annotation.ColorInt; import android.text.SpannableStringBuilder; import android.text.style.BackgroundColorSpan; import android.text.style.ForegroundColorSpan; import android.text.style.ImageSpan; import android.text.style.StyleSpan; import android.text.style.URLSpan; import android.view.View; import com.fastaccess.helper.InputHelper; import static android.graphics.Typeface.BOLD; /** * Created by Kosh on 15 Nov 2016, 9:26 PM */ public class SpannableBuilder extends SpannableStringBuilder { private SpannableBuilder() {} public static SpannableBuilder builder() { return new SpannableBuilder(); } public SpannableBuilder append(final CharSequence text, final Object span) { if (!InputHelper.isEmpty(text)) { append(text); if (span != null) { final int length = length(); setSpan(span, length - text.length(), length, SPAN_EXCLUSIVE_EXCLUSIVE); } } return this; } @Override public SpannableBuilder append(char text) { if (text != 0) super.append(text); return this; } @Override public SpannableBuilder append(CharSequence text) { if (text != null) super.append(text); return this; } public SpannableBuilder append(Drawable drawable) { if (drawable != null) { drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); append(' ', new ImageSpan(drawable)); } return this; } public SpannableBuilder append(final char text, final Object span) { append(text); if (!InputHelper.isEmpty(span)) { final int length = length(); setSpan(span, length - 1, length, SPAN_EXCLUSIVE_EXCLUSIVE); } return this; } public SpannableBuilder bold(CharSequence text, final Object span) { if (!InputHelper.isEmpty(text)) { text = SpannableBuilder.builder().bold(text); append(text, span); } return this; } public SpannableBuilder bold(final CharSequence text) { if (!InputHelper.isEmpty(text)) return append(text, new StyleSpan(BOLD)); return this; } public SpannableBuilder background(final CharSequence text, final int color) { if (!InputHelper.isEmpty(text)) return append(text, new BackgroundColorSpan(color)); return this; } public SpannableBuilder foreground(final CharSequence text, @ColorInt int color) { if (!InputHelper.isEmpty(text)) return append(text, new ForegroundColorSpan(color)); return this; } public SpannableBuilder foreground(final char text, @ColorInt int color) { return append(text, new ForegroundColorSpan(color)); } public SpannableBuilder url(final CharSequence text, final View.OnClickListener listener) { if (!InputHelper.isEmpty(text)) return append(text, new URLSpan(text.toString()) { @Override public void onClick(View widget) { listener.onClick(widget); } }); return this; } public SpannableBuilder url(final CharSequence text) { if (!InputHelper.isEmpty(text)) return append(text, new URLSpan(text.toString())); return this; } }