ForwardingPlayer implements Player

Make ForwardingPlayer implement Player and not extend BasePlayer so that
ForwardingPlayer forwards each Player method directly to the wrapped
Player instance.

PiperOrigin-RevId: 374161084
This commit is contained in:
christosts 2021-05-17 11:38:42 +01:00 committed by Oliver Woodman
parent ea597a8002
commit 1dfda7ab6e
2 changed files with 195 additions and 3 deletions

View File

@ -43,7 +43,7 @@ import java.util.List;
* player advertises available commands, either with {@link Player#isCommandAvailable(int)} or with * player advertises available commands, either with {@link Player#isCommandAvailable(int)} or with
* {@link Listener#onAvailableCommandsChanged}, the disabled commands will be filtered out. * {@link Listener#onAvailableCommandsChanged}, the disabled commands will be filtered out.
*/ */
public class ForwardingPlayer extends BasePlayer { public class ForwardingPlayer implements Player {
private final Player player; private final Player player;
private final Clock clock; private final Clock clock;
@Nullable private ForwardingListener forwardingListener; @Nullable private ForwardingListener forwardingListener;
@ -122,6 +122,11 @@ public class ForwardingPlayer extends BasePlayer {
} }
} }
@Override
public void setMediaItems(List<MediaItem> mediaItems) {
player.setMediaItems(mediaItems);
}
@Override @Override
public void setMediaItems(List<MediaItem> mediaItems, boolean resetPosition) { public void setMediaItems(List<MediaItem> mediaItems, boolean resetPosition) {
player.setMediaItems(mediaItems, resetPosition); player.setMediaItems(mediaItems, resetPosition);
@ -133,21 +138,71 @@ public class ForwardingPlayer extends BasePlayer {
player.setMediaItems(mediaItems, startWindowIndex, startPositionMs); player.setMediaItems(mediaItems, startWindowIndex, startPositionMs);
} }
@Override
public void setMediaItem(MediaItem mediaItem) {
player.setMediaItem(mediaItem);
}
@Override
public void setMediaItem(MediaItem mediaItem, long startPositionMs) {
player.setMediaItem(mediaItem, startPositionMs);
}
@Override
public void setMediaItem(MediaItem mediaItem, boolean resetPosition) {
player.setMediaItem(mediaItem, resetPosition);
}
@Override
public void addMediaItem(MediaItem mediaItem) {
player.addMediaItem(mediaItem);
}
@Override
public void addMediaItem(int index, MediaItem mediaItem) {
player.addMediaItem(index, mediaItem);
}
@Override
public void addMediaItems(List<MediaItem> mediaItems) {
player.addMediaItems(mediaItems);
}
@Override @Override
public void addMediaItems(int index, List<MediaItem> mediaItems) { public void addMediaItems(int index, List<MediaItem> mediaItems) {
player.addMediaItems(index, mediaItems); player.addMediaItems(index, mediaItems);
} }
@Override
public void moveMediaItem(int currentIndex, int newIndex) {
player.moveMediaItem(currentIndex, newIndex);
}
@Override @Override
public void moveMediaItems(int fromIndex, int toIndex, int newIndex) { public void moveMediaItems(int fromIndex, int toIndex, int newIndex) {
player.moveMediaItems(fromIndex, toIndex, newIndex); player.moveMediaItems(fromIndex, toIndex, newIndex);
} }
@Override
public void removeMediaItem(int index) {
player.removeMediaItem(index);
}
@Override @Override
public void removeMediaItems(int fromIndex, int toIndex) { public void removeMediaItems(int fromIndex, int toIndex) {
player.removeMediaItems(fromIndex, toIndex); player.removeMediaItems(fromIndex, toIndex);
} }
@Override
public void clearMediaItems() {
player.clearMediaItems();
}
@Override
public boolean isCommandAvailable(@Command int command) {
return !disabledCommands.contains(command) && player.isCommandAvailable(command);
}
@Override @Override
public Commands getAvailableCommands() { public Commands getAvailableCommands() {
Commands commands = player.getAvailableCommands(); Commands commands = player.getAvailableCommands();
@ -173,12 +228,27 @@ public class ForwardingPlayer extends BasePlayer {
return player.getPlaybackSuppressionReason(); return player.getPlaybackSuppressionReason();
} }
@Override
public boolean isPlaying() {
return player.isPlaying();
}
@Nullable @Nullable
@Override @Override
public ExoPlaybackException getPlayerError() { public ExoPlaybackException getPlayerError() {
return player.getPlayerError(); return player.getPlayerError();
} }
@Override
public void play() {
player.play();
}
@Override
public void pause() {
player.pause();
}
@Override @Override
public void setPlayWhenReady(boolean playWhenReady) { public void setPlayWhenReady(boolean playWhenReady) {
player.setPlayWhenReady(playWhenReady); player.setPlayWhenReady(playWhenReady);
@ -214,21 +284,66 @@ public class ForwardingPlayer extends BasePlayer {
return player.isLoading(); return player.isLoading();
} }
@Override
public void seekToDefaultPosition() {
player.seekToDefaultPosition();
}
@Override
public void seekToDefaultPosition(int windowIndex) {
player.seekToDefaultPosition(windowIndex);
}
@Override
public void seekTo(long positionMs) {
player.seekTo(positionMs);
}
@Override @Override
public void seekTo(int windowIndex, long positionMs) { public void seekTo(int windowIndex, long positionMs) {
player.seekTo(windowIndex, positionMs); player.seekTo(windowIndex, positionMs);
} }
@Override
public boolean hasPrevious() {
return player.hasPrevious();
}
@Override
public void previous() {
player.previous();
}
@Override
public boolean hasNext() {
return player.hasNext();
}
@Override
public void next() {
player.next();
}
@Override @Override
public void setPlaybackParameters(PlaybackParameters playbackParameters) { public void setPlaybackParameters(PlaybackParameters playbackParameters) {
player.setPlaybackParameters(playbackParameters); player.setPlaybackParameters(playbackParameters);
} }
@Override
public void setPlaybackSpeed(float speed) {
player.setPlaybackSpeed(speed);
}
@Override @Override
public PlaybackParameters getPlaybackParameters() { public PlaybackParameters getPlaybackParameters() {
return player.getPlaybackParameters(); return player.getPlaybackParameters();
} }
@Override
public void stop() {
player.stop();
}
@Override @Override
@SuppressWarnings("deprecation") // Forwarding to deprecated method. @SuppressWarnings("deprecation") // Forwarding to deprecated method.
public void stop(boolean reset) { public void stop(boolean reset) {
@ -260,6 +375,12 @@ public class ForwardingPlayer extends BasePlayer {
return player.getMediaMetadata(); return player.getMediaMetadata();
} }
@Nullable
@Override
public Object getCurrentManifest() {
return player.getCurrentManifest();
}
@Override @Override
public Timeline getCurrentTimeline() { public Timeline getCurrentTimeline() {
return player.getCurrentTimeline(); return player.getCurrentTimeline();
@ -275,6 +396,32 @@ public class ForwardingPlayer extends BasePlayer {
return player.getCurrentWindowIndex(); return player.getCurrentWindowIndex();
} }
@Override
public int getNextWindowIndex() {
return player.getNextWindowIndex();
}
@Override
public int getPreviousWindowIndex() {
return player.getPreviousWindowIndex();
}
@Nullable
@Override
public MediaItem getCurrentMediaItem() {
return player.getCurrentMediaItem();
}
@Override
public int getMediaItemCount() {
return player.getMediaItemCount();
}
@Override
public MediaItem getMediaItemAt(int index) {
return player.getMediaItemAt(index);
}
@Override @Override
public long getDuration() { public long getDuration() {
return player.getDuration(); return player.getDuration();
@ -290,11 +437,36 @@ public class ForwardingPlayer extends BasePlayer {
return player.getBufferedPosition(); return player.getBufferedPosition();
} }
@Override
public int getBufferedPercentage() {
return player.getBufferedPercentage();
}
@Override @Override
public long getTotalBufferedDuration() { public long getTotalBufferedDuration() {
return player.getTotalBufferedDuration(); return player.getTotalBufferedDuration();
} }
@Override
public boolean isCurrentWindowDynamic() {
return player.isCurrentWindowDynamic();
}
@Override
public boolean isCurrentWindowLive() {
return player.isCurrentWindowLive();
}
@Override
public long getCurrentLiveOffset() {
return player.getCurrentLiveOffset();
}
@Override
public boolean isCurrentWindowSeekable() {
return player.isCurrentWindowSeekable();
}
@Override @Override
public boolean isPlayingAd() { public boolean isPlayingAd() {
return player.isPlayingAd(); return player.isPlayingAd();
@ -310,6 +482,11 @@ public class ForwardingPlayer extends BasePlayer {
return player.getCurrentAdIndexInAdGroup(); return player.getCurrentAdIndexInAdGroup();
} }
@Override
public long getContentDuration() {
return player.getContentDuration();
}
@Override @Override
public long getContentPosition() { public long getContentPosition() {
return player.getContentPosition(); return player.getContentPosition();

View File

@ -254,13 +254,27 @@ public class ForwardingPlayerTest {
inOrder.verifyNoMoreInteractions(); inOrder.verifyNoMoreInteractions();
} }
@Test
public void forwardingPlayer_overridesAllPlayerMethods() throws Exception {
// Check with reflection that ForwardingPlayer overrides all Player methods.
List<Method> playerMethods = getPublicMethods(Player.class);
for (int i = 0; i < playerMethods.size(); i++) {
Method method = playerMethods.get(i);
assertThat(
ForwardingPlayer.class.getDeclaredMethod(
method.getName(), method.getParameterTypes()))
.isNotNull();
}
}
@Test @Test
public void forwardingListener_overridesAllListenerMethods() throws Exception { public void forwardingListener_overridesAllListenerMethods() throws Exception {
// Check with reflection that ForwardingListener in ForwardingPlayer overrides all Listener // Check with reflection that ForwardingListener in ForwardingPlayer overrides all Listener
// methods. // methods.
Class<?> forwardingListenerClass = getNestedClass("ForwardingListener"); Class<?> forwardingListenerClass = getNestedClass("ForwardingListener");
List<Method> publicListenerMethods = getPublicMethods(Player.Listener.class); List<Method> publicListenerMethods = getPublicMethods(Player.Listener.class);
for (Method method : publicListenerMethods) { for (int i = 0; i < publicListenerMethods.size(); i++) {
Method method = publicListenerMethods.get(i);
assertThat( assertThat(
forwardingListenerClass.getDeclaredMethod( forwardingListenerClass.getDeclaredMethod(
method.getName(), method.getParameterTypes())) method.getName(), method.getParameterTypes()))
@ -274,7 +288,8 @@ public class ForwardingPlayerTest {
// EventListener methods. // EventListener methods.
Class<?> listenerWrapperClass = getNestedClass("EventListenerWrapper"); Class<?> listenerWrapperClass = getNestedClass("EventListenerWrapper");
List<Method> publicListenerMethods = getPublicMethods(Player.EventListener.class); List<Method> publicListenerMethods = getPublicMethods(Player.EventListener.class);
for (Method method : publicListenerMethods) { for (int i = 0; i < publicListenerMethods.size(); i++) {
Method method = publicListenerMethods.get(i);
assertThat( assertThat(
listenerWrapperClass.getDeclaredMethod(method.getName(), method.getParameterTypes())) listenerWrapperClass.getDeclaredMethod(method.getName(), method.getParameterTypes()))
.isNotNull(); .isNotNull();