From 76358d983f363fc440175741bf791cbfe4159c32 Mon Sep 17 00:00:00 2001 From: ibaker Date: Wed, 1 Apr 2020 13:18:29 +0100 Subject: [PATCH] Base64 encode the subtitle HTML before passing to WebView.loadData Without this, URL-encoding is assumed, which means ampersand-codes are not carried through to the underlying web page correctly. PiperOrigin-RevId: 304163733 --- .../google/android/exoplayer2/ui/SubtitleWebView.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/SubtitleWebView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/SubtitleWebView.java index e8cd6ff2d1..1ce1d16d28 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/SubtitleWebView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/SubtitleWebView.java @@ -23,13 +23,16 @@ import android.content.Context; import android.graphics.Color; import android.text.Layout; import android.util.AttributeSet; +import android.util.Base64; import android.view.MotionEvent; import android.view.ViewGroup; import android.webkit.WebView; import androidx.annotation.Nullable; +import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.text.CaptionStyleCompat; import com.google.android.exoplayer2.text.Cue; import com.google.android.exoplayer2.util.Util; +import java.nio.charset.Charset; import java.util.Collections; import java.util.List; @@ -231,7 +234,11 @@ import java.util.List; html.append(""); - webView.loadData(html.toString(), "text/html", /* encoding= */ null); + webView.loadData( + Base64.encodeToString( + html.toString().getBytes(Charset.forName(C.UTF8_NAME)), Base64.NO_PADDING), + "text/html", + "base64"); } private String convertAlignmentToCss(@Nullable Layout.Alignment alignment) {