Merge "Accept repeated locale as an input of LocaleList construction." into pi-dev am: 7411fd94a0

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12513538

Change-Id: I3a9d2b3758cb3bbb5eecdf284d838f2475bb1d43
This commit is contained in:
TreeHugger Robot
2020-09-09 23:00:32 +00:00
committed by Automerger Merge Worker

View File

@@ -25,6 +25,7 @@ import android.icu.util.ULocale;
import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
@@ -151,18 +152,18 @@ public final class LocaleList implements Parcelable {
/** /**
* Creates a new {@link LocaleList}. * Creates a new {@link LocaleList}.
* *
* If two or more same locales are passed, the repeated locales will be dropped.
* <p>For empty lists of {@link Locale} items it is better to use {@link #getEmptyLocaleList()}, * <p>For empty lists of {@link Locale} items it is better to use {@link #getEmptyLocaleList()},
* which returns a pre-constructed empty list.</p> * which returns a pre-constructed empty list.</p>
* *
* @throws NullPointerException if any of the input locales is <code>null</code>. * @throws NullPointerException if any of the input locales is <code>null</code>.
* @throws IllegalArgumentException if any of the input locales repeat.
*/ */
public LocaleList(@NonNull Locale... list) { public LocaleList(@NonNull Locale... list) {
if (list.length == 0) { if (list.length == 0) {
mList = sEmptyList; mList = sEmptyList;
mStringRepresentation = ""; mStringRepresentation = "";
} else { } else {
final Locale[] localeList = new Locale[list.length]; final ArrayList<Locale> localeList = new ArrayList<>();
final HashSet<Locale> seenLocales = new HashSet<Locale>(); final HashSet<Locale> seenLocales = new HashSet<Locale>();
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.length; i++) { for (int i = 0; i < list.length; i++) {
@@ -170,10 +171,10 @@ public final class LocaleList implements Parcelable {
if (l == null) { if (l == null) {
throw new NullPointerException("list[" + i + "] is null"); throw new NullPointerException("list[" + i + "] is null");
} else if (seenLocales.contains(l)) { } else if (seenLocales.contains(l)) {
throw new IllegalArgumentException("list[" + i + "] is a repetition"); // Dropping duplicated locale entries.
} else { } else {
final Locale localeClone = (Locale) l.clone(); final Locale localeClone = (Locale) l.clone();
localeList[i] = localeClone; localeList.add(localeClone);
sb.append(localeClone.toLanguageTag()); sb.append(localeClone.toLanguageTag());
if (i < list.length - 1) { if (i < list.length - 1) {
sb.append(','); sb.append(',');
@@ -181,7 +182,7 @@ public final class LocaleList implements Parcelable {
seenLocales.add(localeClone); seenLocales.add(localeClone);
} }
} }
mList = localeList; mList = localeList.toArray(new Locale[localeList.size()]);
mStringRepresentation = sb.toString(); mStringRepresentation = sb.toString();
} }
} }