From 0b0c419c73b8a67955c6a5244db3ca87244dc4eb Mon Sep 17 00:00:00 2001 From: michaelkatz Date: Mon, 12 Feb 2024 03:04:32 -0800 Subject: [PATCH] Fallback to including track language name if display name is not found Issue: androidx/media#988 PiperOrigin-RevId: 606193299 --- RELEASENOTES.md | 3 ++ .../media3/ui/DefaultTrackNameProvider.java | 8 ++++- libraries/ui/src/main/res/values/strings.xml | 2 ++ .../ui/DefaultTrackNameProviderTest.java | 35 ++++++++++++++++++- 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 09bf71dd5d2..82316fa9845 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -22,6 +22,9 @@ * IMA extension: * Session: * UI: + * Fallback to include audio track language name if `Locale` cannot + identify a display name + ([#988](https://github.com/androidx/media/issues/988)). * Downloads: * OkHttp Extension: * Cronet Extension: diff --git a/libraries/ui/src/main/java/androidx/media3/ui/DefaultTrackNameProvider.java b/libraries/ui/src/main/java/androidx/media3/ui/DefaultTrackNameProvider.java index 5132b93f386..d83fc541952 100644 --- a/libraries/ui/src/main/java/androidx/media3/ui/DefaultTrackNameProvider.java +++ b/libraries/ui/src/main/java/androidx/media3/ui/DefaultTrackNameProvider.java @@ -56,7 +56,13 @@ public String getTrackName(Format format) { } else { trackName = buildLanguageOrLabelString(format); } - return trackName.length() == 0 ? resources.getString(R.string.exo_track_unknown) : trackName; + if (trackName.length() != 0) { + return trackName; + } + @Nullable String language = format.language; + return (language == null || language.trim().isEmpty()) + ? resources.getString(R.string.exo_track_unknown) + : resources.getString(R.string.exo_track_unknown_name, language); } private String buildResolutionString(Format format) { diff --git a/libraries/ui/src/main/res/values/strings.xml b/libraries/ui/src/main/res/values/strings.xml index 7f65a4bb4b2..849ca20e05c 100644 --- a/libraries/ui/src/main/res/values/strings.xml +++ b/libraries/ui/src/main/res/values/strings.xml @@ -100,6 +100,8 @@ Auto Unknown + + Unknown (%1$s) %1$d × %2$d diff --git a/libraries/ui/src/test/java/androidx/media3/ui/DefaultTrackNameProviderTest.java b/libraries/ui/src/test/java/androidx/media3/ui/DefaultTrackNameProviderTest.java index 2abaa923ff1..0c7a9967c40 100644 --- a/libraries/ui/src/test/java/androidx/media3/ui/DefaultTrackNameProviderTest.java +++ b/libraries/ui/src/test/java/androidx/media3/ui/DefaultTrackNameProviderTest.java @@ -29,13 +29,46 @@ public class DefaultTrackNameProviderTest { @Test - public void getTrackName_handlesInvalidLanguage() { + public void getTrackName_withInvalidLanguage_returnsUnknownWithLanguage() { Resources resources = ApplicationProvider.getApplicationContext().getResources(); DefaultTrackNameProvider provider = new DefaultTrackNameProvider(resources); Format format = new Format.Builder().setLanguage("```").build(); String name = provider.getTrackName(format); + assertThat(name).isEqualTo(resources.getString(R.string.exo_track_unknown_name, "```")); + } + + @Test + public void getTrackName_withLanguageEmptyString_returnsUnknown() { + Resources resources = ApplicationProvider.getApplicationContext().getResources(); + DefaultTrackNameProvider provider = new DefaultTrackNameProvider(resources); + Format format = new Format.Builder().setLanguage("").build(); + + String name = provider.getTrackName(format); + assertThat(name).isEqualTo(resources.getString(R.string.exo_track_unknown)); } + + @Test + public void getTrackName_withLanguageSpacesNewLine_returnsUnknown() { + Resources resources = ApplicationProvider.getApplicationContext().getResources(); + DefaultTrackNameProvider provider = new DefaultTrackNameProvider(resources); + Format format = new Format.Builder().setLanguage(" \n ").build(); + + String name = provider.getTrackName(format); + + assertThat(name).isEqualTo(resources.getString(R.string.exo_track_unknown)); + } + + @Test + public void getTrackName_withLanguageEmptyStringAndLabel_returnsLabel() { + Resources resources = ApplicationProvider.getApplicationContext().getResources(); + DefaultTrackNameProvider provider = new DefaultTrackNameProvider(resources); + Format format = new Format.Builder().setLanguage("").setLabel("Main").build(); + + String name = provider.getTrackName(format); + + assertThat(name).isEqualTo("Main"); + } }