Skip to content

Commit 6c13d16

Browse files
committed
Fix empty span utils casting crash
1 parent be71900 commit 6c13d16

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.tokenautocompleteexample;
2+
3+
import android.text.Spanned;
4+
import android.text.TextPaint;
5+
6+
import com.tokenautocomplete.SpanUtils;
7+
8+
import org.junit.Test;
9+
10+
import static org.junit.Assert.assertNull;
11+
12+
public class SpanUtilsTest {
13+
14+
@Test
15+
public void testSpanUtilsHandlesNonSpannableTextUtilsResponse() {
16+
TextPaint dummy = new TextPaint();
17+
//this used to crash, so we're making sure it runs and returns null
18+
Spanned ellipsized = SpanUtils.ellipsizeWithSpans(null,
19+
null, 0, dummy, "", 150);
20+
assertNull(ellipsized);
21+
}
22+
}

library/src/main/java/com/tokenautocomplete/SpanUtils.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import android.text.TextPaint;
88
import android.text.TextUtils;
99

10-
class SpanUtils {
10+
public class SpanUtils {
1111

1212
private static class EllipsizeCallback implements TextUtils.EllipsizeCallback {
1313
int start = 0;
@@ -21,7 +21,7 @@ public void ellipsized(int ellipsedStart, int ellipsedEnd) {
2121
}
2222

2323
@Nullable
24-
static Spanned ellipsizeWithSpans(@Nullable CharSequence prefix, @Nullable CountSpan countSpan,
24+
public static Spanned ellipsizeWithSpans(@Nullable CharSequence prefix, @Nullable CountSpan countSpan,
2525
int tokenCount, @NonNull TextPaint paint,
2626
@NonNull CharSequence originalText, float maxWidth) {
2727

@@ -33,10 +33,12 @@ static Spanned ellipsizeWithSpans(@Nullable CharSequence prefix, @Nullable Count
3333
}
3434

3535
EllipsizeCallback ellipsizeCallback = new EllipsizeCallback();
36-
Spanned tempEllipsized = (Spanned) TextUtils.ellipsize(originalText, paint, maxWidth - countWidth,
36+
CharSequence tempEllipsized = TextUtils.ellipsize(originalText, paint, maxWidth - countWidth,
3737
TextUtils.TruncateAt.END, false, ellipsizeCallback);
3838
SpannableStringBuilder ellipsized = new SpannableStringBuilder(tempEllipsized);
39-
TextUtils.copySpansFrom(tempEllipsized, 0, tempEllipsized.length(), Object.class, ellipsized, 0);
39+
if (tempEllipsized instanceof Spanned) {
40+
TextUtils.copySpansFrom((Spanned)tempEllipsized, 0, tempEllipsized.length(), Object.class, ellipsized, 0);
41+
}
4042

4143
if (prefix != null && prefix.length() > ellipsizeCallback.start) {
4244
//We ellipsized part of the prefix, so put it back

0 commit comments

Comments
 (0)