From 95ffc365ca0027fe6b3d5fa6f3fc966106df605a Mon Sep 17 00:00:00 2001 From: tonihei Date: Wed, 6 May 2020 10:06:12 +0100 Subject: [PATCH] Remove auto-notification of current cues when adding listener. Users of addTextOutput should instead query the current cues if they need them. This is more consistent with how other listeners are handled. PiperOrigin-RevId: 310112241 --- RELEASENOTES.md | 3 +++ .../java/com/google/android/exoplayer2/Player.java | 4 ++++ .../com/google/android/exoplayer2/SimpleExoPlayer.java | 10 ++++++---- .../com/google/android/exoplayer2/text/TextOutput.java | 4 ++-- .../com/google/android/exoplayer2/ui/PlayerView.java | 9 ++++++--- 5 files changed, 21 insertions(+), 9 deletions(-) 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);