1717
1818import android .content .Context ;
1919import android .view .KeyEvent ;
20- import android . view . View ;
20+ import androidx . core . content . res . ResourcesCompat ;
2121import com .google .android .exoplayer2 .C ;
2222import com .google .android .exoplayer2 .ExoPlayer ;
2323import com .google .android .exoplayer2 .MediaItem ;
2828import com .google .android .exoplayer2 .TracksInfo ;
2929import com .google .android .exoplayer2 .ext .cast .CastPlayer ;
3030import com .google .android .exoplayer2 .ext .cast .SessionAvailabilityListener ;
31- import com .google .android .exoplayer2 .ui .PlayerControlView ;
3231import com .google .android .exoplayer2 .ui .PlayerView ;
32+ import com .google .android .exoplayer2 .ui .StyledPlayerControlView ;
33+ import com .google .android .exoplayer2 .ui .StyledPlayerView ;
3334import com .google .android .gms .cast .framework .CastContext ;
3435import java .util .ArrayList ;
3536
@@ -50,8 +51,8 @@ interface Listener {
5051 void onUnsupportedTrack (int trackType );
5152 }
5253
53- private final PlayerView localPlayerView ;
54- private final PlayerControlView castControlView ;
54+ private final Context context ;
55+ private final StyledPlayerView playerView ;
5556 private final Player localPlayer ;
5657 private final CastPlayer castPlayer ;
5758 private final ArrayList <MediaItem > mediaQueue ;
@@ -64,32 +65,25 @@ interface Listener {
6465 /**
6566 * Creates a new manager for {@link ExoPlayer} and {@link CastPlayer}.
6667 *
67- * @param listener A {@link Listener} for queue position changes.
68- * @param localPlayerView The {@link PlayerView} for local playback.
69- * @param castControlView The {@link PlayerControlView} to control remote playback.
7068 * @param context A {@link Context}.
69+ * @param listener A {@link Listener} for queue position changes.
70+ * @param playerView The {@link PlayerView} for playback.
7171 * @param castContext The {@link CastContext}.
7272 */
7373 public PlayerManager (
74- Listener listener ,
75- PlayerView localPlayerView ,
76- PlayerControlView castControlView ,
77- Context context ,
78- CastContext castContext ) {
74+ Context context , Listener listener , StyledPlayerView playerView , CastContext castContext ) {
75+ this .context = context ;
7976 this .listener = listener ;
80- this .localPlayerView = localPlayerView ;
81- this .castControlView = castControlView ;
77+ this .playerView = playerView ;
8278 mediaQueue = new ArrayList <>();
8379 currentItemIndex = C .INDEX_UNSET ;
8480
8581 localPlayer = new ExoPlayer .Builder (context ).build ();
8682 localPlayer .addListener (this );
87- localPlayerView .setPlayer (localPlayer );
8883
8984 castPlayer = new CastPlayer (castContext );
9085 castPlayer .addListener (this );
9186 castPlayer .setSessionAvailabilityListener (this );
92- castControlView .setPlayer (castPlayer );
9387
9488 setCurrentPlayer (castPlayer .isCastSessionAvailable () ? castPlayer : localPlayer );
9589 }
@@ -192,11 +186,7 @@ public boolean moveItem(MediaItem item, int newIndex) {
192186 * @return Whether the event was handled by the target view.
193187 */
194188 public boolean dispatchKeyEvent (KeyEvent event ) {
195- if (currentPlayer == localPlayer ) {
196- return localPlayerView .dispatchKeyEvent (event );
197- } else /* currentPlayer == castPlayer */ {
198- return castControlView .dispatchKeyEvent (event );
199- }
189+ return playerView .dispatchKeyEvent (event );
200190 }
201191
202192 /** Releases the manager and the players that it holds. */
@@ -205,7 +195,7 @@ public void release() {
205195 mediaQueue .clear ();
206196 castPlayer .setSessionAvailabilityListener (null );
207197 castPlayer .release ();
208- localPlayerView .setPlayer (null );
198+ playerView .setPlayer (null );
209199 localPlayer .release ();
210200 }
211201
@@ -270,13 +260,19 @@ private void setCurrentPlayer(Player currentPlayer) {
270260 return ;
271261 }
272262
273- // View management.
274- if (currentPlayer == localPlayer ) {
275- localPlayerView .setVisibility (View .VISIBLE );
276- castControlView .hide ();
277- } else /* currentPlayer == castPlayer */ {
278- localPlayerView .setVisibility (View .GONE );
279- castControlView .show ();
263+ playerView .setPlayer (currentPlayer );
264+ playerView .setControllerHideOnTouch (currentPlayer == localPlayer );
265+ if (currentPlayer == castPlayer ) {
266+ playerView .setControllerShowTimeoutMs (0 );
267+ playerView .showController ();
268+ playerView .setDefaultArtwork (
269+ ResourcesCompat .getDrawable (
270+ context .getResources (),
271+ R .drawable .ic_baseline_cast_connected_400 ,
272+ /* theme= */ null ));
273+ } else { // currentPlayer == localPlayer
274+ playerView .setControllerShowTimeoutMs (StyledPlayerControlView .DEFAULT_SHOW_TIMEOUT_MS );
275+ playerView .setDefaultArtwork (null );
280276 }
281277
282278 // Player state management.
0 commit comments