Skip to content

Commit

Permalink
Fix empty span utils casting crash
Browse files Browse the repository at this point in the history
  • Loading branch information
mgod committed Jul 1, 2019
1 parent be71900 commit 6c13d16
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -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);
}
}
10 changes: 6 additions & 4 deletions library/src/main/java/com/tokenautocomplete/SpanUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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) {

Expand All @@ -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
Expand Down

0 comments on commit 6c13d16

Please sign in to comment.