Fixed InitialUser.createUser() when it doesn't need to replace guest.

Test: InitialUserSetterTest#testSwitchUser_ok_guestDoesNotNeedToBeReplaced
Test: atest InitialUserSetterTest
Test: manual verification using User HAL and STR

Bug: 153679319
Fixes: 153686436

Change-Id: Ifc957f7e4a6c5de2a0cf145664114f88ffecd37c
diff --git a/tests/carservice_unit_test/src/android/car/userlib/InitialUserSetterTest.java b/tests/carservice_unit_test/src/android/car/userlib/InitialUserSetterTest.java
index cf360ec..de3bbe2 100644
--- a/tests/carservice_unit_test/src/android/car/userlib/InitialUserSetterTest.java
+++ b/tests/carservice_unit_test/src/android/car/userlib/InitialUserSetterTest.java
@@ -154,17 +154,18 @@
     }
 
     @Test
-    public void testSwitchUser_fail_guestDoesNotNeedToBeReplaced() throws Exception {
+    public void testSwitchUser_ok_guestDoesNotNeedToBeReplaced() throws Exception {
         boolean ephemeral = true; // ephemeral doesn't really matter in this test
-        expectGuestExists(USER_ID, ephemeral);
+        UserInfo existingGuest = expectGuestExists(USER_ID, ephemeral);
         expectSwitchUser(USER_ID);
 
         mSetter.switchUser(USER_ID, /* replaceGuest= */ false);
 
-        verifyUserNeverSwitched();
+        verifyUserSwitched(USER_ID);
         verifyGuestNeverMarkedForDeletion();
         verifyFallbackDefaultBehaviorNeverCalled();
         verifySystemUserUnlocked();
+        assertInitialUserSet(existingGuest);
     }
 
     @Test
@@ -596,7 +597,7 @@
         when(mLockPatternUtils.isSecure(userId)).thenReturn(true);
     }
 
-    private void expectGuestExists(@UserIdInt int userId, boolean isEphemeral) {
+    private UserInfo expectGuestExists(@UserIdInt int userId, boolean isEphemeral) {
         UserInfo user = new UserInfo();
         user.id = userId;
         user.userType = UserManager.USER_TYPE_FULL_GUEST;
@@ -604,6 +605,7 @@
             user.flags = UserInfo.FLAG_EPHEMERAL;
         }
         when(mUm.getUserInfo(userId)).thenReturn(user);
+        return user;
     }
 
     private void expectGuestReplaced(int existingGuestId, UserInfo newGuest) {
diff --git a/user/car-user-lib/src/android/car/userlib/InitialUserSetter.java b/user/car-user-lib/src/android/car/userlib/InitialUserSetter.java
index c959941..b231550 100644
--- a/user/car-user-lib/src/android/car/userlib/InitialUserSetter.java
+++ b/user/car-user-lib/src/android/car/userlib/InitialUserSetter.java
@@ -150,7 +150,10 @@
     }
 
     private void switchUser(@UserIdInt int userId, boolean replaceGuest, boolean fallback) {
-        if (DBG) Log.d(TAG, "switchUser(): userId=" + userId);
+        if (DBG) {
+            Log.d(TAG, "switchUser(): userId=" + userId + ", replaceGuest=" + replaceGuest
+                    + ", fallback=" + fallback);
+        }
 
         UserInfo user = mUm.getUserInfo(userId);
         if (user == null) {
@@ -158,16 +161,11 @@
             return;
         }
 
+        if (DBG) Log.d(TAG, "switchUser(): " + user.toFullString());
+
         UserInfo actualUser = user;
 
-        if (user.isGuest()) {
-            if (!replaceGuest) {
-                if (DBG) {
-                    Log.d(TAG, "not switching to guest user when replaceGuest is false");
-                }
-                unlockSystemUserIfNecessary(user.id);
-                return;
-            }
+        if (user.isGuest() && replaceGuest) {
             actualUser = replaceGuestIfNeeded(user);
 
             if (actualUser == null) {