Change locale comparison API

Bug: 209729853
Test: atest AppLocaleDetailsTest
Change-Id: I1568fe9474e473ac6d3fb81dcf9edf9ba7434e85
diff --git a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
index 742ce04..2ba6fdc 100644
--- a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
+++ b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
@@ -237,18 +237,28 @@
                 mSuggestedLocales.add(appLocale);
             }
             // 2nd locale in suggested languages group.
-            if (simLocale != null && !simLocale.equals(appLocale)) {
+            if (simLocale != null && !compareLocale(simLocale, appLocale)) {
                 mSuggestedLocales.add(simLocale);
             }
             // Other locales in suggested languages group.
             for (int i = 0; i < currentSystemLocales.size(); i++) {
                 Locale locale = currentSystemLocales.get(i);
-                if (!locale.equals(appLocale) && !locale.equals(simLocale)) {
+                if (!compareLocale(locale, appLocale) && !compareLocale(locale, simLocale)) {
                     mSuggestedLocales.add(locale);
                 }
             }
         }
 
+        static boolean compareLocale(Locale source, Locale target) {
+            if (source == null && target == null) {
+                return true;
+            } else if (source != null && target != null) {
+                return LocaleList.matchesLanguageAndScript(source, target);
+            } else {
+                return false;
+            }
+        }
+
         @VisibleForTesting
         void handleSupportedLocales() {
             //TODO Waiting for PackageManager api
diff --git a/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java b/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java
index a97656c..e185354 100644
--- a/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java
+++ b/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java
@@ -152,6 +152,26 @@
         assertFalse(helper.getSupportedLocales().isEmpty());
     }
 
+    @Test
+    @UiThreadTest
+    public void handleAllLocalesData_compareLocale() {
+        //Use LocaleList.matchScore() to compare two locales.
+        assertTrue(DummyAppLocaleDetailsHelper.compareLocale(Locale.forLanguageTag("en-US"),
+                Locale.forLanguageTag("en-CA")));
+        assertTrue(DummyAppLocaleDetailsHelper.compareLocale(Locale.forLanguageTag("zh-CN"),
+                Locale.forLanguageTag("zh")));
+        assertTrue(DummyAppLocaleDetailsHelper.compareLocale(Locale.forLanguageTag("zh-CN"),
+                Locale.forLanguageTag("zh-Hans")));
+        assertTrue(DummyAppLocaleDetailsHelper.compareLocale(Locale.forLanguageTag("zh-TW"),
+                Locale.forLanguageTag("zh-Hant")));
+
+        //Use Locale.equals() to compare two locales.
+        assertFalse(Locale.forLanguageTag("en-US").equals(Locale.forLanguageTag("en-CA")));
+        assertFalse(Locale.forLanguageTag("zh-CN").equals(Locale.forLanguageTag("zh")));
+        assertFalse(Locale.forLanguageTag("zh-CN").equals(Locale.forLanguageTag("zh-Hans")));
+        assertFalse(Locale.forLanguageTag("zh-TW").equals(Locale.forLanguageTag("zh-Hant")));
+    }
+
     /**
      * Sets the initial Locale data
      *