Migrate leaf listeners of Player to new onCues override

PiperOrigin-RevId: 449587030
This commit is contained in:
rohks 2022-05-18 23:05:13 +01:00 committed by Ian Baker
parent cd142872bb
commit 001090cc43
6 changed files with 30 additions and 17 deletions

View File

@ -25,6 +25,7 @@ import androidx.media3.common.MediaItem.SubtitleConfiguration;
import androidx.media3.common.MimeTypes; import androidx.media3.common.MimeTypes;
import androidx.media3.common.Player; import androidx.media3.common.Player;
import androidx.media3.common.text.Cue; import androidx.media3.common.text.Cue;
import androidx.media3.common.text.CueGroup;
import androidx.media3.common.util.ConditionVariable; import androidx.media3.common.util.ConditionVariable;
import androidx.media3.exoplayer.source.ClippingMediaSource; import androidx.media3.exoplayer.source.ClippingMediaSource;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
@ -135,8 +136,8 @@ public final class ClippedPlaybackTest {
} }
@Override @Override
public void onCues(List<Cue> cues) { public void onCues(CueGroup cueGroup) {
this.cues.add(cues); this.cues.add(cueGroup.cues);
} }
@Override @Override

View File

@ -33,7 +33,7 @@ public interface TextOutput {
* @deprecated Use {@link #onCues(CueGroup)} instead. * @deprecated Use {@link #onCues(CueGroup)} instead.
*/ */
@Deprecated @Deprecated
void onCues(List<Cue> cues); default void onCues(List<Cue> cues) {}
/** /**
* Called when there is a change in the {@link CueGroup}. * Called when there is a change in the {@link CueGroup}.
@ -41,5 +41,5 @@ public interface TextOutput {
* <p>Both {@link #onCues(List)} and {@link #onCues(CueGroup)} are called when there is a change * <p>Both {@link #onCues(List)} and {@link #onCues(CueGroup)} are called when there is a change
* in the cues You should only implement one or the other. * in the cues You should only implement one or the other.
*/ */
default void onCues(CueGroup cueGroup) {} void onCues(CueGroup cueGroup);
} }

View File

