diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/SpannedToHtmlConverter.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/SpannedToHtmlConverter.java index 356f44e5b2..f534b9e397 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/SpannedToHtmlConverter.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/SpannedToHtmlConverter.java @@ -22,6 +22,7 @@ import android.text.Spanned; import android.text.style.BackgroundColorSpan; import android.text.style.ForegroundColorSpan; import android.text.style.StyleSpan; +import android.text.style.TypefaceSpan; import android.text.style.UnderlineSpan; import android.util.SparseArray; import androidx.annotation.Nullable; @@ -131,6 +132,11 @@ import java.util.regex.Pattern; HtmlUtils.toCssRgba(colorSpan.getBackgroundColor())); } else if (span instanceof HorizontalTextInVerticalContextSpan) { return ""; + } else if (span instanceof TypefaceSpan) { + @Nullable String fontFamily = ((TypefaceSpan) span).getFamily(); + return fontFamily != null + ? Util.formatInvariant("", fontFamily) + : null; } else if (span instanceof StyleSpan) { switch (((StyleSpan) span).getStyle()) { case Typeface.BOLD: @@ -167,6 +173,9 @@ import java.util.regex.Pattern; || span instanceof BackgroundColorSpan || span instanceof HorizontalTextInVerticalContextSpan) { return ""; + } else if (span instanceof TypefaceSpan) { + @Nullable String fontFamily = ((TypefaceSpan) span).getFamily(); + return fontFamily != null ? "" : null; } else if (span instanceof StyleSpan) { switch (((StyleSpan) span).getStyle()) { case Typeface.BOLD: diff --git a/library/ui/src/test/java/com/google/android/exoplayer2/ui/SpannedToHtmlConverterTest.java b/library/ui/src/test/java/com/google/android/exoplayer2/ui/SpannedToHtmlConverterTest.java index d512c0e43c..b6a6c5a323 100644 --- a/library/ui/src/test/java/com/google/android/exoplayer2/ui/SpannedToHtmlConverterTest.java +++ b/library/ui/src/test/java/com/google/android/exoplayer2/ui/SpannedToHtmlConverterTest.java @@ -25,6 +25,7 @@ import android.text.Spanned; import android.text.style.BackgroundColorSpan; import android.text.style.ForegroundColorSpan; import android.text.style.StyleSpan; +import android.text.style.TypefaceSpan; import android.text.style.UnderlineSpan; import androidx.test.ext.junit.runners.AndroidJUnit4; import com.google.android.exoplayer2.text.span.HorizontalTextInVerticalContextSpan; @@ -85,6 +86,37 @@ public class SpannedToHtmlConverterTest { + "horizontal numbers"); } + @Test + public void convert_supportsTypefaceSpan() { + SpannableString spanned = new SpannableString("String with Times New Roman section"); + spanned.setSpan( + new TypefaceSpan(/* family= */ "Times New Roman"), + "String with ".length(), + "String with Times New Roman".length(), + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + + String html = SpannedToHtmlConverter.convert(spanned); + + assertThat(html) + .isEqualTo( + "String with Times New Roman" + + " section"); + } + + @Test + public void convert_supportsTypefaceSpan_nullFamily() { + SpannableString spanned = new SpannableString("String with unstyled section"); + spanned.setSpan( + new TypefaceSpan(/* family= */ (String) null), + "String with ".length(), + "String with unstyled".length(), + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + + String html = SpannedToHtmlConverter.convert(spanned); + + assertThat(html).isEqualTo("String with unstyled section"); + } + @Test public void convert_supportsStyleSpan() { SpannableString spanned =