@@ -3557,15 +3557,27 @@ private void buildCaptionMenu(@NonNull final List<String> availableLanguages) {
35573557 }
35583558
35593559 // apply caption language from previous user preference
3560- final List <String > selectedPreferredLanguages =
3561- trackSelector .getParameters ().preferredTextLanguages ;
3560+ final int textRendererIndex = getCaptionRendererIndex ();
3561+ if (textRendererIndex == RENDERER_UNAVAILABLE ) {
3562+ return ;
3563+ }
3564+
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.
35623568 final String userPreferredLanguage =
35633569 prefs .getString (context .getString (R .string .caption_user_set_key ), null );
3564- final int textRendererIndex = getCaptionRendererIndex ();
3570+ if (userPreferredLanguage == null ) {
3571+ trackSelector .setParameters (trackSelector .buildUponParameters ()
3572+ .setRendererDisabled (textRendererIndex , true ));
3573+ return ;
3574+ }
35653575
3566- if (userPreferredLanguage != null
3567- && !selectedPreferredLanguages .contains (userPreferredLanguage )
3568- && textRendererIndex != RENDERER_UNAVAILABLE ) {
3576+ // Only set preferred language if it does not match the user preference,
3577+ // otherwise there might be an infinite cycle at onTextTracksChanged.
3578+ final List <String > selectedPreferredLanguages =
3579+ trackSelector .getParameters ().preferredTextLanguages ;
3580+ if (!selectedPreferredLanguages .contains (userPreferredLanguage )) {
35693581 trackSelector .setParameters (trackSelector .buildUponParameters ()
35703582 .setPreferredTextLanguages (userPreferredLanguage ,
35713583 PlayerHelper .captionLanguageStemOf (userPreferredLanguage ))
0 commit comments