diff --git a/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java b/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java index a9689fc42cd..e3a8d238c4f 100644 --- a/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java +++ b/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java @@ -183,7 +183,8 @@ public class NumberingSystemItemController extends BasePreferenceController { 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 @@ public class NumberingSystemItemController extends BasePreferenceController { 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 @@ public class NumberingSystemItemController extends BasePreferenceController { 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 6a91295c00c..5c42ad9dbfe 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.preference.PreferenceScreen; 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 @@ public class NumberingSystemItemControllerTest { @After public void tearDown() { LocaleList.setDefault(mCacheLocale); + LocalePicker.updateLocales(mCacheLocale); } @Test @@ -122,6 +126,31 @@ public class NumberingSystemItemControllerTest { "test_key"); } + @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() {