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();
