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:
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user