Merge "[Regional Preference] Set numbering system when select it" into udc-dev am: 74ab90bb53

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/23258700

Change-Id: I093642000e42c8337b3f5cc6da6097d69da46eed
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java b/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java
index a9689fc..e3a8d23 100644
--- a/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java
+++ b/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java
@@ -183,7 +183,8 @@
                 Bundle bundle = new Bundle();
                 bundle.putString(RegionalPreferencesEntriesFragment.ARG_KEY_REGIONAL_PREFERENCE,
                         ARG_VALUE_NUMBERING_SYSTEM_SELECT);
-                bundle.putString(KEY_SELECTED_LANGUAGE, updatedLocale.toLanguageTag());
+                bundle.putString(KEY_SELECTED_LANGUAGE,
+                        updatedLocale != null ? updatedLocale.toLanguageTag() : "");
                 mParentFragment.setArguments(bundle);
                 continue;
             }
@@ -194,13 +195,14 @@
     private Locale saveNumberingSystemToLocale(Locale targetLocale, String value) {
         LocaleList localeList = LocalePicker.getLocales();
         Locale[] locales = new Locale[localeList.size()];
+        Locale updatedLocale = null;
         for (int i = 0; i < localeList.size(); i++) {
             Locale locale = localeList.get(i);
             if (targetLocale.equals(locale)) {
-                if (value.equals(RegionalPreferencesDataUtils.DEFAULT_VALUE)) {
+                if (RegionalPreferencesDataUtils.DEFAULT_VALUE.equals(value)) {
                     value = null;
                 }
-                Locale updatedLocale = new Locale.Builder()
+                updatedLocale = new Locale.Builder()
                         .setLocale(locale)
                         .setUnicodeLocaleKeyword(ExtensionTypes.NUMBERING_SYSTEM, value)
                         .build();
@@ -210,7 +212,7 @@
             locales[i] = localeList.get(i);
         }
         LocalePicker.updateLocales(new LocaleList(locales));
-        return targetLocale;
+        return updatedLocale;
     }
 
     private static String getNumberingSystem(Locale locale) {
diff --git a/tests/unit/src/com/android/settings/regionalpreferences/NumberingSystemItemControllerTest.java b/tests/unit/src/com/android/settings/regionalpreferences/NumberingSystemItemControllerTest.java
index 6a91295..5c42ad9 100644
--- a/tests/unit/src/com/android/settings/regionalpreferences/NumberingSystemItemControllerTest.java
+++ b/tests/unit/src/com/android/settings/regionalpreferences/NumberingSystemItemControllerTest.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.regionalpreferences;
 
+import static com.google.common.truth.Truth.assertThat;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
@@ -34,6 +36,7 @@
 import androidx.test.annotation.UiThreadTest;
 import androidx.test.core.app.ApplicationProvider;
 
+import com.android.internal.app.LocalePicker;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.widget.TickButtonPreference;
 
@@ -68,6 +71,7 @@
     @After
     public void tearDown() {
         LocaleList.setDefault(mCacheLocale);
+        LocalePicker.updateLocales(mCacheLocale);
     }
 
     @Test
@@ -124,6 +128,31 @@
 
     @Test
     @UiThreadTest
+    public void handlePreferenceTreeClick_numbersSelect_numberingSystemIsUpdated() {
+        LocalePicker.updateLocales(LocaleList.forLanguageTags("en-US,zh-TW,ar-BH"));
+        Bundle bundle = new Bundle();
+        bundle.putString(RegionalPreferencesEntriesFragment.ARG_KEY_REGIONAL_PREFERENCE,
+                NumberingSystemItemController.ARG_VALUE_NUMBERING_SYSTEM_SELECT);
+        bundle.putString(
+                NumberingSystemItemController.KEY_SELECTED_LANGUAGE, "ar-BH");
+        TickButtonPreference defaultPreference = new TickButtonPreference(mApplicationContext);
+        TickButtonPreference numberPreference = new TickButtonPreference(mApplicationContext);
+        defaultPreference.setKey("default");
+        numberPreference.setKey("latn");
+        mPreferenceScreen.addPreference(defaultPreference);
+        mPreferenceScreen.addPreference(numberPreference);
+        mController = new NumberingSystemItemController(mApplicationContext, bundle);
+        mController.setParentFragment(mFragment);
+        mController.displayPreference(mPreferenceScreen);
+
+        mController.handlePreferenceTreeClick(numberPreference);
+
+        assertThat(LocalePicker.getLocales().toLanguageTags()).contains(
+                "en-US,zh-TW,ar-BH-u-nu-latn");
+    }
+
+    @Test
+    @UiThreadTest
     public void displayPreference_languageOptAndHas2LocaleWithSingleNu_showNothing() {
         LocaleList.setDefault(LocaleList.forLanguageTags("en-US,zh-TW"));
         Bundle bundle = new Bundle();