Commit b79e2e06 by olly Committed by Oliver Woodman

SessionPlayerConnector: Use setter for ControlDispatcher

This brings SessionPlayerConnector in line with other
components that use a ControlDispatcher in the ExoPlayer
library, all of which have a setter.

PiperOrigin-RevId: 329665767
parent 56e622a2
...@@ -185,17 +185,20 @@ public class SessionPlayerConnectorTest { ...@@ -185,17 +185,20 @@ public class SessionPlayerConnectorTest {
} }
}; };
SimpleExoPlayer simpleExoPlayer = null; SimpleExoPlayer simpleExoPlayer = null;
SessionPlayerConnector playerConnector = null;
try { try {
simpleExoPlayer = simpleExoPlayer =
new SimpleExoPlayer.Builder(context) new SimpleExoPlayer.Builder(context)
.setLooper(Looper.myLooper()) .setLooper(Looper.myLooper())
.build(); .build();
try (SessionPlayerConnector player = playerConnector =
new SessionPlayerConnector( new SessionPlayerConnector(simpleExoPlayer, new DefaultMediaItemConverter());
simpleExoPlayer, new DefaultMediaItemConverter(), controlDispatcher)) { playerConnector.setControlDispatcher(controlDispatcher);
assertPlayerResult(player.play(), RESULT_INFO_SKIPPED); assertPlayerResult(playerConnector.play(), RESULT_INFO_SKIPPED);
}
} finally { } finally {
if (playerConnector != null) {
playerConnector.close();
}
if (simpleExoPlayer != null) { if (simpleExoPlayer != null) {
simpleExoPlayer.release(); simpleExoPlayer.release();
} }
......
...@@ -27,6 +27,7 @@ import androidx.media2.common.MediaMetadata; ...@@ -27,6 +27,7 @@ import androidx.media2.common.MediaMetadata;
import androidx.media2.common.SessionPlayer; import androidx.media2.common.SessionPlayer;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ControlDispatcher; import com.google.android.exoplayer2.ControlDispatcher;
import com.google.android.exoplayer2.DefaultControlDispatcher;
import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.PlaybackParameters; import com.google.android.exoplayer2.PlaybackParameters;
...@@ -108,7 +109,6 @@ import java.util.List; ...@@ -108,7 +109,6 @@ import java.util.List;
private final Player player; private final Player player;
private final MediaItemConverter mediaItemConverter; private final MediaItemConverter mediaItemConverter;
private final ControlDispatcher controlDispatcher;
private final ComponentListener componentListener; private final ComponentListener componentListener;
@Nullable private MediaMetadata playlistMetadata; @Nullable private MediaMetadata playlistMetadata;
...@@ -117,6 +117,7 @@ import java.util.List; ...@@ -117,6 +117,7 @@ import java.util.List;
private final List<androidx.media2.common.MediaItem> media2Playlist; private final List<androidx.media2.common.MediaItem> media2Playlist;
private final List<MediaItem> exoPlayerPlaylist; private final List<MediaItem> exoPlayerPlaylist;
private ControlDispatcher controlDispatcher;
private boolean prepared; private boolean prepared;
private boolean rebuffering; private boolean rebuffering;
private int currentWindowIndex; private int currentWindowIndex;
...@@ -128,18 +129,13 @@ import java.util.List; ...@@ -128,18 +129,13 @@ import java.util.List;
* @param listener A {@link Listener}. * @param listener A {@link Listener}.
* @param player The {@link Player}. * @param player The {@link Player}.
* @param mediaItemConverter The {@link MediaItemConverter}. * @param mediaItemConverter The {@link MediaItemConverter}.
* @param controlDispatcher A {@link ControlDispatcher}.
*/ */
public PlayerWrapper( public PlayerWrapper(Listener listener, Player player, MediaItemConverter mediaItemConverter) {
Listener listener,
Player player,
MediaItemConverter mediaItemConverter,
ControlDispatcher controlDispatcher) {
this.listener = listener; this.listener = listener;
this.player = player; this.player = player;
this.mediaItemConverter = mediaItemConverter; this.mediaItemConverter = mediaItemConverter;
this.controlDispatcher = controlDispatcher;
controlDispatcher = new DefaultControlDispatcher();
componentListener = new ComponentListener(); componentListener = new ComponentListener();
player.addListener(componentListener); player.addListener(componentListener);
@Nullable Player.AudioComponent audioComponent = player.getAudioComponent(); @Nullable Player.AudioComponent audioComponent = player.getAudioComponent();
...@@ -160,6 +156,10 @@ import java.util.List; ...@@ -160,6 +156,10 @@ import java.util.List;
updatePlaylist(player.getCurrentTimeline()); updatePlaylist(player.getCurrentTimeline());
} }
public void setControlDispatcher(ControlDispatcher controlDispatcher) {
this.controlDispatcher = controlDispatcher;
}
public boolean setMediaItem(androidx.media2.common.MediaItem media2MediaItem) { public boolean setMediaItem(androidx.media2.common.MediaItem media2MediaItem) {
return setPlaylist(Collections.singletonList(media2MediaItem), /* metadata= */ null); return setPlaylist(Collections.singletonList(media2MediaItem), /* metadata= */ null);
} }
......
...@@ -92,7 +92,7 @@ public final class SessionPlayerConnector extends SessionPlayer { ...@@ -92,7 +92,7 @@ public final class SessionPlayerConnector extends SessionPlayer {
* @param player The player to wrap. * @param player The player to wrap.
*/ */
public SessionPlayerConnector(Player player) { public SessionPlayerConnector(Player player) {
this(player, new DefaultMediaItemConverter(), new DefaultControlDispatcher()); this(player, new DefaultMediaItemConverter());
} }
/** /**
...@@ -100,22 +100,28 @@ public final class SessionPlayerConnector extends SessionPlayer { ...@@ -100,22 +100,28 @@ public final class SessionPlayerConnector extends SessionPlayer {
* *
* @param player The player to wrap. * @param player The player to wrap.
* @param mediaItemConverter The {@link MediaItemConverter}. * @param mediaItemConverter The {@link MediaItemConverter}.
* @param controlDispatcher The {@link ControlDispatcher}.
*/ */
public SessionPlayerConnector( public SessionPlayerConnector(Player player, MediaItemConverter mediaItemConverter) {
Player player, MediaItemConverter mediaItemConverter, ControlDispatcher controlDispatcher) {
Assertions.checkNotNull(player); Assertions.checkNotNull(player);
Assertions.checkNotNull(mediaItemConverter); Assertions.checkNotNull(mediaItemConverter);
Assertions.checkNotNull(controlDispatcher);
state = PLAYER_STATE_IDLE; state = PLAYER_STATE_IDLE;
taskHandler = new Handler(player.getApplicationLooper()); taskHandler = new Handler(player.getApplicationLooper());
taskHandlerExecutor = (runnable) -> postOrRun(taskHandler, runnable); taskHandlerExecutor = (runnable) -> postOrRun(taskHandler, runnable);
ExoPlayerWrapperListener playerListener = new ExoPlayerWrapperListener();
this.player = new PlayerWrapper(playerListener, player, mediaItemConverter, controlDispatcher); this.player = new PlayerWrapper(new ExoPlayerWrapperListener(), player, mediaItemConverter);
playerCommandQueue = new PlayerCommandQueue(this.player, taskHandler); playerCommandQueue = new PlayerCommandQueue(this.player, taskHandler);
} }
/**
* Sets the {@link ControlDispatcher}.
*
* @param controlDispatcher The {@link ControlDispatcher}.
*/
public void setControlDispatcher(ControlDispatcher controlDispatcher) {
player.setControlDispatcher(controlDispatcher);
}
@Override @Override
public ListenableFuture<PlayerResult> play() { public ListenableFuture<PlayerResult> play() {
return playerCommandQueue.addCommand( return playerCommandQueue.addCommand(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment