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