Add toggles to override direct playback (#24)

Fixes #10 

Adds toggles to disable direct play of AC3 audio, ASS subtitles, and PGS
subtitles. Also a toggle to force down mixing audio to stereo.

This copies the behavior from the official client. I'm not sure if there
is a way to determine if direct playing AC3 is possible because it can
depend on devices other than the Android TV device such as a sound bar.
So it's up to the user to toggle off support if necessary.

Attribution: This PR uses on [code from the official
client](c775603df4/app/src/main/java/org/jellyfin/androidtv/util/profile/deviceProfile.kt).
This commit is contained in:
damontecres 2025-10-17 12:46:55 -04:00 committed by GitHub
parent bd4d4d5092
commit f220aeee44
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 190 additions and 10 deletions

View file

@ -313,6 +313,51 @@ sealed interface AppPreference<T> {
},
)
val Ac3Supported =
AppSwitchPreference(
title = R.string.ac3_supported,
defaultValue = true,
getter = { it.playbackPreferences.overrides.ac3Supported },
setter = { prefs, value ->
prefs.updatePlaybackOverrides { ac3Supported = value }
},
summaryOn = R.string.enabled,
summaryOff = R.string.disabled,
)
val DownMixStereo =
AppSwitchPreference(
title = R.string.downmix_stereo,
defaultValue = false,
getter = { it.playbackPreferences.overrides.downmixStereo },
setter = { prefs, value ->
prefs.updatePlaybackOverrides { downmixStereo = value }
},
summaryOn = R.string.enabled,
summaryOff = R.string.disabled,
)
val DirectPlayAss =
AppSwitchPreference(
title = R.string.direct_play_ass,
defaultValue = true,
getter = { it.playbackPreferences.overrides.directPlayAss },
setter = { prefs, value ->
prefs.updatePlaybackOverrides { directPlayAss = value }
},
summaryOn = R.string.enabled,
summaryOff = R.string.disabled,
)
val DirectPlayPgs =
AppSwitchPreference(
title = R.string.direct_play_pgs,
defaultValue = true,
getter = { it.playbackPreferences.overrides.directPlayPgs },
setter = { prefs, value ->
prefs.updatePlaybackOverrides { directPlayPgs = value }
},
summaryOn = R.string.enabled,
summaryOff = R.string.disabled,
)
val RememberSelectedTab =
AppSwitchPreference(
title = R.string.remember_selected_tab,
@ -521,6 +566,16 @@ val advancedPreferences =
AppPreference.PlaybackDebugInfo,
),
),
PreferenceGroup(
title = R.string.playback_overrides,
preferences =
listOf(
AppPreference.DownMixStereo,
AppPreference.Ac3Supported,
AppPreference.DirectPlayAss,
AppPreference.DirectPlayPgs,
),
),
PreferenceGroup(
title = R.string.updates,
preferences =

View file

@ -42,6 +42,16 @@ class AppPreferencesSerializer
skipCommercials = AppPreference.SkipCommercials.defaultValue
skipPreviews = AppPreference.SkipPreviews.defaultValue
skipRecaps = AppPreference.SkipRecaps.defaultValue
overrides =
PlaybackOverrides
.newBuilder()
.apply {
ac3Supported = AppPreference.Ac3Supported.defaultValue
downmixStereo = AppPreference.DownMixStereo.defaultValue
directPlayAss = AppPreference.DirectPlayAss.defaultValue
directPlayPgs = AppPreference.DirectPlayPgs.defaultValue
}.build()
}.build()
homePagePreferences =
HomePagePreferences
@ -81,6 +91,11 @@ inline fun AppPreferences.updatePlaybackPreferences(block: PlaybackPreferences.B
playbackPreferences = playbackPreferences.toBuilder().apply(block).build()
}
inline fun AppPreferences.updatePlaybackOverrides(block: PlaybackOverrides.Builder.() -> Unit): AppPreferences =
updatePlaybackPreferences {
overrides = overrides.toBuilder().apply(block).build()
}
inline fun AppPreferences.updateHomePagePreferences(block: HomePagePreferences.Builder.() -> Unit): AppPreferences =
update {
homePagePreferences = homePagePreferences.toBuilder().apply(block).build()