From cd4ad50604170390eee709dfa60133d5ce7f2c93 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Sun, 9 Aug 2026 17:10:50 +0200 Subject: [PATCH] fix(cast-pref): propertly persist selected audip/sub on cast --- .../dev/zoriya/omni/OmniCastTrackSelector.kt | 15 ++++++++++----- .../src/main/java/dev/zoriya/omni/OmniPlayer.kt | 16 ++++++++-------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/android/src/main/java/dev/zoriya/omni/OmniCastTrackSelector.kt b/android/src/main/java/dev/zoriya/omni/OmniCastTrackSelector.kt index 881f0fc..da039ae 100644 --- a/android/src/main/java/dev/zoriya/omni/OmniCastTrackSelector.kt +++ b/android/src/main/java/dev/zoriya/omni/OmniCastTrackSelector.kt @@ -60,13 +60,18 @@ class OmniCastTrackSelector : CastTrackSelector() { val overrideMatch = indices.firstOrNull { i -> overrides.keys.any { it.id == groups[i].id } } - val match = indices.firstOrNull { i -> + val matchesLabel = { i: Int -> val name: String? = tracks[i].name - val language: String? = tracks[i].language - (labels.isNotEmpty() && name != null && name in labels) || - (languages.isNotEmpty() && language != null && - Util.normalizeLanguageCode(language) in languages) + labels.isNotEmpty() && name != null && name in labels } + val matchesLanguage = { i: Int -> + val language: String? = tracks[i].language + languages.isNotEmpty() && language != null && + Util.normalizeLanguageCode(language) in languages + } + val match = indices.firstOrNull { matchesLabel(it) && matchesLanguage(it) } + ?: indices.firstOrNull { matchesLabel(it) } + ?: indices.firstOrNull { matchesLanguage(it) } val chosen = when { overrideMatch != null -> overrideMatch match != null -> match diff --git a/android/src/main/java/dev/zoriya/omni/OmniPlayer.kt b/android/src/main/java/dev/zoriya/omni/OmniPlayer.kt index 436c1ed..c6f22e5 100644 --- a/android/src/main/java/dev/zoriya/omni/OmniPlayer.kt +++ b/android/src/main/java/dev/zoriya/omni/OmniPlayer.kt @@ -481,15 +481,15 @@ class OmniPlayer( }?.mediaTrackGroup if (group != null) { params.setOverrideForType(TrackSelectionOverride(group, 0)) + } + // also set preferred flags for cast selection + val labels = track.label?.let { arrayOf(it) } ?: emptyArray() + if (type == C.TRACK_TYPE_AUDIO) { + params.setPreferredAudioLanguage(track.language) + .setPreferredAudioLabels(*labels) } else { - val labels = track.label?.let { arrayOf(it) } ?: emptyArray() - if (type == C.TRACK_TYPE_AUDIO) { - params.setPreferredAudioLanguage(track.language) - .setPreferredAudioLabels(*labels) - } else { - params.setPreferredTextLanguage(track.language) - .setPreferredTextLabels(*labels) - } + params.setPreferredTextLanguage(track.language) + .setPreferredTextLabels(*labels) } } player.trackSelectionParameters = params.build()