diff --git a/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/DefaultReceiverPlayerManager.java b/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/DefaultReceiverPlayerManager.java index f4678fc541..563efea11f 100644 --- a/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/DefaultReceiverPlayerManager.java +++ b/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/DefaultReceiverPlayerManager.java @@ -63,7 +63,7 @@ import java.util.ArrayList; private final SimpleExoPlayer exoPlayer; private final CastPlayer castPlayer; private final ArrayList mediaQueue; - private final QueuePositionListener queuePositionListener; + private final QueueChangesListener queueChangesListener; private final ConcatenatingMediaSource concatenatingMediaSource; private boolean castMediaQueueCreationPending; @@ -71,32 +71,21 @@ import java.util.ArrayList; private Player currentPlayer; /** - * @param queuePositionListener A {@link QueuePositionListener} for queue position changes. + * Creates a new manager for {@link SimpleExoPlayer} and {@link CastPlayer}. + * + * @param queueChangesListener A {@link QueueChangesListener} for queue position changes. * @param localPlayerView The {@link PlayerView} for local playback. * @param castControlView The {@link PlayerControlView} to control remote playback. * @param context A {@link Context}. * @param castContext The {@link CastContext}. */ - public static DefaultReceiverPlayerManager createPlayerManager( - QueuePositionListener queuePositionListener, + public DefaultReceiverPlayerManager( + QueueChangesListener queueChangesListener, PlayerView localPlayerView, PlayerControlView castControlView, Context context, CastContext castContext) { - DefaultReceiverPlayerManager defaultReceiverPlayerManager = - new DefaultReceiverPlayerManager( - queuePositionListener, localPlayerView, castControlView, context, castContext); - defaultReceiverPlayerManager.init(); - return defaultReceiverPlayerManager; - } - - private DefaultReceiverPlayerManager( - QueuePositionListener queuePositionListener, - PlayerView localPlayerView, - PlayerControlView castControlView, - Context context, - CastContext castContext) { - this.queuePositionListener = queuePositionListener; + this.queueChangesListener = queueChangesListener; this.localPlayerView = localPlayerView; this.castControlView = castControlView; mediaQueue = new ArrayList<>(); @@ -113,6 +102,8 @@ import java.util.ArrayList; castPlayer.addListener(this); castPlayer.setSessionAvailabilityListener(this); castControlView.setPlayer(castPlayer); + + setCurrentPlayer(castPlayer.isCastSessionAvailable() ? castPlayer : exoPlayer); } // Queue manipulation methods. @@ -287,10 +278,6 @@ import java.util.ArrayList; // Internal methods. - private void init() { - setCurrentPlayer(castPlayer.isCastSessionAvailable() ? castPlayer : exoPlayer); - } - private void updateCurrentItemIndex() { int playbackState = currentPlayer.getPlaybackState(); maybeSetCurrentItemAndNotify( @@ -372,7 +359,7 @@ import java.util.ArrayList; if (this.currentItemIndex != currentItemIndex) { int oldIndex = this.currentItemIndex; this.currentItemIndex = currentItemIndex; - queuePositionListener.onQueuePositionChanged(oldIndex, currentItemIndex); + queueChangesListener.onQueuePositionChanged(oldIndex, currentItemIndex); } } diff --git a/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/MainActivity.java b/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/MainActivity.java index 058adf7c9c..46e8273947 100644 --- a/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/MainActivity.java +++ b/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/MainActivity.java @@ -49,7 +49,7 @@ import java.util.Collections; * Cast extension. */ public class MainActivity extends AppCompatActivity - implements OnClickListener, PlayerManager.QueuePositionListener { + implements OnClickListener, PlayerManager.QueueChangesListener { private final MediaItem.Builder mediaItemBuilder; @@ -121,8 +121,8 @@ public class MainActivity extends AppCompatActivity switch (applicationId) { case CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID: playerManager = - DefaultReceiverPlayerManager.createPlayerManager( - /* queuePositionListener= */ this, + new DefaultReceiverPlayerManager( + /* queueChangesListener= */ this, localPlayerView, castControlView, /* context= */ this, @@ -162,7 +162,7 @@ public class MainActivity extends AppCompatActivity .show(); } - // PlayerManager.QueuePositionListener implementation. + // PlayerManager.QueueChangesListener implementation. @Override public void onQueuePositionChanged(int previousIndex, int newIndex) { @@ -174,6 +174,11 @@ public class MainActivity extends AppCompatActivity } } + @Override + public void onQueueContentsExternallyChanged() { + mediaQueueListAdapter.notifyDataSetChanged(); + } + // Internal methods. private View buildSampleListView() { diff --git a/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/PlayerManager.java b/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/PlayerManager.java index c56f0eb855..184dfe29b3 100644 --- a/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/PlayerManager.java +++ b/demos/cast/src/main/java/com/google/android/exoplayer2/castdemo/PlayerManager.java @@ -22,14 +22,14 @@ import com.google.android.exoplayer2.ext.cast.MediaItem; /** Manages the players in the Cast demo app. */ interface PlayerManager { - /** Listener for changes in the media queue playback position. */ - interface QueuePositionListener { + /** Listener for changes in the media queue. */ + interface QueueChangesListener { - /** - * Called when the currently played item of the media queue changes. - */ + /** Called when the currently played item of the media queue changes. */ void onQueuePositionChanged(int previousIndex, int newIndex); + /** Called when the media queue changes due to modifications not caused by this manager. */ + void onQueueContentsExternallyChanged(); } /** Redirects the given {@code keyEvent} to the active player. */