mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Add bitmap support to SubtitleWebView using SubtitleTextView
PiperOrigin-RevId: 309389571
This commit is contained in:
parent
222231dd8e
commit
79c003f5a8
@ -34,7 +34,7 @@ import com.google.android.exoplayer2.text.CaptionStyleCompat;
|
|||||||
import com.google.android.exoplayer2.text.Cue;
|
import com.google.android.exoplayer2.text.Cue;
|
||||||
import com.google.android.exoplayer2.util.Util;
|
import com.google.android.exoplayer2.util.Util;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.util.Collections;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -48,9 +48,17 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
/* package */ final class SubtitleWebView extends FrameLayout implements SubtitleView.Output {
|
/* package */ final class SubtitleWebView extends FrameLayout implements SubtitleView.Output {
|
||||||
|
|
||||||
private final WebView webView;
|
/**
|
||||||
|
* A {@link SubtitleTextView} used for displaying bitmap cues.
|
||||||
|
*
|
||||||
|
* <p>There's no advantage to displaying bitmap cues in a {@link WebView}, so we re-use the
|
||||||
|
* existing logic.
|
||||||
|
*/
|
||||||
|
private final SubtitleTextView subtitleTextView;
|
||||||
|
|
||||||
|
private final WebView webView;
|
||||||
|
private final List<Cue> cues;
|
||||||
|
|
||||||
private List<Cue> cues;
|
|
||||||
@Cue.TextSizeType private int defaultTextSizeType;
|
@Cue.TextSizeType private int defaultTextSizeType;
|
||||||
private float defaultTextSize;
|
private float defaultTextSize;
|
||||||
private boolean applyEmbeddedStyles;
|
private boolean applyEmbeddedStyles;
|
||||||
@ -64,7 +72,7 @@ import java.util.List;
|
|||||||
|
|
||||||
public SubtitleWebView(Context context, @Nullable AttributeSet attrs) {
|
public SubtitleWebView(Context context, @Nullable AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
cues = Collections.emptyList();
|
cues = new ArrayList<>();
|
||||||
defaultTextSizeType = Cue.TEXT_SIZE_TYPE_FRACTIONAL;
|
defaultTextSizeType = Cue.TEXT_SIZE_TYPE_FRACTIONAL;
|
||||||
defaultTextSize = DEFAULT_TEXT_SIZE_FRACTION;
|
defaultTextSize = DEFAULT_TEXT_SIZE_FRACTION;
|
||||||
applyEmbeddedStyles = true;
|
applyEmbeddedStyles = true;
|
||||||
@ -72,6 +80,7 @@ import java.util.List;
|
|||||||
style = CaptionStyleCompat.DEFAULT;
|
style = CaptionStyleCompat.DEFAULT;
|
||||||
bottomPaddingFraction = DEFAULT_BOTTOM_PADDING_FRACTION;
|
bottomPaddingFraction = DEFAULT_BOTTOM_PADDING_FRACTION;
|
||||||
|
|
||||||
|
subtitleTextView = new SubtitleTextView(context, attrs);
|
||||||
webView =
|
webView =
|
||||||
new WebView(context, attrs) {
|
new WebView(context, attrs) {
|
||||||
@Override
|
@Override
|
||||||
@ -89,12 +98,26 @@ import java.util.List;
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
webView.setBackgroundColor(Color.TRANSPARENT);
|
webView.setBackgroundColor(Color.TRANSPARENT);
|
||||||
|
|
||||||
|
addView(subtitleTextView);
|
||||||
addView(webView);
|
addView(webView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCues(List<Cue> cues) {
|
public void onCues(List<Cue> cues) {
|
||||||
this.cues = cues;
|
List<Cue> bitmapCues = new ArrayList<>();
|
||||||
|
this.cues.clear();
|
||||||
|
for (int i = 0; i < cues.size(); i++) {
|
||||||
|
Cue cue = cues.get(i);
|
||||||
|
if (cue.bitmap != null) {
|
||||||
|
bitmapCues.add(cue);
|
||||||
|
} else {
|
||||||
|
this.cues.add(cue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
subtitleTextView.onCues(bitmapCues);
|
||||||
|
// Invalidate to trigger subtitleTextView to draw.
|
||||||
|
invalidate();
|
||||||
updateWebView();
|
updateWebView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,6 +128,7 @@ import java.util.List;
|
|||||||
}
|
}
|
||||||
this.defaultTextSizeType = textSizeType;
|
this.defaultTextSizeType = textSizeType;
|
||||||
this.defaultTextSize = textSize;
|
this.defaultTextSize = textSize;
|
||||||
|
invalidate();
|
||||||
updateWebView();
|
updateWebView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,6 +140,7 @@ import java.util.List;
|
|||||||
}
|
}
|
||||||
this.applyEmbeddedStyles = applyEmbeddedStyles;
|
this.applyEmbeddedStyles = applyEmbeddedStyles;
|
||||||
this.applyEmbeddedFontSizes = applyEmbeddedStyles;
|
this.applyEmbeddedFontSizes = applyEmbeddedStyles;
|
||||||
|
invalidate();
|
||||||
updateWebView();
|
updateWebView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,6 +150,7 @@ import java.util.List;
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.applyEmbeddedFontSizes = applyEmbeddedFontSizes;
|
this.applyEmbeddedFontSizes = applyEmbeddedFontSizes;
|
||||||
|
invalidate();
|
||||||
updateWebView();
|
updateWebView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,6 +160,7 @@ import java.util.List;
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.style = style;
|
this.style = style;
|
||||||
|
invalidate();
|
||||||
updateWebView();
|
updateWebView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,6 +170,7 @@ import java.util.List;
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.bottomPaddingFraction = bottomPaddingFraction;
|
this.bottomPaddingFraction = bottomPaddingFraction;
|
||||||
|
invalidate();
|
||||||
updateWebView();
|
updateWebView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user