refactor(tv): use media3 track type instead of mpv track type for track selection dialog

This commit is contained in:
Jarne Demeulemeester 2024-01-01 11:28:42 +01:00
parent a6ebb89b78
commit db5eab1ab2
No known key found for this signature in database
GPG key ID: 1E5C6AFBD622E9F5
2 changed files with 15 additions and 18 deletions

View file

@ -40,7 +40,6 @@ import dev.jdtech.jellyfin.core.R
import dev.jdtech.jellyfin.destinations.VideoPlayerTrackSelectorDialogDestination import dev.jdtech.jellyfin.destinations.VideoPlayerTrackSelectorDialogDestination
import dev.jdtech.jellyfin.models.PlayerItem import dev.jdtech.jellyfin.models.PlayerItem
import dev.jdtech.jellyfin.models.Track import dev.jdtech.jellyfin.models.Track
import dev.jdtech.jellyfin.mpv.TrackType
import dev.jdtech.jellyfin.ui.components.player.VideoPlayerControlsLayout import dev.jdtech.jellyfin.ui.components.player.VideoPlayerControlsLayout
import dev.jdtech.jellyfin.ui.components.player.VideoPlayerMediaButton import dev.jdtech.jellyfin.ui.components.player.VideoPlayerMediaButton
import dev.jdtech.jellyfin.ui.components.player.VideoPlayerMediaTitle import dev.jdtech.jellyfin.ui.components.player.VideoPlayerMediaTitle
@ -122,24 +121,22 @@ fun PlayerScreen(
when (result) { when (result) {
is NavResult.Canceled -> Unit is NavResult.Canceled -> Unit
is NavResult.Value -> { is NavResult.Value -> {
val type = when (result.value.trackType) { val trackType = result.value.trackType
TrackType.VIDEO -> C.TRACK_TYPE_VIDEO val index = result.value.index
TrackType.AUDIO -> C.TRACK_TYPE_AUDIO
TrackType.SUBTITLE -> C.TRACK_TYPE_TEXT
}
if (result.value.index == -1) { if (result.value.index == -1) {
viewModel.player.trackSelectionParameters = viewModel.player.trackSelectionParameters viewModel.player.trackSelectionParameters = viewModel.player.trackSelectionParameters
.buildUpon() .buildUpon()
.clearOverridesOfType(type) .clearOverridesOfType(trackType)
.setTrackTypeDisabled(type, true) .setTrackTypeDisabled(trackType, true)
.build() .build()
} else { } else {
viewModel.player.trackSelectionParameters = viewModel.player.trackSelectionParameters viewModel.player.trackSelectionParameters = viewModel.player.trackSelectionParameters
.buildUpon() .buildUpon()
.setOverrideForType( .setOverrideForType(
TrackSelectionOverride(viewModel.player.currentTracks.groups[result.value.index].mediaTrackGroup, 0), TrackSelectionOverride(viewModel.player.currentTracks.groups[index].mediaTrackGroup, 0),
) )
.setTrackTypeDisabled(type, false) .setTrackTypeDisabled(trackType, false)
.build() .build()
} }
} }
@ -254,7 +251,7 @@ fun VideoPlayerControls(
isPlaying = isPlaying, isPlaying = isPlaying,
onClick = { onClick = {
val tracks = getTracks(player, C.TRACK_TYPE_AUDIO) val tracks = getTracks(player, C.TRACK_TYPE_AUDIO)
navigator.navigate(VideoPlayerTrackSelectorDialogDestination(TrackType.AUDIO, tracks)) navigator.navigate(VideoPlayerTrackSelectorDialogDestination(C.TRACK_TYPE_AUDIO, tracks))
}, },
) )
VideoPlayerMediaButton( VideoPlayerMediaButton(
@ -263,7 +260,7 @@ fun VideoPlayerControls(
isPlaying = isPlaying, isPlaying = isPlaying,
onClick = { onClick = {
val tracks = getTracks(player, C.TRACK_TYPE_TEXT) val tracks = getTracks(player, C.TRACK_TYPE_TEXT)
navigator.navigate(VideoPlayerTrackSelectorDialogDestination(TrackType.SUBTITLE, tracks)) navigator.navigate(VideoPlayerTrackSelectorDialogDestination(C.TRACK_TYPE_TEXT, tracks))
}, },
) )
} }

View file

@ -18,6 +18,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.media3.common.C
import androidx.tv.foundation.lazy.list.TvLazyColumn import androidx.tv.foundation.lazy.list.TvLazyColumn
import androidx.tv.foundation.lazy.list.items import androidx.tv.foundation.lazy.list.items
import androidx.tv.material3.Border import androidx.tv.material3.Border
@ -32,7 +33,6 @@ import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.result.EmptyResultBackNavigator import com.ramcosta.composedestinations.result.EmptyResultBackNavigator
import com.ramcosta.composedestinations.result.ResultBackNavigator import com.ramcosta.composedestinations.result.ResultBackNavigator
import dev.jdtech.jellyfin.models.Track import dev.jdtech.jellyfin.models.Track
import dev.jdtech.jellyfin.mpv.TrackType
import dev.jdtech.jellyfin.ui.theme.FindroidTheme import dev.jdtech.jellyfin.ui.theme.FindroidTheme
import dev.jdtech.jellyfin.ui.theme.spacings import dev.jdtech.jellyfin.ui.theme.spacings
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
@ -41,7 +41,7 @@ import dev.jdtech.jellyfin.player.video.R as PlayerVideoR
@Parcelize @Parcelize
data class VideoPlayerTrackSelectorDialogResult( data class VideoPlayerTrackSelectorDialogResult(
val trackType: TrackType, val trackType: @C.TrackType Int,
val index: Int, val index: Int,
) : Parcelable ) : Parcelable
@ -49,13 +49,13 @@ data class VideoPlayerTrackSelectorDialogResult(
@Destination(style = BaseDialogStyle::class) @Destination(style = BaseDialogStyle::class)
@Composable @Composable
fun VideoPlayerTrackSelectorDialog( fun VideoPlayerTrackSelectorDialog(
trackType: TrackType, trackType: @C.TrackType Int,
tracks: Array<Track>, tracks: Array<Track>,
resultNavigator: ResultBackNavigator<VideoPlayerTrackSelectorDialogResult>, resultNavigator: ResultBackNavigator<VideoPlayerTrackSelectorDialogResult>,
) { ) {
val dialogTitle = when (trackType) { val dialogTitle = when (trackType) {
TrackType.AUDIO -> PlayerVideoR.string.select_audio_track C.TRACK_TYPE_AUDIO -> PlayerVideoR.string.select_audio_track
TrackType.SUBTITLE -> PlayerVideoR.string.select_subtile_track C.TRACK_TYPE_TEXT -> PlayerVideoR.string.select_subtile_track
else -> CoreR.string.unknown_error else -> CoreR.string.unknown_error
} }
Surface { Surface {
@ -124,7 +124,7 @@ fun VideoPlayerTrackSelectorDialog(
private fun VideoPlayerTrackSelectorDialogPreview() { private fun VideoPlayerTrackSelectorDialogPreview() {
FindroidTheme { FindroidTheme {
VideoPlayerTrackSelectorDialog( VideoPlayerTrackSelectorDialog(
trackType = TrackType.AUDIO, trackType = C.TRACK_TYPE_AUDIO,
tracks = arrayOf( tracks = arrayOf(
Track( Track(
id = 0, id = 0,