From 52d6db4593832b449a0a584fd4e3d84fce9e8982 Mon Sep 17 00:00:00 2001 From: Mattias Buelens Date: Tue, 7 Apr 2026 14:48:50 +0200 Subject: [PATCH 1/5] Remove check for version 11 --- .../theoplayer/android/ui/util/TrackExts.kt | 22 --------------- .../android/ui/util/TrackExtsTest.kt | 28 ------------------- 2 files changed, 50 deletions(-) diff --git a/ui/src/main/java/com/theoplayer/android/ui/util/TrackExts.kt b/ui/src/main/java/com/theoplayer/android/ui/util/TrackExts.kt index be4d80d..105d06c 100644 --- a/ui/src/main/java/com/theoplayer/android/ui/util/TrackExts.kt +++ b/ui/src/main/java/com/theoplayer/android/ui/util/TrackExts.kt @@ -30,10 +30,6 @@ internal val Track.localizedLanguageName: String? /** * Constructs a label for the given [MediaTrack] instance. - * - * This returns the first non-empty entry from the list: - * 1. Track label - * 2. Track language display name */ internal fun constructLabel(track: MediaTrack<*>): String? { return track.label?.takeUnless { it.isBlank() } @@ -42,27 +38,9 @@ internal fun constructLabel(track: MediaTrack<*>): String? { /** * Constructs a label for the given [TextTrack] instance. - * The method works slightly different for different player version. - * - * On version 10 and below the logic checks the following and condition - * and the first not `null` entry from the list: - * 1. Track label if is not a language code - * or a CEA-prefixed string. - * 2. Track language display name - * 3. Track caption channel if a text CEA-608 track - * 4. Track label if was either a language code or a CEA-prefixed string - * - * If none of the above is satisfied, returns `null`. - * - * On version 11 and later the logic has slightly changed as - * the player no longer constructs the [Track.getLabel] internally: - * 1. Track label - * 2. Track language display name - * 3. Track caption channel */ internal fun constructLabel(track: TextTrack): String? { val label: String? = if ( - THEOplayerGlobalExt.version.major < 11 && (isLabelCeaFormatted(track.label) || (track.label != null && track.language == track.label)) ) { // If we are below 11th major release diff --git a/ui/src/test/java/com/theoplayer/android/ui/util/TrackExtsTest.kt b/ui/src/test/java/com/theoplayer/android/ui/util/TrackExtsTest.kt index 88d9961..d916845 100644 --- a/ui/src/test/java/com/theoplayer/android/ui/util/TrackExtsTest.kt +++ b/ui/src/test/java/com/theoplayer/android/ui/util/TrackExtsTest.kt @@ -249,34 +249,6 @@ class TrackExtsTest { playerVersion = TEST_PLAYER_VERSION_10_13, expectedLabel = "CC4", ), - - // v11.0 checks. - // - Track.captionChannel is always set - // - Track.label must not be "CC1" or "CC2" - Args( - label = "Hello world", - language = null, - localizedLanguageName = null, - captionChannel = 1, - playerVersion = TEST_PLAYER_VERSION_11_0, - expectedLabel = "Hello world", - ), - Args( - label = "en", - language = "en", - localizedLanguageName = "English", - captionChannel = 1, - playerVersion = TEST_PLAYER_VERSION_11_0, - expectedLabel = "en", - ), - Args( - label = null, - language = null, - localizedLanguageName = null, - captionChannel = 4, - playerVersion = TEST_PLAYER_VERSION_11_0, - expectedLabel = "CC4", - ), ) } } From 35779c2ef46d4dc1d438e156d050cfceec775122 Mon Sep 17 00:00:00 2001 From: Mattias Buelens Date: Tue, 7 Apr 2026 14:49:41 +0200 Subject: [PATCH 2/5] Refactor --- .../theoplayer/android/ui/util/TrackExts.kt | 28 ++++++++----------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/ui/src/main/java/com/theoplayer/android/ui/util/TrackExts.kt b/ui/src/main/java/com/theoplayer/android/ui/util/TrackExts.kt index 105d06c..f7f85eb 100644 --- a/ui/src/main/java/com/theoplayer/android/ui/util/TrackExts.kt +++ b/ui/src/main/java/com/theoplayer/android/ui/util/TrackExts.kt @@ -40,25 +40,19 @@ internal fun constructLabel(track: MediaTrack<*>): String? { * Constructs a label for the given [TextTrack] instance. */ internal fun constructLabel(track: TextTrack): String? { - val label: String? = if ( - (isLabelCeaFormatted(track.label) || (track.label != null && track.language == track.label)) - ) { - // If we are below 11th major release - // and the label is CEA-formatted we - // can safely assume it was the last resort - // option to produce a meaningful label, given - // we cannot localize the language code in the player. - null - } else { - // With 11 release, the player will no longer - // prefix text tracks with "CC" for CEA-608 and CEA-708, - // if [Track.label] is `null`. - track.label + val label = track.label?.takeIf { + when { + // Ignore empty labels. + it.isBlank() -> false + // Ignore default label with just the language code. + it == track.language -> false + // Ignore default label with just the caption channel. + isLabelCeaFormatted(it) -> false + else -> true + } } - if (!label.isNullOrBlank()) { - return label - } + label?.let { return it } track.localizedLanguageName?.let { return it } From 57a637d89a5a2d254e406a7b5daa9efddc0c7441 Mon Sep 17 00:00:00 2001 From: Mattias Buelens Date: Tue, 7 Apr 2026 14:50:11 +0200 Subject: [PATCH 3/5] Optimize slightly --- ui/src/main/java/com/theoplayer/android/ui/util/TrackExts.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/src/main/java/com/theoplayer/android/ui/util/TrackExts.kt b/ui/src/main/java/com/theoplayer/android/ui/util/TrackExts.kt index f7f85eb..b2bed13 100644 --- a/ui/src/main/java/com/theoplayer/android/ui/util/TrackExts.kt +++ b/ui/src/main/java/com/theoplayer/android/ui/util/TrackExts.kt @@ -47,7 +47,7 @@ internal fun constructLabel(track: TextTrack): String? { // Ignore default label with just the language code. it == track.language -> false // Ignore default label with just the caption channel. - isLabelCeaFormatted(it) -> false + (track.type == TextTrackType.CEA608 && isLabelCeaFormatted(it)) -> false else -> true } } From aea04ea82fa89cd62491420d7bd5073d726c12f3 Mon Sep 17 00:00:00 2001 From: Mattias Buelens Date: Tue, 7 Apr 2026 14:53:27 +0200 Subject: [PATCH 4/5] Update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 118a2e5..603be8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ ## Unreleased -* 🐛 The language menu now prefers to show CEA-608/708 closed caption tracks with their localized language name (if available) instead of their language code (e.g. "en") or channel number (e.g. "CC1"). ([#84](https://github.com/THEOplayer/android-ui/pull/84)) +* 🐛 The language menu now prefers to show CEA-608/708 closed caption tracks with their localized language name (if available) instead of their language code (e.g. "en") or channel number (e.g. "CC1"). ([#84](https://github.com/THEOplayer/android-ui/pull/84), [#95](https://github.com/THEOplayer/android-ui/pull/95)) ## v1.13.3 (2026-03-23) From 725d27b5970ea3d92dc82a849317d649001dda9e Mon Sep 17 00:00:00 2001 From: Mattias Buelens Date: Tue, 7 Apr 2026 14:54:21 +0200 Subject: [PATCH 5/5] Remove unused constant --- ui/src/test/java/com/theoplayer/android/ui/util/TrackExtsTest.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/ui/src/test/java/com/theoplayer/android/ui/util/TrackExtsTest.kt b/ui/src/test/java/com/theoplayer/android/ui/util/TrackExtsTest.kt index d916845..22a76b0 100644 --- a/ui/src/test/java/com/theoplayer/android/ui/util/TrackExtsTest.kt +++ b/ui/src/test/java/com/theoplayer/android/ui/util/TrackExtsTest.kt @@ -131,7 +131,6 @@ class TrackExtsTest { const val TEST_PLAYER_VERSION_10_0 = "10.0.0" const val TEST_PLAYER_VERSION_10_13 = "10.13.0" - const val TEST_PLAYER_VERSION_11_0 = "11.0.0" @JvmStatic @Parameterized.Parameters(name = "{0}")