diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 13a4d8723..306b8c2c8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,6 +6,7 @@ on: branches: - dev - master + - release/** paths-ignore: - 'README.md' - 'doc/**' diff --git a/app/src/main/java/org/schabi/newpipe/player/Player.java b/app/src/main/java/org/schabi/newpipe/player/Player.java index 82ae0df27..30c62af39 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -3557,15 +3557,27 @@ public final class Player implements } // apply caption language from previous user preference - final List selectedPreferredLanguages = - trackSelector.getParameters().preferredTextLanguages; + final int textRendererIndex = getCaptionRendererIndex(); + if (textRendererIndex == RENDERER_UNAVAILABLE) { + return; + } + + // If user prefers to show no caption, then disable the renderer. + // Otherwise, DefaultTrackSelector may automatically find an available caption + // and display that. final String userPreferredLanguage = prefs.getString(context.getString(R.string.caption_user_set_key), null); - final int textRendererIndex = getCaptionRendererIndex(); + if (userPreferredLanguage == null) { + trackSelector.setParameters(trackSelector.buildUponParameters() + .setRendererDisabled(textRendererIndex, true)); + return; + } - if (userPreferredLanguage != null - && !selectedPreferredLanguages.contains(userPreferredLanguage) - && textRendererIndex != RENDERER_UNAVAILABLE) { + // Only set preferred language if it does not match the user preference, + // otherwise there might be an infinite cycle at onTextTracksChanged. + final List selectedPreferredLanguages = + trackSelector.getParameters().preferredTextLanguages; + if (!selectedPreferredLanguages.contains(userPreferredLanguage)) { trackSelector.setParameters(trackSelector.buildUponParameters() .setPreferredTextLanguages(userPreferredLanguage, PlayerHelper.captionLanguageStemOf(userPreferredLanguage))