diff --git a/example/src/androidTest/java/com/tokenautocompleteexample/SpanUtilsTest.java b/example/src/androidTest/java/com/tokenautocompleteexample/SpanUtilsTest.java new file mode 100644 index 00000000..7735f124 --- /dev/null +++ b/example/src/androidTest/java/com/tokenautocompleteexample/SpanUtilsTest.java @@ -0,0 +1,22 @@ +package com.tokenautocompleteexample; + +import android.text.Spanned; +import android.text.TextPaint; + +import com.tokenautocomplete.SpanUtils; + +import org.junit.Test; + +import static org.junit.Assert.assertNull; + +public class SpanUtilsTest { + + @Test + public void testSpanUtilsHandlesNonSpannableTextUtilsResponse() { + TextPaint dummy = new TextPaint(); + //this used to crash, so we're making sure it runs and returns null + Spanned ellipsized = SpanUtils.ellipsizeWithSpans(null, + null, 0, dummy, "", 150); + assertNull(ellipsized); + } +} diff --git a/library/src/main/java/com/tokenautocomplete/SpanUtils.java b/library/src/main/java/com/tokenautocomplete/SpanUtils.java index 1d25869a..115edd88 100644 --- a/library/src/main/java/com/tokenautocomplete/SpanUtils.java +++ b/library/src/main/java/com/tokenautocomplete/SpanUtils.java @@ -7,7 +7,7 @@ import android.text.TextPaint; import android.text.TextUtils; -class SpanUtils { +public class SpanUtils { private static class EllipsizeCallback implements TextUtils.EllipsizeCallback { int start = 0; @@ -21,7 +21,7 @@ public void ellipsized(int ellipsedStart, int ellipsedEnd) { } @Nullable - static Spanned ellipsizeWithSpans(@Nullable CharSequence prefix, @Nullable CountSpan countSpan, + public static Spanned ellipsizeWithSpans(@Nullable CharSequence prefix, @Nullable CountSpan countSpan, int tokenCount, @NonNull TextPaint paint, @NonNull CharSequence originalText, float maxWidth) { @@ -33,10 +33,12 @@ static Spanned ellipsizeWithSpans(@Nullable CharSequence prefix, @Nullable Count } EllipsizeCallback ellipsizeCallback = new EllipsizeCallback(); - Spanned tempEllipsized = (Spanned) TextUtils.ellipsize(originalText, paint, maxWidth - countWidth, + CharSequence tempEllipsized = TextUtils.ellipsize(originalText, paint, maxWidth - countWidth, TextUtils.TruncateAt.END, false, ellipsizeCallback); SpannableStringBuilder ellipsized = new SpannableStringBuilder(tempEllipsized); - TextUtils.copySpansFrom(tempEllipsized, 0, tempEllipsized.length(), Object.class, ellipsized, 0); + if (tempEllipsized instanceof Spanned) { + TextUtils.copySpansFrom((Spanned)tempEllipsized, 0, tempEllipsized.length(), Object.class, ellipsized, 0); + } if (prefix != null && prefix.length() > ellipsizeCallback.start) { //We ellipsized part of the prefix, so put it back