*** Original commit ***

Rollback of 8ed6c9fcf5

*** Original commit ***

Fix capitalization of language in track selector

Issue: #9452

***

***

PiperOrigin-RevId: 400942287
This commit is contained in:
olly 2021-10-05 11:53:35 +01:00 committed by bachinger
parent ac881be2fc
commit 80d365163d
4 changed files with 66 additions and 3 deletions

View File

@ -39,6 +39,8 @@
`Player.addListener`. `Player.addListener`.
* Fix initial timestamp display in `PlayerControlView` * Fix initial timestamp display in `PlayerControlView`
([#9524](https://github.com/google/ExoPlayer/issues/9254)). ([#9524](https://github.com/google/ExoPlayer/issues/9254)).
* Fix capitalization of languages in the track selector
([#9452](https://github.com/google/ExoPlayer/issues/9452)).
* Extractors: * Extractors:
* MP4: Correctly handle HEVC tracks with pixel aspect ratios other than 1. * MP4: Correctly handle HEVC tracks with pixel aspect ratios other than 1.
* TS: Correctly handle HEVC tracks with pixel aspect ratios other than 1. * TS: Correctly handle HEVC tracks with pixel aspect ratios other than 1.

View File

@ -2243,6 +2243,11 @@ public final class Util {
return systemLocales; return systemLocales;
} }
/** Returns the default {@link Locale.Category#DISPLAY DISPLAY} {@link Locale}. */
public static Locale getDefaultDisplayLocale() {
return Util.SDK_INT >= 24 ? Locale.getDefault(Locale.Category.DISPLAY) : Locale.getDefault();
}
/** /**
* Uncompresses the data in {@code input}. * Uncompresses the data in {@code input}.
* *

View File

@ -17,6 +17,7 @@ package com.google.android.exoplayer2.ui;
import android.content.res.Resources; import android.content.res.Resources;
import android.text.TextUtils; import android.text.TextUtils;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
@ -100,12 +101,26 @@ public class DefaultTrackNameProvider implements TrackNameProvider {
} }
private String buildLanguageString(Format format) { private String buildLanguageString(Format format) {
String language = format.language; @Nullable String language = format.language;
if (TextUtils.isEmpty(language) || C.LANGUAGE_UNDETERMINED.equals(language)) { if (TextUtils.isEmpty(language) || C.LANGUAGE_UNDETERMINED.equals(language)) {
return ""; return "";
} }
Locale locale = Util.SDK_INT >= 21 ? Locale.forLanguageTag(language) : new Locale(language); Locale languageLocale =
return locale.getDisplayName(); Util.SDK_INT >= 21 ? Locale.forLanguageTag(language) : new Locale(language);
Locale displayLocale = Util.getDefaultDisplayLocale();
String languageName = languageLocale.getDisplayName(displayLocale);
if (TextUtils.isEmpty(languageName)) {
return "";
}
try {
// Capitalize the first letter. See: https://github.com/google/ExoPlayer/issues/9452.
int firstCodePointLength = languageName.offsetByCodePoints(0, 1);
return languageName.substring(0, firstCodePointLength).toUpperCase(displayLocale)
+ languageName.substring(firstCodePointLength);
} catch (IndexOutOfBoundsException e) {
// Should never happen, but return the unmodified language name if it does.
return languageName;
}
} }
private String buildRoleString(Format format) { private String buildRoleString(Format format) {

View File

@ -0,0 +1,41 @@
/*
* Copyright 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.exoplayer2.ui;
import static com.google.common.truth.Truth.assertThat;
import android.content.res.Resources;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.Format;
import org.junit.Test;
import org.junit.runner.RunWith;
/** Tests for the {@link DefaultMediaDescriptionAdapter}. */
@RunWith(AndroidJUnit4.class)
public class DefaultTrackNameProviderTest {
@Test
public void getTrackName_handlesInvalidLanguage() {
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));
}
}