Add backport implementation of Locale.forLanguageTag().

This commit is contained in:
Isira Seneviratne 2022-08-26 06:00:40 +05:30
parent b232c29d22
commit b90a566dd8
3 changed files with 40 additions and 2 deletions

View File

@ -1,6 +1,7 @@
package org.schabi.newpipe.extractor.localization; package org.schabi.newpipe.extractor.localization;
import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.utils.LocaleCompat;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
@ -38,7 +39,7 @@ public class Localization implements Serializable {
* @param localizationCode a localization code, formatted like {@link #getLocalizationCode()} * @param localizationCode a localization code, formatted like {@link #getLocalizationCode()}
*/ */
public static Localization fromLocalizationCode(final String localizationCode) { public static Localization fromLocalizationCode(final String localizationCode) {
return fromLocale(Locale.forLanguageTag(localizationCode)); return fromLocale(LocaleCompat.forLanguageTag(localizationCode));
} }
public Localization(@Nonnull final String languageCode, @Nullable final String countryCode) { public Localization(@Nonnull final String languageCode, @Nullable final String countryCode) {

View File

@ -4,6 +4,7 @@ import static org.schabi.newpipe.extractor.utils.Utils.EMPTY_STRING;
import org.schabi.newpipe.extractor.MediaFormat; import org.schabi.newpipe.extractor.MediaFormat;
import org.schabi.newpipe.extractor.services.youtube.ItagItem; import org.schabi.newpipe.extractor.services.youtube.ItagItem;
import org.schabi.newpipe.extractor.utils.LocaleCompat;
import java.util.Locale; import java.util.Locale;
@ -232,7 +233,7 @@ public final class SubtitlesStream extends Stream {
final boolean autoGenerated, final boolean autoGenerated,
@Nullable final String manifestUrl) { @Nullable final String manifestUrl) {
super(id, content, isUrl, mediaFormat, deliveryMethod, manifestUrl); super(id, content, isUrl, mediaFormat, deliveryMethod, manifestUrl);
this.locale = Locale.forLanguageTag(languageCode); this.locale = LocaleCompat.forLanguageTag(languageCode);
this.code = languageCode; this.code = languageCode;
this.format = mediaFormat; this.format = mediaFormat;
this.autoGenerated = autoGenerated; this.autoGenerated = autoGenerated;

View File

@ -0,0 +1,36 @@
package org.schabi.newpipe.extractor.utils;
import java.util.Locale;
public class LocaleCompat {
private LocaleCompat() {
}
// Source: LocaleListCompat's private forLanguageTagCompat() method.
// Use Locale.forLanguageTag() on API level >= 21 instead.
public static Locale forLanguageTag(final String str) {
if (str.contains("-")) {
String[] args = str.split("-", -1);
if (args.length > 2) {
return new Locale(args[0], args[1], args[2]);
} else if (args.length > 1) {
return new Locale(args[0], args[1]);
} else if (args.length == 1) {
return new Locale(args[0]);
}
} else if (str.contains("_")) {
String[] args = str.split("_", -1);
if (args.length > 2) {
return new Locale(args[0], args[1], args[2]);
} else if (args.length > 1) {
return new Locale(args[0], args[1]);
} else if (args.length == 1) {
return new Locale(args[0]);
}
} else {
return new Locale(str);
}
throw new IllegalArgumentException("Can not parse language tag: [" + str + "]");
}
}