@@ -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