diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 18a4b2141a..8ae316941f 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -3,6 +3,9 @@ ### dev-v2 (not yet released) * Core library: + * Added `TextComponent.getCurrentCues` because the current cues are no + longer forwarded to a new `TextOutput` in `SimpleExoPlayer` + automatically. * Add opt-in to verify correct thread usage with `SimpleExoPlayer.setThrowsWhenUsingWrongThread(true)` ([#4463](https://github.com/google/ExoPlayer/issues/4463)). diff --git a/library/core/src/main/java/com/google/android/exoplayer2/Player.java b/library/core/src/main/java/com/google/android/exoplayer2/Player.java index b06484aef2..b08b0336b5 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/Player.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/Player.java @@ -30,6 +30,7 @@ import com.google.android.exoplayer2.device.DeviceInfo; import com.google.android.exoplayer2.device.DeviceListener; import com.google.android.exoplayer2.metadata.MetadataOutput; import com.google.android.exoplayer2.source.TrackGroupArray; +import com.google.android.exoplayer2.text.Cue; import com.google.android.exoplayer2.text.TextOutput; import com.google.android.exoplayer2.trackselection.TrackSelectionArray; import com.google.android.exoplayer2.util.Util; @@ -348,6 +349,9 @@ public interface Player { * @param listener The output to remove. */ void removeTextOutput(TextOutput listener); + + /** Returns the current {@link Cue Cues}. This list may be empty. */ + List getCurrentCues(); } /** The metadata component of a {@link Player}. */ diff --git a/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java b/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java index 93ebacf5ab..313e842ed0 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java @@ -354,7 +354,6 @@ public class SimpleExoPlayer extends BasePlayer private final CopyOnWriteArraySet audioDebugListeners; private final BandwidthMeter bandwidthMeter; private final AnalyticsCollector analyticsCollector; - private final AudioBecomingNoisyManager audioBecomingNoisyManager; private final AudioFocusManager audioFocusManager; private final StreamVolumeManager streamVolumeManager; @@ -981,9 +980,6 @@ public class SimpleExoPlayer extends BasePlayer @Override public void addTextOutput(TextOutput listener) { - if (!currentCues.isEmpty()) { - listener.onCues(currentCues); - } textOutputs.add(listener); } @@ -992,6 +988,12 @@ public class SimpleExoPlayer extends BasePlayer textOutputs.remove(listener); } + @Override + public List getCurrentCues() { + verifyApplicationThread(); + return currentCues; + } + /** * Sets an output to receive text events, removing all existing outputs. * diff --git a/library/core/src/main/java/com/google/android/exoplayer2/text/TextOutput.java b/library/core/src/main/java/com/google/android/exoplayer2/text/TextOutput.java index aa3b4e5557..a039255fa9 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/text/TextOutput.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/text/TextOutput.java @@ -23,9 +23,9 @@ import java.util.List; public interface TextOutput { /** - * Called when there is a change in the {@link Cue}s. + * Called when there is a change in the {@link Cue Cues}. * - * @param cues The {@link Cue}s. May be empty. + * @param cues The {@link Cue Cues}. May be empty. */ void onCues(List cues); } diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java index 60b72783e8..6ee2e3f6a4 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java @@ -580,13 +580,13 @@ public class PlayerView extends FrameLayout implements AdsLoader.AdViewProvider oldTextComponent.removeTextOutput(componentListener); } } + if (subtitleView != null) { + subtitleView.setCues(null); + } this.player = player; if (useController()) { controller.setPlayer(player); } - if (subtitleView != null) { - subtitleView.setCues(null); - } updateBuffering(); updateErrorMessage(); updateForCurrentTrackSelections(/* isNewPlayer= */ true); @@ -608,6 +608,9 @@ public class PlayerView extends FrameLayout implements AdsLoader.AdViewProvider @Nullable Player.TextComponent newTextComponent = player.getTextComponent(); if (newTextComponent != null) { newTextComponent.addTextOutput(componentListener); + if (subtitleView != null) { + subtitleView.setCues(newTextComponent.getCurrentCues()); + } } player.addListener(componentListener); maybeShowController(false);