Merge "Fix a bug where the locale was not switching properly for user-10." into sc-v2-dev
diff --git a/service/src/com/android/car/user/InitialUserSetter.java b/service/src/com/android/car/user/InitialUserSetter.java
index 29406db..69fdfcf 100644
--- a/service/src/com/android/car/user/InitialUserSetter.java
+++ b/service/src/com/android/car/user/InitialUserSetter.java
@@ -241,7 +241,13 @@
          */
         @NonNull
         public Builder setUserLocales(@Nullable String userLocales) {
-            mUserLocales = userLocales;
+            // This string can come from a binder IPC call where empty string is the default value
+            // for the auto-generated code. So, need to check for that.
+            if (userLocales != null && userLocales.trim().isEmpty()) {
+                mUserLocales = null;
+            } else {
+                mUserLocales = userLocales;
+            }
             return this;
         }
 
diff --git a/tests/carservice_unit_test/src/com/android/car/user/InitialUserSetterTest.java b/tests/carservice_unit_test/src/com/android/car/user/InitialUserSetterTest.java
index 3a7430b..1cb5d41 100644
--- a/tests/carservice_unit_test/src/com/android/car/user/InitialUserSetterTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/user/InitialUserSetterTest.java
@@ -593,6 +593,40 @@
     }
 
     @Test
+    public void testDefaultBehavior_firstBoot_ok_setEmptyLocale() throws Exception {
+        // no need to mock hasInitialUser(), it will return false by default
+        UserInfo newUser = expectCreateFullUser(USER_ID, OWNER_NAME, UserInfo.FLAG_ADMIN);
+        expectSwitchUser(USER_ID);
+
+        mSetter.set(new Builder(InitialUserSetter.TYPE_DEFAULT_BEHAVIOR)
+                .setUserLocales("")
+                .build());
+
+        verifyUserSwitched(USER_ID);
+        verifyFallbackDefaultBehaviorNeverCalled();
+        verifySystemUserUnlocked();
+        assertInitialUserSet(newUser);
+        assertSystemLocalesToBeNull();
+    }
+
+    @Test
+    public void testDefaultBehavior_firstBoot_ok_setBlankLocale() throws Exception {
+        // no need to mock hasInitialUser(), it will return false by default
+        UserInfo newUser = expectCreateFullUser(USER_ID, OWNER_NAME, UserInfo.FLAG_ADMIN);
+        expectSwitchUser(USER_ID);
+
+        mSetter.set(new Builder(InitialUserSetter.TYPE_DEFAULT_BEHAVIOR)
+                .setUserLocales(" ")
+                .build());
+
+        verifyUserSwitched(USER_ID);
+        verifyFallbackDefaultBehaviorNeverCalled();
+        verifySystemUserUnlocked();
+        assertInitialUserSet(newUser);
+        assertSystemLocalesToBeNull();
+    }
+
+    @Test
     public void testDefaultBehavior_firstBoot_fail_createUserFailed() throws Exception {
         // no need to mock hasInitialUser(), it will return false by default
         // no need to mock createUser(), it will return null by default
@@ -1182,6 +1216,10 @@
         assertThat(getSettingsString(Settings.System.SYSTEM_LOCALES)).isEqualTo(expected);
     }
 
+    private void assertSystemLocalesToBeNull() {
+        assertThat(getSettingsString(Settings.System.SYSTEM_LOCALES)).isNull();
+    }
+
     private final class MyListener implements Consumer<UserInfo> {
         public int numberCalls;
         public UserInfo initialUser;