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 532651e1d9..6aa0493dc4 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
@@ -26,6 +26,7 @@ import android.text.style.UnderlineSpan;
import android.util.SparseArray;
import androidx.annotation.ColorInt;
import androidx.annotation.Nullable;
+import com.google.android.exoplayer2.text.span.HorizontalTextInVerticalContextSpan;
import com.google.android.exoplayer2.text.span.RubySpan;
import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.Util;
@@ -124,6 +125,8 @@ import java.util.regex.Pattern;
ForegroundColorSpan colorSpan = (ForegroundColorSpan) span;
return Util.formatInvariant(
"", toCssColor(colorSpan.getForegroundColor()));
+ } else if (span instanceof HorizontalTextInVerticalContextSpan) {
+ return "";
} else if (span instanceof StyleSpan) {
switch (((StyleSpan) span).getStyle()) {
case Typeface.BOLD:
@@ -158,6 +161,8 @@ import java.util.regex.Pattern;
private static String getClosingTag(Object span) {
if (span instanceof ForegroundColorSpan) {
return "";
+ } else if (span instanceof HorizontalTextInVerticalContextSpan) {
+ return "";
} 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 a69499296d..11eda1012e 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
@@ -26,6 +26,7 @@ import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan;
import android.text.style.UnderlineSpan;
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import com.google.android.exoplayer2.text.span.HorizontalTextInVerticalContextSpan;
import com.google.android.exoplayer2.text.span.RubySpan;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -49,6 +50,23 @@ public class SpannedToHtmlConverterTest {
.isEqualTo("String with colored section");
}
+ @Test
+ public void convert_supportsHorizontalTextInVerticalContextSpan() {
+ SpannableString spanned = new SpannableString("Vertical text with 123 horizontal numbers");
+ spanned.setSpan(
+ new HorizontalTextInVerticalContextSpan(),
+ "Vertical text with ".length(),
+ "Vertical text with 123".length(),
+ Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+
+ String html = SpannedToHtmlConverter.convert(spanned);
+
+ assertThat(html)
+ .isEqualTo(
+ "Vertical text with 123 "
+ + "horizontal numbers");
+ }
+
@Test
public void convert_supportsStyleSpan() {
SpannableString spanned =