From 098c3a010edb2461b65496b1229bd08b14b0f0d6 Mon Sep 17 00:00:00 2001 From: ibaker Date: Thu, 18 Nov 2021 12:09:51 +0000 Subject: [PATCH] Migrate the cast demo app from PlayerView to StyledPlayerView StyledPlayerControlView can't really be used on its own (like PlayerControlView was used here), so we instead use the same StyledPlayerView instance for both local and casted playback, replacing the content with a cast icon while casting. PiperOrigin-RevId: 410764338 --- .../exoplayer2/castdemo/MainActivity.java | 19 ++----- .../exoplayer2/castdemo/PlayerManager.java | 54 +++++++++---------- .../ic_baseline_cast_connected_400.xml | 20 +++++++ .../src/main/res/layout/main_activity.xml | 9 +--- 4 files changed, 51 insertions(+), 51 deletions(-) create mode 100644 demos/cast/src/main/res/drawable/ic_baseline_cast_connected_400.xml 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 ef91f29e48..172322d260 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 @@ -38,8 +38,7 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.MediaItem; -import com.google.android.exoplayer2.ui.PlayerControlView; -import com.google.android.exoplayer2.ui.PlayerView; +import com.google.android.exoplayer2.ui.StyledPlayerView; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Util; import com.google.android.gms.cast.framework.CastButtonFactory; @@ -53,8 +52,7 @@ import com.google.android.gms.dynamite.DynamiteModule; public class MainActivity extends AppCompatActivity implements OnClickListener, PlayerManager.Listener { - private PlayerView localPlayerView; - private PlayerControlView castControlView; + private StyledPlayerView playerView; private PlayerManager playerManager; private RecyclerView mediaQueueList; private MediaQueueListAdapter mediaQueueListAdapter; @@ -83,10 +81,8 @@ public class MainActivity extends AppCompatActivity setContentView(R.layout.main_activity); - localPlayerView = findViewById(R.id.local_player_view); - localPlayerView.requestFocus(); - - castControlView = findViewById(R.id.cast_control_view); + playerView = findViewById(R.id.player_view); + playerView.requestFocus(); mediaQueueList = findViewById(R.id.sample_list); ItemTouchHelper helper = new ItemTouchHelper(new RecyclerViewCallback()); @@ -114,12 +110,7 @@ public class MainActivity extends AppCompatActivity return; } playerManager = - new PlayerManager( - /* listener= */ this, - localPlayerView, - castControlView, - /* context= */ this, - castContext); + new PlayerManager(/* listener= */ this, this, playerView, /* context= */ castContext); mediaQueueList.setAdapter(mediaQueueListAdapter); } 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 54174b0c53..884a3a5cda 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 @@ -17,7 +17,7 @@ package com.google.android.exoplayer2.castdemo; import android.content.Context; import android.view.KeyEvent; -import android.view.View; +import androidx.core.content.res.ResourcesCompat; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.MediaItem; @@ -28,8 +28,9 @@ import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.TracksInfo; import com.google.android.exoplayer2.ext.cast.CastPlayer; import com.google.android.exoplayer2.ext.cast.SessionAvailabilityListener; -import com.google.android.exoplayer2.ui.PlayerControlView; import com.google.android.exoplayer2.ui.PlayerView; +import com.google.android.exoplayer2.ui.StyledPlayerControlView; +import com.google.android.exoplayer2.ui.StyledPlayerView; import com.google.android.gms.cast.framework.CastContext; import java.util.ArrayList; @@ -50,8 +51,8 @@ import java.util.ArrayList; void onUnsupportedTrack(int trackType); } - private final PlayerView localPlayerView; - private final PlayerControlView castControlView; + private final Context context; + private final StyledPlayerView playerView; private final Player localPlayer; private final CastPlayer castPlayer; private final ArrayList mediaQueue; @@ -64,32 +65,25 @@ import java.util.ArrayList; /** * Creates a new manager for {@link ExoPlayer} and {@link CastPlayer}. * - * @param listener A {@link Listener} 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 listener A {@link Listener} for queue position changes. + * @param playerView The {@link PlayerView} for playback. * @param castContext The {@link CastContext}. */ public PlayerManager( - Listener listener, - PlayerView localPlayerView, - PlayerControlView castControlView, - Context context, - CastContext castContext) { + Context context, Listener listener, StyledPlayerView playerView, CastContext castContext) { + this.context = context; this.listener = listener; - this.localPlayerView = localPlayerView; - this.castControlView = castControlView; + this.playerView = playerView; mediaQueue = new ArrayList<>(); currentItemIndex = C.INDEX_UNSET; localPlayer = new ExoPlayer.Builder(context).build(); localPlayer.addListener(this); - localPlayerView.setPlayer(localPlayer); castPlayer = new CastPlayer(castContext); castPlayer.addListener(this); castPlayer.setSessionAvailabilityListener(this); - castControlView.setPlayer(castPlayer); setCurrentPlayer(castPlayer.isCastSessionAvailable() ? castPlayer : localPlayer); } @@ -192,11 +186,7 @@ import java.util.ArrayList; * @return Whether the event was handled by the target view. */ public boolean dispatchKeyEvent(KeyEvent event) { - if (currentPlayer == localPlayer) { - return localPlayerView.dispatchKeyEvent(event); - } else /* currentPlayer == castPlayer */ { - return castControlView.dispatchKeyEvent(event); - } + return playerView.dispatchKeyEvent(event); } /** Releases the manager and the players that it holds. */ @@ -205,7 +195,7 @@ import java.util.ArrayList; mediaQueue.clear(); castPlayer.setSessionAvailabilityListener(null); castPlayer.release(); - localPlayerView.setPlayer(null); + playerView.setPlayer(null); localPlayer.release(); } @@ -270,13 +260,19 @@ import java.util.ArrayList; return; } - // View management. - if (currentPlayer == localPlayer) { - localPlayerView.setVisibility(View.VISIBLE); - castControlView.hide(); - } else /* currentPlayer == castPlayer */ { - localPlayerView.setVisibility(View.GONE); - castControlView.show(); + playerView.setPlayer(currentPlayer); + playerView.setControllerHideOnTouch(currentPlayer == localPlayer); + if (currentPlayer == castPlayer) { + playerView.setControllerShowTimeoutMs(0); + playerView.showController(); + playerView.setDefaultArtwork( + ResourcesCompat.getDrawable( + context.getResources(), + R.drawable.ic_baseline_cast_connected_400, + /* theme= */ null)); + } else { // currentPlayer == localPlayer + playerView.setControllerShowTimeoutMs(StyledPlayerControlView.DEFAULT_SHOW_TIMEOUT_MS); + playerView.setDefaultArtwork(null); } // Player state management. diff --git a/demos/cast/src/main/res/drawable/ic_baseline_cast_connected_400.xml b/demos/cast/src/main/res/drawable/ic_baseline_cast_connected_400.xml new file mode 100644 index 0000000000..e65129b686 --- /dev/null +++ b/demos/cast/src/main/res/drawable/ic_baseline_cast_connected_400.xml @@ -0,0 +1,20 @@ + + + + diff --git a/demos/cast/src/main/res/layout/main_activity.xml b/demos/cast/src/main/res/layout/main_activity.xml index 71dbcdcd9c..91f237e8ad 100644 --- a/demos/cast/src/main/res/layout/main_activity.xml +++ b/demos/cast/src/main/res/layout/main_activity.xml @@ -20,7 +20,7 @@ android:layout_height="match_parent" android:keepScreenOn="true"> - - -