Merge "Make LocaleList Parcelable."
diff --git a/api/current.txt b/api/current.txt
index 7b2e273..8b5ea4a 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -38651,10 +38651,11 @@
     field public static final int RTL = 1; // 0x1
   }
 
-  public final class LocaleList {
+  public final class LocaleList implements android.os.Parcelable {
     ctor public LocaleList();
     ctor public LocaleList(java.util.Locale);
     ctor public LocaleList(java.util.Locale[]);
+    method public int describeContents();
     method public static android.util.LocaleList forLanguageTags(java.lang.String);
     method public java.util.Locale get(int);
     method public java.util.Locale getBestMatch(java.lang.String[]);
@@ -38664,6 +38665,8 @@
     method public boolean isEmpty();
     method public int size();
     method public java.lang.String toLanguageTags();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.util.LocaleList> CREATOR;
   }
 
   public final class Log {
diff --git a/api/system-current.txt b/api/system-current.txt
index 65dbc50..5135916 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -40977,10 +40977,11 @@
     field public static final int RTL = 1; // 0x1
   }
 
-  public final class LocaleList {
+  public final class LocaleList implements android.os.Parcelable {
     ctor public LocaleList();
     ctor public LocaleList(java.util.Locale);
     ctor public LocaleList(java.util.Locale[]);
+    method public int describeContents();
     method public static android.util.LocaleList forLanguageTags(java.lang.String);
     method public java.util.Locale get(int);
     method public java.util.Locale getBestMatch(java.lang.String[]);
@@ -40990,6 +40991,8 @@
     method public boolean isEmpty();
     method public int size();
     method public java.lang.String toLanguageTags();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.util.LocaleList> CREATOR;
   }
 
   public final class Log {
diff --git a/api/test-current.txt b/api/test-current.txt
index 598924b..cab03f0 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -38653,10 +38653,11 @@
     field public static final int RTL = 1; // 0x1
   }
 
-  public final class LocaleList {
+  public final class LocaleList implements android.os.Parcelable {
     ctor public LocaleList();
     ctor public LocaleList(java.util.Locale);
     ctor public LocaleList(java.util.Locale[]);
+    method public int describeContents();
     method public static android.util.LocaleList forLanguageTags(java.lang.String);
     method public java.util.Locale get(int);
     method public java.util.Locale getBestMatch(java.lang.String[]);
@@ -38666,6 +38667,8 @@
     method public boolean isEmpty();
     method public int size();
     method public java.lang.String toLanguageTags();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.util.LocaleList> CREATOR;
   }
 
   public final class Log {
diff --git a/core/java/android/util/LocaleList.aidl b/core/java/android/util/LocaleList.aidl
new file mode 100644
index 0000000..f5de354
--- /dev/null
+++ b/core/java/android/util/LocaleList.aidl
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2015 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 android.util;
+
+parcelable LocaleList;
diff --git a/core/java/android/util/LocaleList.java b/core/java/android/util/LocaleList.java
index c1d23bb..b2ee045 100644
--- a/core/java/android/util/LocaleList.java
+++ b/core/java/android/util/LocaleList.java
@@ -19,6 +19,8 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.Size;
+import android.os.Parcel;
+import android.os.Parcelable;
 
 import com.android.internal.annotations.GuardedBy;
 
@@ -35,11 +37,12 @@
  * LocaleList is an immutable list of Locales, typically used to keep an
  * ordered user preferences for locales.
  */
-public final class LocaleList {
+public final class LocaleList implements Parcelable {
     private final Locale[] mList;
     // This is a comma-separated list of the locales in the LocaleList created at construction time,
     // basically the result of running each locale's toLanguageTag() method and concatenating them
     // with commas in between.
+    @NonNull
     private final String mStringRepresentation;
 
     private static final Locale[] sEmptyList = new Locale[0];
@@ -101,6 +104,16 @@
         return sb.toString();
     }
 
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int parcelableFlags) {
+        dest.writeString(mStringRepresentation);
+    }
+
     @NonNull
     public String toLanguageTags() {
         return mStringRepresentation;
@@ -163,10 +176,25 @@
         }
     }
 
+    public static final Parcelable.Creator<LocaleList> CREATOR
+            = new Parcelable.Creator<LocaleList>() {
+        @Override
+        public LocaleList createFromParcel(Parcel source) {
+            return LocaleList.forLanguageTags(source.readString());
+        }
+
+        @Override
+        public LocaleList[] newArray(int size) {
+            return new LocaleList[size];
+        }
+    };
+
+    @NonNull
     public static LocaleList getEmptyLocaleList() {
         return sEmptyLocaleList;
     }
 
+    @NonNull
     public static LocaleList forLanguageTags(@Nullable String list) {
         if (list == null || list.equals("")) {
             return getEmptyLocaleList();