diff --git a/extensions/media2/src/androidTest/java/com/google/android/exoplayer2/ext/media2/SessionPlayerConnectorTest.java b/extensions/media2/src/androidTest/java/com/google/android/exoplayer2/ext/media2/SessionPlayerConnectorTest.java index 45a0c59645..b80cbe5a5f 100644 --- a/extensions/media2/src/androidTest/java/com/google/android/exoplayer2/ext/media2/SessionPlayerConnectorTest.java +++ b/extensions/media2/src/androidTest/java/com/google/android/exoplayer2/ext/media2/SessionPlayerConnectorTest.java @@ -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(); } diff --git a/extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/PlayerWrapper.java b/extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/PlayerWrapper.java index 65bffb26be..09e0325e93 100644 --- a/extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/PlayerWrapper.java +++ b/extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/PlayerWrapper.java @@ -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 media2Playlist; private final List 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); } diff --git a/extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/SessionPlayerConnector.java b/extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/SessionPlayerConnector.java index 2bb762a971..1c6cc151c9 100644 --- a/extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/SessionPlayerConnector.java +++ b/extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/SessionPlayerConnector.java @@ -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 play() { return playerCommandQueue.addCommand(