2021-07-24 02:37:17 +00:00
|
|
|
package androidx.core.os;
|
|
|
|
|
|
|
|
import androidx.annotation.IntRange;
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import androidx.annotation.Nullable;
|
|
|
|
import androidx.annotation.VisibleForTesting;
|
2021-12-17 21:59:34 +00:00
|
|
|
import b.d.b.a.a;
|
2021-09-15 06:33:54 +00:00
|
|
|
import java.util.ArrayList;
|
2021-07-24 02:37:17 +00:00
|
|
|
import java.util.Arrays;
|
|
|
|
import java.util.Collection;
|
|
|
|
import java.util.HashSet;
|
|
|
|
import java.util.Locale;
|
|
|
|
public final class LocaleListCompatWrapper implements LocaleListInterface {
|
|
|
|
private static final Locale EN_LATN = LocaleListCompat.forLanguageTagCompat("en-Latn");
|
|
|
|
private static final Locale LOCALE_AR_XB = new Locale("ar", "XB");
|
|
|
|
private static final Locale LOCALE_EN_XA = new Locale("en", "XA");
|
|
|
|
private static final Locale[] sEmptyList = new Locale[0];
|
|
|
|
private final Locale[] mList;
|
|
|
|
@NonNull
|
|
|
|
private final String mStringRepresentation;
|
|
|
|
|
|
|
|
public LocaleListCompatWrapper(@NonNull Locale... localeArr) {
|
|
|
|
if (localeArr.length == 0) {
|
|
|
|
this.mList = sEmptyList;
|
|
|
|
this.mStringRepresentation = "";
|
|
|
|
return;
|
|
|
|
}
|
2021-09-15 06:33:54 +00:00
|
|
|
ArrayList arrayList = new ArrayList();
|
2021-07-24 02:37:17 +00:00
|
|
|
HashSet hashSet = new HashSet();
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
for (int i = 0; i < localeArr.length; i++) {
|
|
|
|
Locale locale = localeArr[i];
|
2021-09-15 06:33:54 +00:00
|
|
|
if (locale != null) {
|
|
|
|
if (!hashSet.contains(locale)) {
|
|
|
|
Locale locale2 = (Locale) locale.clone();
|
|
|
|
arrayList.add(locale2);
|
|
|
|
toLanguageTag(sb, locale2);
|
|
|
|
if (i < localeArr.length - 1) {
|
|
|
|
sb.append(',');
|
|
|
|
}
|
|
|
|
hashSet.add(locale2);
|
2021-07-24 02:37:17 +00:00
|
|
|
}
|
|
|
|
} else {
|
2021-11-05 06:48:17 +00:00
|
|
|
throw new NullPointerException(a.q("list[", i, "] is null"));
|
2021-07-24 02:37:17 +00:00
|
|
|
}
|
|
|
|
}
|
2021-09-15 06:33:54 +00:00
|
|
|
this.mList = (Locale[]) arrayList.toArray(new Locale[arrayList.size()]);
|
2021-07-24 02:37:17 +00:00
|
|
|
this.mStringRepresentation = sb.toString();
|
|
|
|
}
|
|
|
|
|
|
|
|
private Locale computeFirstMatch(Collection<String> collection, boolean z2) {
|
|
|
|
int computeFirstMatchIndex = computeFirstMatchIndex(collection, z2);
|
|
|
|
if (computeFirstMatchIndex == -1) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
return this.mList[computeFirstMatchIndex];
|
|
|
|
}
|
|
|
|
|
|
|
|
/* JADX WARNING: Code restructure failed: missing block: B:11:0x001b, code lost:
|
|
|
|
if (r6 < Integer.MAX_VALUE) goto L_0x0021;
|
|
|
|
*/
|
|
|
|
private int computeFirstMatchIndex(Collection<String> collection, boolean z2) {
|
|
|
|
int i;
|
|
|
|
Locale[] localeArr = this.mList;
|
|
|
|
if (localeArr.length == 1) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (localeArr.length == 0) {
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
if (z2) {
|
|
|
|
i = findFirstMatchIndex(EN_LATN);
|
|
|
|
if (i == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
i = Integer.MAX_VALUE;
|
|
|
|
for (String str : collection) {
|
|
|
|
int findFirstMatchIndex = findFirstMatchIndex(LocaleListCompat.forLanguageTagCompat(str));
|
|
|
|
if (findFirstMatchIndex == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (findFirstMatchIndex < i) {
|
|
|
|
i = findFirstMatchIndex;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (i == Integer.MAX_VALUE) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
|
|
|
|
private int findFirstMatchIndex(Locale locale) {
|
|
|
|
int i = 0;
|
|
|
|
while (true) {
|
|
|
|
Locale[] localeArr = this.mList;
|
|
|
|
if (i >= localeArr.length) {
|
|
|
|
return Integer.MAX_VALUE;
|
|
|
|
}
|
|
|
|
if (matchScore(locale, localeArr[i]) > 0) {
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private static String getLikelyScript(Locale locale) {
|
|
|
|
String script = locale.getScript();
|
|
|
|
return !script.isEmpty() ? script : "";
|
|
|
|
}
|
|
|
|
|
|
|
|
private static boolean isPseudoLocale(Locale locale) {
|
|
|
|
return LOCALE_EN_XA.equals(locale) || LOCALE_AR_XB.equals(locale);
|
|
|
|
}
|
|
|
|
|
|
|
|
@IntRange(from = 0, to = 1)
|
|
|
|
private static int matchScore(Locale locale, Locale locale2) {
|
|
|
|
if (locale.equals(locale2)) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
if (!locale.getLanguage().equals(locale2.getLanguage()) || isPseudoLocale(locale) || isPseudoLocale(locale2)) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
String likelyScript = getLikelyScript(locale);
|
|
|
|
if (!likelyScript.isEmpty()) {
|
|
|
|
return likelyScript.equals(getLikelyScript(locale2)) ? 1 : 0;
|
|
|
|
}
|
|
|
|
String country = locale.getCountry();
|
|
|
|
return (country.isEmpty() || country.equals(locale2.getCountry())) ? 1 : 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@VisibleForTesting
|
|
|
|
public static void toLanguageTag(StringBuilder sb, Locale locale) {
|
|
|
|
sb.append(locale.getLanguage());
|
|
|
|
String country = locale.getCountry();
|
|
|
|
if (country != null && !country.isEmpty()) {
|
|
|
|
sb.append('-');
|
|
|
|
sb.append(locale.getCountry());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean equals(Object obj) {
|
|
|
|
if (obj == this) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
if (!(obj instanceof LocaleListCompatWrapper)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
Locale[] localeArr = ((LocaleListCompatWrapper) obj).mList;
|
|
|
|
if (this.mList.length != localeArr.length) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
int i = 0;
|
|
|
|
while (true) {
|
|
|
|
Locale[] localeArr2 = this.mList;
|
|
|
|
if (i >= localeArr2.length) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
if (!localeArr2[i].equals(localeArr[i])) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override // androidx.core.os.LocaleListInterface
|
|
|
|
public Locale get(int i) {
|
|
|
|
if (i >= 0) {
|
|
|
|
Locale[] localeArr = this.mList;
|
|
|
|
if (i < localeArr.length) {
|
|
|
|
return localeArr[i];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override // androidx.core.os.LocaleListInterface
|
|
|
|
public Locale getFirstMatch(@NonNull String[] strArr) {
|
|
|
|
return computeFirstMatch(Arrays.asList(strArr), false);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override // androidx.core.os.LocaleListInterface
|
|
|
|
@Nullable
|
|
|
|
public Object getLocaleList() {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int hashCode() {
|
|
|
|
int i = 1;
|
|
|
|
int i2 = 0;
|
|
|
|
while (true) {
|
|
|
|
Locale[] localeArr = this.mList;
|
|
|
|
if (i2 >= localeArr.length) {
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
i = (i * 31) + localeArr[i2].hashCode();
|
|
|
|
i2++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override // androidx.core.os.LocaleListInterface
|
|
|
|
public int indexOf(Locale locale) {
|
|
|
|
int i = 0;
|
|
|
|
while (true) {
|
|
|
|
Locale[] localeArr = this.mList;
|
|
|
|
if (i >= localeArr.length) {
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
if (localeArr[i].equals(locale)) {
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override // androidx.core.os.LocaleListInterface
|
|
|
|
public boolean isEmpty() {
|
|
|
|
return this.mList.length == 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override // androidx.core.os.LocaleListInterface
|
|
|
|
public int size() {
|
|
|
|
return this.mList.length;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override // androidx.core.os.LocaleListInterface
|
|
|
|
public String toLanguageTags() {
|
|
|
|
return this.mStringRepresentation;
|
|
|
|
}
|
|
|
|
|
|
|
|
public String toString() {
|
2021-11-05 06:48:17 +00:00
|
|
|
StringBuilder R = a.R("[");
|
2021-07-24 02:37:17 +00:00
|
|
|
int i = 0;
|
|
|
|
while (true) {
|
|
|
|
Locale[] localeArr = this.mList;
|
|
|
|
if (i < localeArr.length) {
|
2021-11-05 06:48:17 +00:00
|
|
|
R.append(localeArr[i]);
|
2021-07-24 02:37:17 +00:00
|
|
|
if (i < this.mList.length - 1) {
|
2021-11-05 06:48:17 +00:00
|
|
|
R.append(',');
|
2021-07-24 02:37:17 +00:00
|
|
|
}
|
|
|
|
i++;
|
|
|
|
} else {
|
2021-11-05 06:48:17 +00:00
|
|
|
R.append("]");
|
|
|
|
return R.toString();
|
2021-07-24 02:37:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|