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
This commit is contained in:
olly 2020-09-02 09:17:09 +01:00 committed by Oliver Woodman
parent 56e622a2e5
commit b79e2e069f
3 changed files with 29 additions and 20 deletions

View file

@ -185,17 +185,20 @@ public class SessionPlayerConnectorTest {
}
};
SimpleExoPlayer simpleExoPlayer = null;
SessionPlayerConnector playerConnector = null;
try {
simpleExoPlayer =
new SimpleExoPlayer.Builder(context)
.setLooper(Looper.myLooper())
.build();
try (SessionPlayerConnector player =
new SessionPlayerConnector(
simpleExoPlayer, new DefaultMediaItemConverter(), controlDispatcher)) {
assertPlayerResult(player.play(), RESULT_INFO_SKIPPED);
}
playerConnector =
new SessionPlayerConnector(simpleExoPlayer, new DefaultMediaItemConverter());
playerConnector.setControlDispatcher(controlDispatcher);
assertPlayerResult(playerConnector.play(), RESULT_INFO_SKIPPED);
} finally {
if (playerConnector != null) {
playerConnector.close();
}
if (simpleExoPlayer != null) {
simpleExoPlayer.release();
}

View file

@ -27,6 +27,7 @@ import androidx.media2.common.MediaMetadata;
import androidx.media2.common.SessionPlayer;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ControlDispatcher;
import com.google.android.exoplayer2.DefaultControlDispatcher;
import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.PlaybackParameters;
@ -108,7 +109,6 @@ import java.util.List;
private final Player player;
private final MediaItemConverter mediaItemConverter;
private final ControlDispatcher controlDispatcher;
private final ComponentListener componentListener;
@Nullable private MediaMetadata playlistMetadata;
@ -117,6 +117,7 @@ import java.util.List;
private final List<androidx.media2.common.MediaItem> media2Playlist;
private final List<MediaItem> exoPlayerPlaylist;
private ControlDispatcher controlDispatcher;
private boolean prepared;
private boolean rebuffering;
private int currentWindowIndex;
@ -128,18 +129,13 @@ import java.util.List;
* @param listener A {@link Listener}.
* @param player The {@link Player}.
* @param mediaItemConverter The {@link MediaItemConverter}.
* @param controlDispatcher A {@link ControlDispatcher}.
*/
public PlayerWrapper(
Listener listener,
Player player,
MediaItemConverter mediaItemConverter,
ControlDispatcher controlDispatcher) {
public PlayerWrapper(Listener listener, Player player, MediaItemConverter mediaItemConverter) {
this.listener = listener;
this.player = player;
this.mediaItemConverter = mediaItemConverter;
this.controlDispatcher = controlDispatcher;
controlDispatcher = new DefaultControlDispatcher();
componentListener = new ComponentListener();
player.addListener(componentListener);
@Nullable Player.AudioComponent audioComponent = player.getAudioComponent();
@ -160,6 +156,10 @@ import java.util.List;
updatePlaylist(player.getCurrentTimeline());
}
public void setControlDispatcher(ControlDispatcher controlDispatcher) {
this.controlDispatcher = controlDispatcher;
}
public boolean setMediaItem(androidx.media2.common.MediaItem media2MediaItem) {
return setPlaylist(Collections.singletonList(media2MediaItem), /* metadata= */ null);
}

View file

@ -92,7 +92,7 @@ public final class SessionPlayerConnector extends SessionPlayer {
* @param player The player to wrap.
*/
public SessionPlayerConnector(Player player) {
this(player, new DefaultMediaItemConverter(), new DefaultControlDispatcher());
this(player, new DefaultMediaItemConverter());
}
/**
@ -100,22 +100,28 @@ public final class SessionPlayerConnector extends SessionPlayer {
*
* @param player The player to wrap.
* @param mediaItemConverter The {@link MediaItemConverter}.
* @param controlDispatcher The {@link ControlDispatcher}.
*/
public SessionPlayerConnector(
Player player, MediaItemConverter mediaItemConverter, ControlDispatcher controlDispatcher) {
public SessionPlayerConnector(Player player, MediaItemConverter mediaItemConverter) {
Assertions.checkNotNull(player);
Assertions.checkNotNull(mediaItemConverter);
Assertions.checkNotNull(controlDispatcher);
state = PLAYER_STATE_IDLE;
taskHandler = new Handler(player.getApplicationLooper());
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);
}
/**
* Sets the {@link ControlDispatcher}.
*
* @param controlDispatcher The {@link ControlDispatcher}.
*/
public void setControlDispatcher(ControlDispatcher controlDispatcher) {
player.setControlDispatcher(controlDispatcher);
}
@Override
public ListenableFuture<PlayerResult> play() {
return playerCommandQueue.addCommand(