From 5ae84ab5f48f3e638273cc37ea23d69b8aa39a31 Mon Sep 17 00:00:00 2001 From: krocard Date: Wed, 14 Apr 2021 15:49:04 +0100 Subject: [PATCH] Move TextComponent to ExoPlayer PiperOrigin-RevId: 368428647 --- .../exoplayer2/ext/cast/CastPlayer.java | 19 +++++++------ .../com/google/android/exoplayer2/Player.java | 28 ++----------------- .../google/android/exoplayer2/ExoPlayer.java | 27 ++++++++++++++++++ .../android/exoplayer2/ExoPlayerImpl.java | 7 +++++ .../android/exoplayer2/SimpleExoPlayer.java | 2 +- .../android/exoplayer2/ui/PlayerView.java | 19 ++++--------- .../exoplayer2/ui/StyledPlayerView.java | 14 ++-------- .../exoplayer2/testutil/StubExoPlayer.java | 6 ++++ 8 files changed, 62 insertions(+), 60 deletions(-) diff --git a/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java b/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java index df8accd1b3..7f675e34eb 100644 --- a/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java +++ b/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java @@ -34,6 +34,7 @@ import com.google.android.exoplayer2.audio.AudioAttributes; import com.google.android.exoplayer2.metadata.Metadata; import com.google.android.exoplayer2.source.TrackGroup; import com.google.android.exoplayer2.source.TrackGroupArray; +import com.google.android.exoplayer2.text.Cue; import com.google.android.exoplayer2.trackselection.TrackSelection; import com.google.android.exoplayer2.trackselection.TrackSelectionArray; import com.google.android.exoplayer2.util.Assertions; @@ -55,7 +56,7 @@ import com.google.android.gms.cast.framework.media.RemoteMediaClient; import com.google.android.gms.cast.framework.media.RemoteMediaClient.MediaChannelResult; import com.google.android.gms.common.api.PendingResult; import com.google.android.gms.common.api.ResultCallback; -import java.util.Collections; +import com.google.common.collect.ImmutableList; import java.util.List; import org.checkerframework.checker.nullness.qual.RequiresNonNull; @@ -280,12 +281,6 @@ public final class CastPlayer extends BasePlayer { return null; } - @Override - @Nullable - public TextComponent getTextComponent() { - return null; - } - @Override @Nullable public DeviceComponent getDeviceComponent() { @@ -562,9 +557,9 @@ public final class CastPlayer extends BasePlayer { } @Override - public List getCurrentStaticMetadata() { + public ImmutableList getCurrentStaticMetadata() { // CastPlayer does not currently support metadata. - return Collections.emptyList(); + return ImmutableList.of(); } @Override @@ -664,6 +659,12 @@ public final class CastPlayer extends BasePlayer { return 1; } + /** This method is not supported and returns an empty list. */ + @Override + public ImmutableList getCurrentCues() { + return ImmutableList.of(); + } + // Internal methods. // Call deprecated callbacks. diff --git a/library/common/src/main/java/com/google/android/exoplayer2/Player.java b/library/common/src/main/java/com/google/android/exoplayer2/Player.java index e8f0ddc916..edc29a2057 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/Player.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/Player.java @@ -206,27 +206,6 @@ public interface Player { void clearVideoTextureView(@Nullable TextureView textureView); } - /** The text component of a {@link Player}. */ - interface TextComponent { - - /** - * Registers an output to receive text events. - * - * @param listener The output to register. - */ - void addTextOutput(TextOutput listener); - - /** - * Removes a text output. - * - * @param listener The output to remove. - */ - void removeTextOutput(TextOutput listener); - - /** Returns the current {@link Cue Cues}. This list may be empty. */ - List getCurrentCues(); - } - /** The device component of a {@link Player}. */ interface DeviceComponent { @@ -1151,10 +1130,6 @@ public interface Player { @Nullable VideoComponent getVideoComponent(); - /** Returns the component of this player for text output, or null if text is not supported. */ - @Nullable - TextComponent getTextComponent(); - /** Returns the component of this player for playback device, or null if it's not supported. */ @Nullable DeviceComponent getDeviceComponent(); @@ -1832,4 +1807,7 @@ public interface Player { * @return The linear gain applied to all audio channels. */ float getVolume(); + + /** Returns the current {@link Cue Cues}. This list may be empty. */ + List getCurrentCues(); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayer.java b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayer.java index 32c1fac0c7..fe601312ba 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayer.java @@ -34,6 +34,8 @@ import com.google.android.exoplayer2.source.DefaultMediaSourceFactory; import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.source.MediaSourceFactory; import com.google.android.exoplayer2.source.ShuffleOrder; +import com.google.android.exoplayer2.text.Cue; +import com.google.android.exoplayer2.text.TextOutput; import com.google.android.exoplayer2.text.TextRenderer; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; import com.google.android.exoplayer2.trackselection.TrackSelector; @@ -219,6 +221,27 @@ public interface ExoPlayer extends Player { boolean getSkipSilenceEnabled(); } + /** The text component of an {@link ExoPlayer}. */ + interface TextComponent { + + /** + * Registers an output to receive text events. + * + * @param listener The output to register. + */ + void addTextOutput(TextOutput listener); + + /** + * Removes a text output. + * + * @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 an {@link ExoPlayer}. */ interface MetadataComponent { @@ -580,6 +603,10 @@ public interface ExoPlayer extends Player { @Nullable AudioComponent getAudioComponent(); + /** Returns the component of this player for text output, or null if text is not supported. */ + @Nullable + TextComponent getTextComponent(); + /** * Returns the component of this player for metadata output, or null if metadata is not supported. */ diff --git a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java index f41f8dfbf3..5373174482 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java @@ -35,6 +35,7 @@ import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId; import com.google.android.exoplayer2.source.MediaSourceFactory; import com.google.android.exoplayer2.source.ShuffleOrder; import com.google.android.exoplayer2.source.TrackGroupArray; +import com.google.android.exoplayer2.text.Cue; import com.google.android.exoplayer2.trackselection.ExoTrackSelection; import com.google.android.exoplayer2.trackselection.TrackSelectionArray; import com.google.android.exoplayer2.trackselection.TrackSelector; @@ -1002,6 +1003,12 @@ import java.util.concurrent.CopyOnWriteArraySet; return 1; } + /** This method is not supported and returns an empty list. */ + @Override + public ImmutableList getCurrentCues() { + return ImmutableList.of(); + } + private int getCurrentWindowIndexInternal() { if (playbackInfo.timeline.isEmpty()) { return maskingWindowIndex; 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 24f5adb6ea..66432dfc88 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 @@ -80,7 +80,7 @@ public class SimpleExoPlayer extends BasePlayer implements ExoPlayer, ExoPlayer.AudioComponent, Player.VideoComponent, - Player.TextComponent, + ExoPlayer.TextComponent, ExoPlayer.MetadataComponent, Player.DeviceComponent { 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 b1fd0aa0a6..9663c2757c 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 @@ -15,6 +15,8 @@ */ package com.google.android.exoplayer2.ui; +import static com.google.android.exoplayer2.Player.COMMAND_GET_TEXT; + import android.annotation.SuppressLint; import android.content.Context; import android.content.res.Resources; @@ -56,7 +58,6 @@ import com.google.android.exoplayer2.metadata.flac.PictureFrame; import com.google.android.exoplayer2.metadata.id3.ApicFrame; 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.trackselection.TrackSelectionUtil; import com.google.android.exoplayer2.ui.AspectRatioFrameLayout.ResizeMode; @@ -562,7 +563,6 @@ public class PlayerView extends FrameLayout implements AdViewProvider { oldPlayer.removeListener(componentListener); @Nullable Player.VideoComponent oldVideoComponent = oldPlayer.getVideoComponent(); if (oldVideoComponent != null) { - oldVideoComponent.removeVideoListener(componentListener); if (surfaceView instanceof TextureView) { oldVideoComponent.clearVideoTextureView((TextureView) surfaceView); } else if (surfaceView instanceof SphericalGLSurfaceView) { @@ -571,10 +571,6 @@ public class PlayerView extends FrameLayout implements AdViewProvider { oldVideoComponent.clearVideoSurfaceView((SurfaceView) surfaceView); } } - @Nullable Player.TextComponent oldTextComponent = oldPlayer.getTextComponent(); - if (oldTextComponent != null) { - oldTextComponent.removeTextOutput(componentListener); - } } if (subtitleView != null) { subtitleView.setCues(null); @@ -598,12 +594,8 @@ public class PlayerView extends FrameLayout implements AdViewProvider { } newVideoComponent.addVideoListener(componentListener); } - @Nullable Player.TextComponent newTextComponent = player.getTextComponent(); - if (newTextComponent != null) { - newTextComponent.addTextOutput(componentListener); - if (subtitleView != null) { - subtitleView.setCues(newTextComponent.getCurrentCues()); - } + if (subtitleView != null && player.isCommandAvailable(COMMAND_GET_TEXT)) { + subtitleView.setCues(player.getCurrentCues()); } player.addListener(componentListener); maybeShowController(false); @@ -1491,8 +1483,7 @@ public class PlayerView extends FrameLayout implements AdViewProvider { } private final class ComponentListener - implements Player.EventListener, - TextOutput, + implements Player.Listener, VideoListener, OnLayoutChangeListener, SingleTapListener, diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerView.java index 8f7269b2ef..a33505b2a2 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerView.java @@ -15,6 +15,7 @@ */ package com.google.android.exoplayer2.ui; +import static com.google.android.exoplayer2.Player.COMMAND_GET_TEXT; import static com.google.android.exoplayer2.util.Assertions.checkNotNull; import android.annotation.SuppressLint; @@ -571,7 +572,6 @@ public class StyledPlayerView extends FrameLayout implements AdViewProvider { oldPlayer.removeListener(componentListener); @Nullable Player.VideoComponent oldVideoComponent = oldPlayer.getVideoComponent(); if (oldVideoComponent != null) { - oldVideoComponent.removeVideoListener(componentListener); if (surfaceView instanceof TextureView) { oldVideoComponent.clearVideoTextureView((TextureView) surfaceView); } else if (surfaceView instanceof SphericalGLSurfaceView) { @@ -580,10 +580,6 @@ public class StyledPlayerView extends FrameLayout implements AdViewProvider { oldVideoComponent.clearVideoSurfaceView((SurfaceView) surfaceView); } } - @Nullable Player.TextComponent oldTextComponent = oldPlayer.getTextComponent(); - if (oldTextComponent != null) { - oldTextComponent.removeTextOutput(componentListener); - } } if (subtitleView != null) { subtitleView.setCues(null); @@ -607,12 +603,8 @@ public class StyledPlayerView extends FrameLayout implements AdViewProvider { } newVideoComponent.addVideoListener(componentListener); } - @Nullable Player.TextComponent newTextComponent = player.getTextComponent(); - if (newTextComponent != null) { - newTextComponent.addTextOutput(componentListener); - if (subtitleView != null) { - subtitleView.setCues(newTextComponent.getCurrentCues()); - } + if (subtitleView != null && player.isCommandAvailable(COMMAND_GET_TEXT)) { + subtitleView.setCues(player.getCurrentCues()); } player.addListener(componentListener); maybeShowController(false); diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/StubExoPlayer.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/StubExoPlayer.java index ccf6a1a250..29a57a89c9 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/StubExoPlayer.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/StubExoPlayer.java @@ -32,6 +32,7 @@ import com.google.android.exoplayer2.metadata.Metadata; import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.source.ShuffleOrder; import com.google.android.exoplayer2.source.TrackGroupArray; +import com.google.android.exoplayer2.text.Cue; import com.google.android.exoplayer2.trackselection.TrackSelectionArray; import com.google.android.exoplayer2.trackselection.TrackSelector; import com.google.android.exoplayer2.util.Clock; @@ -438,6 +439,11 @@ public class StubExoPlayer extends BasePlayer implements ExoPlayer { throw new UnsupportedOperationException(); } + @Override + public List getCurrentCues() { + throw new UnsupportedOperationException(); + } + @Override public void setForegroundMode(boolean foregroundMode) { throw new UnsupportedOperationException();