From f787e9ce1a8d1f2269ce84d0e212e3c7b593eaed Mon Sep 17 00:00:00 2001 From: Ray <154766448+damontecres@users.noreply.github.com> Date: Wed, 28 Jan 2026 13:56:33 -0500 Subject: [PATCH] Better smart subtitles with no preferred audio language (#789) ## Description Another small fix to smart subtitle track selection to better handle the cases where the user does not have a preferred audio language. ### Related issues Addresses issue raises in https://github.com/damontecres/Wholphin/issues/570#issuecomment-3714629517 --- .../wholphin/services/StreamChoiceService.kt | 8 +++++++- .../wholphin/test/TestStreamChoiceService.kt | 16 ++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/StreamChoiceService.kt b/app/src/main/java/com/github/damontecres/wholphin/services/StreamChoiceService.kt index e38957cf..6de45f50 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/services/StreamChoiceService.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/services/StreamChoiceService.kt @@ -276,10 +276,16 @@ class StreamChoiceService SubtitlePlaybackMode.SMART -> { if (subtitleLanguage.isNotNullOrBlank()) { val audioLanguage = userConfig?.audioLanguagePreference - if (audioLanguage.isNullOrBlank() || audioLanguage != audioStreamLang) { + if ( + // Has preferred subtitle lang & preferred audio, so only show subtitles if actual audio is different + (audioLanguage.isNotNullOrBlank() && audioLanguage != audioStreamLang) || + // Has preferred subtitle lang, but no preferred audio lang, so show subtitle if subtitle lang is different from actual audio + (audioLanguage.isNullOrBlank() && subtitleLanguage != audioStreamLang) + ) { candidates.firstOrNull { it.language == subtitleLanguage } ?: candidates.firstOrNull { it.language.isUnknown } } else { + // Otherwise, show forced subtitles in preferred lang candidates.firstOrNull { it.isForced && it.language == subtitleLanguage } ?: candidates.firstOrNull { it.isForced && it.language.isUnknown } } diff --git a/app/src/test/java/com/github/damontecres/wholphin/test/TestStreamChoiceService.kt b/app/src/test/java/com/github/damontecres/wholphin/test/TestStreamChoiceService.kt index e41bf292..f4d04c7e 100644 --- a/app/src/test/java/com/github/damontecres/wholphin/test/TestStreamChoiceService.kt +++ b/app/src/test/java/com/github/damontecres/wholphin/test/TestStreamChoiceService.kt @@ -355,7 +355,7 @@ class TestStreamChoiceServiceSmart( userAudioLang = null, ), TestInput( - 1, + null, SubtitlePlaybackMode.SMART, subtitles = listOf( @@ -367,6 +367,18 @@ class TestStreamChoiceServiceSmart( userSubtitleLang = "eng", userAudioLang = null, ), + TestInput( + null, + SubtitlePlaybackMode.SMART, + subtitles = + listOf( + subtitle(0, "eng"), + subtitle(1, "spa"), + ), + streamAudioLang = "spa", + userSubtitleLang = "spa", + userAudioLang = null, + ), ) } } @@ -498,7 +510,7 @@ class TestStreamChoiceServiceMultipleChoices( ), ), TestInput( - 2, + 0, SubtitlePlaybackMode.SMART, subtitles = listOf(