feat(phone): disable audio track type

And add back the option to disable the subtitle track type
This commit is contained in:
Jarne Demeulemeester 2023-12-31 00:44:39 +01:00
parent e3ce8f5252
commit 3bcd652e32
No known key found for this signature in database
GPG key ID: 1E5C6AFBD622E9F5
4 changed files with 35 additions and 13 deletions

View file

@ -11,7 +11,6 @@ import dev.jdtech.jellyfin.player.video.R
import dev.jdtech.jellyfin.viewmodels.PlayerActivityViewModel
import java.lang.IllegalStateException
// TODO add option to disable track type
class TrackSelectionDialogFragment(
private val type: TrackType,
private val viewModel: PlayerActivityViewModel,
@ -24,12 +23,12 @@ class TrackSelectionDialogFragment(
val tracksGroups = viewModel.player.currentTracks.groups.filter { it.type == C.TRACK_TYPE_AUDIO }
builder.setTitle(getString(R.string.select_audio_track))
.setSingleChoiceItems(
tracksGroups.getTrackNames(),
tracksGroups.indexOfFirst { it.isSelected },
arrayOf(getString(R.string.none)) + tracksGroups.getTrackNames(), // Add "None" at the top of the list
tracksGroups.indexOfFirst { it.isSelected } + 1, // Add 1 to the index to account for the "None" item
) { dialog, which ->
viewModel.switchToTrack(
TrackType.AUDIO,
tracksGroups[which],
which - 1, // Minus 1 to get the correct group without the "None" item. "None" becomes -1
)
dialog.dismiss()
}
@ -42,12 +41,12 @@ class TrackSelectionDialogFragment(
val tracksGroups = viewModel.player.currentTracks.groups.filter { it.type == C.TRACK_TYPE_TEXT }
builder.setTitle(getString(R.string.select_subtile_track))
.setSingleChoiceItems(
tracksGroups.getTrackNames(),
tracksGroups.indexOfFirst { it.isSelected },
arrayOf(getString(R.string.none)) + tracksGroups.getTrackNames(),
tracksGroups.indexOfFirst { it.isSelected } + 1,
) { dialog, which ->
viewModel.switchToTrack(
TrackType.SUBTITLE,
tracksGroups[which],
which - 1,
)
dialog.dismiss()
}

View file

@ -49,6 +49,7 @@ class MPVPlayer(
context: Context,
private val requestAudioFocus: Boolean,
private val appPreferences: AppPreferences,
private var trackSelectionParameters: TrackSelectionParameters = TrackSelectionParameters.Builder(context).build(),
) : BasePlayer(), MPVLib.EventObserver, AudioManager.OnAudioFocusChangeListener {
private val audioManager: AudioManager by lazy { context.getSystemService()!! }
@ -96,8 +97,8 @@ class MPVPlayer(
MPVLib.setOptionString("sub-use-margins", "no")
// Language
MPVLib.setOptionString("alang", appPreferences.preferredAudioLanguage)
MPVLib.setOptionString("slang", appPreferences.preferredSubtitleLanguage)
MPVLib.setOptionString("alang", trackSelectionParameters.preferredAudioLanguages.firstOrNull() ?: "")
MPVLib.setOptionString("slang", trackSelectionParameters.preferredTextLanguages.firstOrNull() ?: "")
// Other options
MPVLib.setOptionString("force-window", "no")
@ -175,7 +176,6 @@ class MPVPlayer(
private var currentCacheDurationMs: Long? = null
private var initialCommands = mutableListOf<Array<String>>()
private var initialSeekTo: Long = 0L
private var trackSelectionParameters: TrackSelectionParameters = TrackSelectionParameters.Builder(context).build()
// mpv events
override fun eventProperty(property: String) {
@ -949,6 +949,11 @@ class MPVPlayer(
override fun setTrackSelectionParameters(parameters: TrackSelectionParameters) {
trackSelectionParameters = parameters
// Disabled track types
val disabledTrackTypes = parameters.disabledTrackTypes.map { TrackType.fromMedia3TrackType(it) }
// Overrides
val notOverriddenTypes = mutableSetOf(TrackType.VIDEO, TrackType.AUDIO, TrackType.SUBTITLE)
for (override in parameters.overrides) {
val trackType = TrackType.fromMedia3TrackType(override.key.type)
@ -958,7 +963,11 @@ class MPVPlayer(
selectTrack(trackType, id)
}
for (notOverriddenType in notOverriddenTypes) {
selectTrack(notOverriddenType, "auto")
if (notOverriddenType in disabledTrackTypes) {
selectTrack(notOverriddenType, "no")
} else {
selectTrack(notOverriddenType, "auto")
}
}
}

View file

@ -11,7 +11,7 @@ import androidx.media3.common.C
import androidx.media3.common.MediaItem
import androidx.media3.common.MediaMetadata
import androidx.media3.common.Player
import androidx.media3.common.Tracks
import androidx.media3.common.TrackSelectionParameters
import androidx.media3.exoplayer.DefaultRenderersFactory
import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.exoplayer.trackselection.DefaultTrackSelector
@ -88,10 +88,15 @@ constructor(
init {
if (appPreferences.playerMpv) {
val trackSelectionParameters = TrackSelectionParameters.Builder(application)
.setPreferredAudioLanguage(appPreferences.preferredAudioLanguage)
.setPreferredTextLanguage(appPreferences.preferredSubtitleLanguage)
.build()
player = MPVPlayer(
application,
false,
appPreferences,
trackSelectionParameters,
)
} else {
val renderersFactory =
@ -310,8 +315,16 @@ constructor(
releasePlayer()
}
fun switchToTrack(trackType: TrackType, tracksGroup: Tracks.Group) {
fun switchToTrack(trackType: TrackType, index: Int) {
if (player is MPVPlayer) {
// Index -1 equals disable track
if (index == -1) {
player.selectTrack(trackType, id = "no")
return
}
// Get track to select based on index
val tracksGroup = player.currentTracks.groups.filter { TrackType.fromMedia3TrackType(it.type) == trackType }[index]
val format = tracksGroup.mediaTrackGroup.getFormat(0)
if (format.id == null) {
return

View file

@ -4,6 +4,7 @@
<string name="select_playback_speed">Select playback speed</string>
<string name="select_a_version">"Select a version"</string>
<string name="external">External</string>
<string name="none">None</string>
<string name="player_controls_picture_in_picture">Enter picture-in-picture</string>
<string name="player_controls_lock">Locks the player</string>
<string name="player_controls_skip_back">Skip back</string>