Skip to content

Commit a7592b9

Browse files
committed
Use the Cast MediaRouteSelector if available
1 parent 82eb433 commit a7592b9

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

pillarbox-demo/src/main/java/ch/srgssr/pillarbox/demo/ui/showcases/integrations/cast/CastShowcase.kt

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ import androidx.core.content.ContextCompat
2020
import androidx.lifecycle.viewmodel.compose.viewModel
2121
import androidx.media3.common.util.RepeatModeUtil
2222
import androidx.media3.ui.PlayerView
23-
import androidx.mediarouter.media.MediaControlIntent
24-
import androidx.mediarouter.media.MediaRouteSelector
2523
import ch.srgssr.media.maestro.MediaRouteButton
2624
import ch.srgssr.pillarbox.cast.PillarboxCastPlayer
2725
import ch.srgssr.pillarbox.demo.R
@@ -65,10 +63,7 @@ fun CastShowcase() {
6563

6664
MediaRouteButton(
6765
modifier = Modifier.align(Alignment.TopEnd),
68-
routeSelector = MediaRouteSelector.Builder()
69-
.addControlCategory(MediaControlIntent.CATEGORY_LIVE_VIDEO)
70-
.addControlCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK)
71-
.build(),
66+
routeSelector = mainViewModel.routeSelector,
7267
colors = IconButtonColors(
7368
containerColor = ComposeColor.Transparent,
7469
contentColor = ComposeColor.White,

pillarbox-demo/src/main/java/ch/srgssr/pillarbox/demo/ui/showcases/integrations/cast/CastShowcaseViewModel.kt

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ import android.app.Application
88
import androidx.lifecycle.AndroidViewModel
99
import androidx.lifecycle.viewModelScope
1010
import androidx.media3.common.Player
11+
import androidx.mediarouter.media.MediaControlIntent
12+
import androidx.mediarouter.media.MediaRouteSelector
13+
import ch.srgssr.androidx.mediarouter.compose.MediaRouteButton
1114
import ch.srgssr.pillarbox.cast.PillarboxCastPlayer
1215
import ch.srgssr.pillarbox.cast.getCastContext
1316
import ch.srgssr.pillarbox.cast.isCastSessionAvailableAsFlow
@@ -29,23 +32,31 @@ import kotlinx.coroutines.flow.stateIn
2932
* @param application The application context.
3033
*/
3134
class CastShowcaseViewModel(application: Application) : AndroidViewModel(application) {
35+
private val castContext = application.getCastContext()
3236
private val castPlayer = PillarboxCastPlayer(application)
3337
private val localPlayer = PillarboxExoPlayer(application)
3438

3539
/**
3640
* The current player, it can be either a [PillarboxCastPlayer] or a [PillarboxExoPlayer].
3741
*/
38-
val currentPlayer = castPlayer.isCastSessionAvailableAsFlow().map {
39-
if (it) castPlayer else localPlayer
40-
}
42+
val currentPlayer = castPlayer.isCastSessionAvailableAsFlow()
43+
.map { if (it) castPlayer else localPlayer }
4144
.distinctUntilChanged()
4245
.onEach { switchPlayer(it) }
4346
.stateIn(
4447
viewModelScope,
4548
SharingStarted.WhileSubscribed(5_000),
46-
if (application.getCastContext().isConnected()) castPlayer else localPlayer
49+
if (castContext.isConnected()) castPlayer else localPlayer
4750
)
4851

52+
/**
53+
* The [MediaRouteSelector] to use on the [MediaRouteButton].
54+
*/
55+
val routeSelector = castContext.mergedSelector ?: MediaRouteSelector.Builder()
56+
.addControlCategory(MediaControlIntent.CATEGORY_LIVE_VIDEO)
57+
.addControlCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK)
58+
.build()
59+
4960
override fun onCleared() {
5061
castPlayer.release()
5162
localPlayer.release()

0 commit comments

Comments
 (0)