feat(phone): disable audio track type
And add back the option to disable the subtitle track type
This commit is contained in:
parent
e3ce8f5252
commit
3bcd652e32
4 changed files with 35 additions and 13 deletions
|
@ -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()
|
||||
}
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in a new issue