@@ -3557,20 +3557,27 @@ private void buildCaptionMenu(@NonNull final List<String> availableLanguages) {
35573557 }
35583558
35593559 // apply caption language from previous user preference
3560- final String userPreferredLanguage =
3561- prefs .getString (context .getString (R .string .caption_user_set_key ), null );
35623560 final int textRendererIndex = getCaptionRendererIndex ();
3561+ if (textRendererIndex == RENDERER_UNAVAILABLE ) {
3562+ return ;
3563+ }
35633564
3565+ // If user prefers to show no caption, then disable the renderer.
3566+ // Otherwise, DefaultTrackSelector may automatically find an available caption
3567+ // and display that.
3568+ final String userPreferredLanguage =
3569+ prefs .getString (context .getString (R .string .caption_user_set_key ), null );
35643570 if (userPreferredLanguage == null ) {
35653571 trackSelector .setParameters (trackSelector .buildUponParameters ()
35663572 .setRendererDisabled (textRendererIndex , true ));
35673573 return ;
35683574 }
35693575
3576+ // Only set preferred language if it does not match the user preference,
3577+ // otherwise there might be an infinite cycle at onTextTracksChanged.
35703578 final List <String > selectedPreferredLanguages =
35713579 trackSelector .getParameters ().preferredTextLanguages ;
3572- if (!selectedPreferredLanguages .contains (userPreferredLanguage )
3573- && textRendererIndex != RENDERER_UNAVAILABLE ) {
3580+ if (!selectedPreferredLanguages .contains (userPreferredLanguage )) {
35743581 trackSelector .setParameters (trackSelector .buildUponParameters ()
35753582 .setPreferredTextLanguages (userPreferredLanguage ,
35763583 PlayerHelper .captionLanguageStemOf (userPreferredLanguage ))
0 commit comments