Rollback of 912c47ff6f
*** Original commit ***
Rollback of 8ed6c9fcf5
*** Original commit ***
Fix capitalization of language in track selector
Issue: #9452
***
***
PiperOrigin-RevId: 400942287
This commit is contained in:
parent
ac881be2fc
commit
80d365163d
@ -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.
|
||||||
|
@ -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}.
|
||||||
*
|
*
|
||||||
|
@ -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) {
|
||||||
|
@ -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));
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user