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) {