Skip to content

Commit 62b9df7

Browse files
fix: correctly use preferred audio language
1 parent b3d0c3e commit 62b9df7

1 file changed

Lines changed: 37 additions & 4 deletions

File tree

android/src/main/kotlin/project/pipepipe/app/service/PlaybackService.kt

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ class PlaybackService : MediaLibraryService() {
5555
// Skip silence setting listener
5656
private var skipSilenceListener: SettingsListener? = null
5757

58+
// Audio language setting listener
59+
private var audioLanguageListener: SettingsListener? = null
60+
5861
// Retry mechanism for 403 errors
5962
private data class RetryState(
6063
var retryCount: Int = 0,
@@ -173,15 +176,24 @@ class PlaybackService : MediaLibraryService() {
173176
// Restore saved playback speed and pitch
174177
playbackParameters = PlaybackParameters(savedSpeed, savedPitch)
175178

176-
// Apply saved caption preference
179+
// Apply saved caption and audio language preferences
177180
val savedLanguage = SharedContext.settingsManager.getString("caption_user_set_key", "")
181+
val savedAudioLanguage = SharedContext.settingsManager.getString("preferred_audio_language_key", "original")
182+
val builder = trackSelectionParameters.buildUpon()
183+
178184
if (savedLanguage.isNotEmpty()) {
179-
trackSelectionParameters = trackSelectionParameters.buildUpon()
180-
.setPreferredTextLanguages(savedLanguage)
185+
builder.setPreferredTextLanguages(savedLanguage)
181186
.setTrackTypeDisabled(C.TRACK_TYPE_TEXT, false)
182-
.build()
183187
}
184188

189+
// Always set ROLE_FLAG_MAIN as default, then override if specific language is set
190+
builder.setPreferredAudioRoleFlags(C.ROLE_FLAG_MAIN)
191+
if (savedAudioLanguage != "original" && savedAudioLanguage.isNotEmpty()) {
192+
builder.setPreferredAudioLanguage(savedAudioLanguage)
193+
}
194+
195+
trackSelectionParameters = builder.build()
196+
185197
addListener(createPlayerListener())
186198
}
187199

@@ -434,6 +446,23 @@ class PlaybackService : MediaLibraryService() {
434446
}
435447
}
436448

449+
// Monitor audio language preference changes
450+
audioLanguageListener = SharedContext.settingsManager.addStringListener(
451+
"preferred_audio_language_key",
452+
"original"
453+
) { language ->
454+
val builder = player.trackSelectionParameters.buildUpon()
455+
// Always set ROLE_FLAG_MAIN as default
456+
builder.setPreferredAudioRoleFlags(C.ROLE_FLAG_MAIN)
457+
// Override with specific language if set, otherwise clear it
458+
if (language != "original" && language.isNotEmpty()) {
459+
builder.setPreferredAudioLanguage(language)
460+
} else {
461+
builder.setPreferredAudioLanguage(null)
462+
}
463+
player.trackSelectionParameters = builder.build()
464+
}
465+
437466
// Monitor history changes for Android Auto
438467
serviceScope.launch {
439468
SharedContext.historyChanged.collect {
@@ -480,6 +509,10 @@ class PlaybackService : MediaLibraryService() {
480509
skipSilenceListener?.deactivate()
481510
skipSilenceListener = null
482511

512+
// Clean up audio language listener
513+
audioLanguageListener?.deactivate()
514+
audioLanguageListener = null
515+
483516
super.onDestroy()
484517
session?.release()
485518
player.release()

0 commit comments

Comments
 (0)