From 32924e3f178cd76dbf0ccbe1202618d10701fffb Mon Sep 17 00:00:00 2001 From: tonihei Date: Thu, 28 Mar 2019 17:30:25 +0000 Subject: [PATCH] Use role flags in DefaultTrackNameProvider. Also make combination of language and role flags the default over the label, as it's more readable and auto-translated into other languages. PiperOrigin-RevId: 240801070 --- .../ui/DefaultTrackNameProvider.java | 49 ++++++++++++++----- library/ui/src/main/res/values/strings.xml | 8 +++ 2 files changed, 44 insertions(+), 13 deletions(-) diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/DefaultTrackNameProvider.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/DefaultTrackNameProvider.java index 7034ba73f5..a3d20eadb7 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/DefaultTrackNameProvider.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/DefaultTrackNameProvider.java @@ -39,15 +39,17 @@ public class DefaultTrackNameProvider implements TrackNameProvider { String trackName; int trackType = inferPrimaryTrackType(format); if (trackType == C.TRACK_TYPE_VIDEO) { - trackName = joinWithSeparator(buildResolutionString(format), buildBitrateString(format)); + trackName = + joinWithSeparator( + buildRoleString(format), buildResolutionString(format), buildBitrateString(format)); } else if (trackType == C.TRACK_TYPE_AUDIO) { trackName = joinWithSeparator( - buildLabelString(format), + buildLanguageOrLabelString(format), buildAudioChannelString(format), buildBitrateString(format)); } else { - trackName = buildLabelString(format); + trackName = buildLanguageOrLabelString(format); } return trackName.length() == 0 ? resources.getString(R.string.exo_track_unknown) : trackName; } @@ -87,22 +89,43 @@ public class DefaultTrackNameProvider implements TrackNameProvider { } } - private String buildLabelString(Format format) { - if (!TextUtils.isEmpty(format.label)) { - return format.label; - } - // Fall back to using the language. - String language = format.language; - return TextUtils.isEmpty(language) || C.LANGUAGE_UNDETERMINED.equals(language) - ? "" - : buildLanguageString(language); + private String buildLanguageOrLabelString(Format format) { + String languageAndRole = + joinWithSeparator(buildLanguageString(format), buildRoleString(format)); + return TextUtils.isEmpty(languageAndRole) ? buildLabelString(format) : languageAndRole; } - private String buildLanguageString(String language) { + private String buildLabelString(Format format) { + return TextUtils.isEmpty(format.label) ? "" : format.label; + } + + private String buildLanguageString(Format format) { + String language = format.language; + if (TextUtils.isEmpty(language) || C.LANGUAGE_UNDETERMINED.equals(language)) { + return ""; + } Locale locale = Util.SDK_INT >= 21 ? Locale.forLanguageTag(language) : new Locale(language); return locale.getDisplayName(); } + private String buildRoleString(Format format) { + String roles = ""; + if ((format.roleFlags & C.ROLE_FLAG_ALTERNATE) != 0) { + roles = resources.getString(R.string.exo_track_role_alternate); + } + if ((format.roleFlags & C.ROLE_FLAG_SUPPLEMENTARY) != 0) { + roles = joinWithSeparator(roles, resources.getString(R.string.exo_track_role_supplementary)); + } + if ((format.roleFlags & C.ROLE_FLAG_COMMENTARY) != 0) { + roles = joinWithSeparator(roles, resources.getString(R.string.exo_track_role_commentary)); + } + if ((format.roleFlags & (C.ROLE_FLAG_CAPTION | C.ROLE_FLAG_DESCRIBES_MUSIC_AND_SOUND)) != 0) { + roles = + joinWithSeparator(roles, resources.getString(R.string.exo_track_role_closed_captions)); + } + return roles; + } + private String joinWithSeparator(String... items) { String itemList = ""; for (String item : items) { diff --git a/library/ui/src/main/res/values/strings.xml b/library/ui/src/main/res/values/strings.xml index 036a0e0495..bbb4aca8d5 100644 --- a/library/ui/src/main/res/values/strings.xml +++ b/library/ui/src/main/res/values/strings.xml @@ -76,6 +76,14 @@ 5.1 surround sound 7.1 surround sound + + Alternate + + Supplementary + + Commentary + + CC %1$.2f Mbps