@ -1874,9 +1874,9 @@ public class MediaControllerListenerTest {
Player.Listener listener = Player.Listener listener =
new Player.Listener() { new Player.Listener() {
@Override @Override
public void onCues(List<Cue> cues) { public void onCues(CueGroup cueGroup) {
cuesFromParam.clear(); cuesFromParam.clear();
cuesFromParam.addAll(cues); cuesFromParam.addAll(cueGroup.cues);
cuesFromGetter.clear(); cuesFromGetter.clear();
cuesFromGetter.addAll(controller.getCurrentCues().cues); cuesFromGetter.addAll(controller.getCurrentCues().cues);
latch.countDown(); latch.countDown();
@ -1905,8 +1905,8 @@ public class MediaControllerListenerTest {
Player.Listener listener = Player.Listener listener =
new Player.Listener() { new Player.Listener() {
@Override @Override
public void onCues(List<Cue> cues) { public void onCues(CueGroup cueGroup) {
cuesFromParam.addAll(cues); cuesFromParam.addAll(cueGroup.cues);
cuesFromGetter.addAll(controller.getCurrentCues().cues); cuesFromGetter.addAll(controller.getCurrentCues().cues);
latch.countDown(); latch.countDown();
} }
@ -1937,8 +1937,8 @@ public class MediaControllerListenerTest {
Player.Listener listener = Player.Listener listener =
new Player.Listener() { new Player.Listener() {
@Override @Override
public void onCues(List<Cue> cues) { public void onCues(CueGroup cueGroup) {
cuesFromParam.addAll(cues); cuesFromParam.addAll(cueGroup.cues);
cuesFromGetter.addAll(controller.getCurrentCues().cues); cuesFromGetter.addAll(controller.getCurrentCues().cues);
latch.countDown(); latch.countDown();
} }

View File

@ -24,14 +24,13 @@ import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import androidx.media3.common.C; import androidx.media3.common.C;
import androidx.media3.common.Metadata; import androidx.media3.common.Metadata;
import androidx.media3.common.text.Cue; import androidx.media3.common.text.CueGroup;
import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.UnstableApi;
import androidx.media3.exoplayer.DefaultRenderersFactory; import androidx.media3.exoplayer.DefaultRenderersFactory;
import androidx.media3.exoplayer.Renderer; import androidx.media3.exoplayer.Renderer;
import androidx.media3.exoplayer.audio.AudioRendererEventListener; import androidx.media3.exoplayer.audio.AudioRendererEventListener;
import androidx.media3.exoplayer.video.VideoRendererEventListener; import androidx.media3.exoplayer.video.VideoRendererEventListener;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import java.util.List;
/** Assertions for {@link DefaultRenderersFactory}. */ /** Assertions for {@link DefaultRenderersFactory}. */
@UnstableApi @UnstableApi
@ -96,7 +95,7 @@ public final class DefaultRenderersFactoryAsserts {
new Handler(Looper.getMainLooper()), new Handler(Looper.getMainLooper()),
new VideoRendererEventListener() {}, new VideoRendererEventListener() {},
new AudioRendererEventListener() {}, new AudioRendererEventListener() {},
(List<Cue> cues) -> {}, (CueGroup cueGroup) -> {},
(Metadata metadata) -> {}); (Metadata metadata) -> {});
} }
} }

View File

@ -20,6 +20,7 @@ import androidx.annotation.Nullable;
import androidx.media3.common.Metadata; import androidx.media3.common.Metadata;
import androidx.media3.common.Player; import androidx.media3.common.Player;
import androidx.media3.common.text.Cue; import androidx.media3.common.text.Cue;
import androidx.media3.common.text.CueGroup;
import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util; import androidx.media3.common.util.Util;
import androidx.media3.exoplayer.ExoPlayer; import androidx.media3.exoplayer.ExoPlayer;
@ -56,12 +57,14 @@ public final class PlaybackOutput implements Dumper.Dumpable {
private final List<Metadata> metadatas; private final List<Metadata> metadatas;
private final List<List<Cue>> subtitles; private final List<List<Cue>> subtitles;
private final List<List<Cue>> subtitlesFromDeprecatedTextOutput;
private PlaybackOutput(ExoPlayer player, CapturingRenderersFactory capturingRenderersFactory) { private PlaybackOutput(ExoPlayer player, CapturingRenderersFactory capturingRenderersFactory) {
this.capturingRenderersFactory = capturingRenderersFactory; this.capturingRenderersFactory = capturingRenderersFactory;
metadatas = Collections.synchronizedList(new ArrayList<>()); metadatas = Collections.synchronizedList(new ArrayList<>());
subtitles = Collections.synchronizedList(new ArrayList<>()); subtitles = Collections.synchronizedList(new ArrayList<>());
subtitlesFromDeprecatedTextOutput = Collections.synchronizedList(new ArrayList<>());
// TODO: Consider passing playback position into MetadataOutput and TextOutput. Calling // TODO: Consider passing playback position into MetadataOutput and TextOutput. Calling
// player.getCurrentPosition() inside onMetadata/Cues will likely be non-deterministic // player.getCurrentPosition() inside onMetadata/Cues will likely be non-deterministic
// because renderer-thread != playback-thread. // because renderer-thread != playback-thread.
@ -74,7 +77,12 @@ public final class PlaybackOutput implements Dumper.Dumpable {
@Override @Override
public void onCues(List<Cue> cues) { public void onCues(List<Cue> cues) {
subtitles.add(cues); subtitlesFromDeprecatedTextOutput.add(cues);
}
@Override
public void onCues(CueGroup cueGroup) {
subtitles.add(cueGroup.cues);
} }
}); });
} }
@ -146,6 +154,11 @@ public final class PlaybackOutput implements Dumper.Dumpable {
} }
private void dumpSubtitles(Dumper dumper) { private void dumpSubtitles(Dumper dumper) {
if (!subtitles.equals(subtitlesFromDeprecatedTextOutput)) {
throw new IllegalStateException(
"Expected subtitles to be equal from both implementations of onCues method.");
}
if (subtitles.isEmpty()) { if (subtitles.isEmpty()) {
return; return;
} }

View File

@ -60,7 +60,7 @@ import androidx.media3.common.Timeline;
import androidx.media3.common.Timeline.Period; import androidx.media3.common.Timeline.Period;
import androidx.media3.common.Tracks; import androidx.media3.common.Tracks;
import androidx.media3.common.VideoSize; import androidx.media3.common.VideoSize;
import androidx.media3.common.text.Cue; import androidx.media3.common.text.CueGroup;
import androidx.media3.common.util.Assertions; import androidx.media3.common.util.Assertions;
import androidx.media3.common.util.RepeatModeUtil; import androidx.media3.common.util.RepeatModeUtil;
import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.UnstableApi;
@ -1522,9 +1522,9 @@ public class PlayerView extends FrameLayout implements AdViewProvider {
// Player.Listener implementation // Player.Listener implementation
@Override @Override
public void onCues(List<Cue> cues) { public void onCues(CueGroup cueGroup) {
if (subtitleView != null) { if (subtitleView != null) {
subtitleView.setCues(cues); subtitleView.setCues(cueGroup.cues);
} }
} }