Snap for 11041982 from cd8cfe8c27708551bde225f203622c0113a65c3b to mainline-networking-release

Change-Id: I3a130e5299b3b945314e5a8eee918874d7458cbe
diff --git a/android_icu4j/api/public/current.txt b/android_icu4j/api/public/current.txt
index fd2e6fe..ee59067 100644
--- a/android_icu4j/api/public/current.txt
+++ b/android_icu4j/api/public/current.txt
@@ -1715,6 +1715,7 @@
     method public CharSequence subSequence(int, int);
     method public java.math.BigDecimal toBigDecimal();
     method public java.text.AttributedCharacterIterator toCharacterIterator();
+    method public String toString();
   }
 
   public class FormattedNumberRange implements android.icu.text.FormattedValue {
@@ -1727,6 +1728,7 @@
     method public boolean nextPosition(android.icu.text.ConstrainedFieldPosition);
     method public CharSequence subSequence(int, int);
     method public java.text.AttributedCharacterIterator toCharacterIterator();
+    method public String toString();
   }
 
   public abstract class FractionPrecision extends android.icu.number.Precision {
@@ -2199,6 +2201,7 @@
     method public android.icu.text.Collator cloneAsThawed();
     method public abstract int compare(String, String);
     method public int compare(Object, Object);
+    method public boolean equals(Object);
     method public boolean equals(String, String);
     method public android.icu.text.Collator freeze();
     method public static java.util.Locale[] getAvailableLocales();
@@ -2576,6 +2579,7 @@
     method public boolean nextPosition(android.icu.text.ConstrainedFieldPosition);
     method public CharSequence subSequence(int, int);
     method public java.text.AttributedCharacterIterator toCharacterIterator();
+    method public String toString();
   }
 
   public class DateIntervalInfo implements java.lang.Cloneable android.icu.util.Freezable<android.icu.text.DateIntervalInfo> java.io.Serializable {
@@ -2947,6 +2951,7 @@
     method public boolean nextPosition(android.icu.text.ConstrainedFieldPosition);
     method public CharSequence subSequence(int, int);
     method public java.text.AttributedCharacterIterator toCharacterIterator();
+    method public String toString();
   }
 
   public enum ListFormatter.Type {
@@ -3412,6 +3417,7 @@
     method public boolean nextPosition(android.icu.text.ConstrainedFieldPosition);
     method public CharSequence subSequence(int, int);
     method public java.text.AttributedCharacterIterator toCharacterIterator();
+    method public String toString();
   }
 
   public enum RelativeDateTimeFormatter.RelativeDateTimeUnit {
diff --git a/android_icu4j/src/main/tests/android/icu/dev/test/util/ULocaleCollationTest.java b/android_icu4j/src/main/tests/android/icu/dev/test/util/ULocaleCollationTest.java
index 4416bb1..3e78ea1 100644
--- a/android_icu4j/src/main/tests/android/icu/dev/test/util/ULocaleCollationTest.java
+++ b/android_icu4j/src/main/tests/android/icu/dev/test/util/ULocaleCollationTest.java
@@ -314,17 +314,18 @@
                 expected.add(new UiListItem(new ULocale(rawRow[2]), new ULocale(rawRow[3]), rawRow[0], rawRow[1]));
             }
             List<UiListItem> newList = names.getUiList(list, false, collator);
-            if (!expected.equals(newList)) {
-                if (expected.size() != newList.size()) {
-                    errln(list.toString() + ": wrong size" + expected + ", " + newList);
-                } else {
-                    errln(list.toString());
-                    for (int i = 0; i < expected.size(); ++i) {
-                        assertEquals(i+"", expected.get(i), newList.get(i));
-                    }
-                }
+            // Android-changed: Checking nameInSelf is not necessary.
+            if (expected.size() != newList.size()) {
+                errln(list.toString() + ": wrong size" + expected + ", " + newList);
             } else {
-                assertEquals(list.toString(), expected, newList);
+                String msgHead = list.toString() + ":";
+                for (int i = 0; i < expected.size(); ++i) {
+                    UiListItem expectedItem = expected.get(i);
+                    UiListItem newItem = newList.get(i);
+                    assertEquals(msgHead + i+":minimized", expectedItem.minimized, newItem.minimized);
+                    assertEquals(msgHead + i+":modified", expectedItem.modified, newItem.modified);
+                    assertEquals(msgHead + i+":nameInDisplayLocale", expectedItem.nameInDisplayLocale, newItem.nameInDisplayLocale);
+                }
             }
         }
     }
diff --git a/icu4c/source/test/intltest/loctest.cpp b/icu4c/source/test/intltest/loctest.cpp
index 2cf9143..ecc1bf0 100644
--- a/icu4c/source/test/intltest/loctest.cpp
+++ b/icu4c/source/test/intltest/loctest.cpp
@@ -927,8 +927,9 @@
       ;
 
     /* TODO: Change this test to be more like the cloctst version? */
-    if (testCount != 595)
-        errln("Expected getISOLanguages() to return 595 languages; it returned %d", testCount);
+    // Allow more than a min number of languages provided in AOSP
+    if (testCount < 595)
+        errln("Expected getISOLanguages() to return at least 595 languages; it returned %d", testCount);
     else {
         for (i = 0; i < 15; i++) {
             int32_t j;
diff --git a/icu4j/main/tests/collate/src/com/ibm/icu/dev/test/util/ULocaleCollationTest.java b/icu4j/main/tests/collate/src/com/ibm/icu/dev/test/util/ULocaleCollationTest.java
index 170e51c..185bb70 100644
--- a/icu4j/main/tests/collate/src/com/ibm/icu/dev/test/util/ULocaleCollationTest.java
+++ b/icu4j/main/tests/collate/src/com/ibm/icu/dev/test/util/ULocaleCollationTest.java
@@ -311,17 +311,18 @@
                 expected.add(new UiListItem(new ULocale(rawRow[2]), new ULocale(rawRow[3]), rawRow[0], rawRow[1]));
             }
             List<UiListItem> newList = names.getUiList(list, false, collator);
-            if (!expected.equals(newList)) {
-                if (expected.size() != newList.size()) {
-                    errln(list.toString() + ": wrong size" + expected + ", " + newList);
-                } else {
-                    errln(list.toString());
-                    for (int i = 0; i < expected.size(); ++i) {
-                        assertEquals(i+"", expected.get(i), newList.get(i));
-                    }
-                }
+            // Android-changed: Checking nameInSelf is not necessary.
+            if (expected.size() != newList.size()) {
+                errln(list.toString() + ": wrong size" + expected + ", " + newList);
             } else {
-                assertEquals(list.toString(), expected, newList);
+                String msgHead = list.toString() + ":";
+                for (int i = 0; i < expected.size(); ++i) {
+                    UiListItem expectedItem = expected.get(i);
+                    UiListItem newItem = newList.get(i);
+                    assertEquals(msgHead + i+":minimized", expectedItem.minimized, newItem.minimized);
+                    assertEquals(msgHead + i+":modified", expectedItem.modified, newItem.modified);
+                    assertEquals(msgHead + i+":nameInDisplayLocale", expectedItem.nameInDisplayLocale, newItem.nameInDisplayLocale);
+                }
             }
         }
     }