Fix guest user not being removed until boot
Updated the GuestUserInteractor on user switcher to use removeUserWhenPossible() instead of removeUser(), similar to what happens on UserSettings. This avoids the case where the guest user markes itself to be deleted, but cannot be removed by the UserManager because it is the current user, so it will be purged only when the device reboots. With removeUserWhenPossible(), the guest will be remove uppon reboot or user switch. Bug: 250544682 Test: atest GuestUserInteractorTest && manually tested Change-Id: I3b185842348e452b18da4cd346062656a1043114
This commit is contained in:
@@ -208,7 +208,12 @@ constructor(
|
||||
if (newGuestId == UserHandle.USER_NULL) {
|
||||
Log.e(TAG, "Could not create new guest, switching back to system user")
|
||||
switchUser(UserHandle.USER_SYSTEM)
|
||||
withContext(backgroundDispatcher) { manager.removeUser(currentUser.id) }
|
||||
withContext(backgroundDispatcher) {
|
||||
manager.removeUserWhenPossible(
|
||||
UserHandle.of(currentUser.id),
|
||||
/* overrideDevicePolicy= */ false
|
||||
)
|
||||
}
|
||||
try {
|
||||
WindowManagerGlobal.getWindowManagerService().lockNow(/* options= */ null)
|
||||
} catch (e: RemoteException) {
|
||||
@@ -222,13 +227,21 @@ constructor(
|
||||
|
||||
switchUser(newGuestId)
|
||||
|
||||
withContext(backgroundDispatcher) { manager.removeUser(currentUser.id) }
|
||||
withContext(backgroundDispatcher) {
|
||||
manager.removeUserWhenPossible(
|
||||
UserHandle.of(currentUser.id),
|
||||
/* overrideDevicePolicy= */ false
|
||||
)
|
||||
}
|
||||
} else {
|
||||
if (repository.isGuestUserAutoCreated) {
|
||||
repository.isGuestUserResetting = true
|
||||
}
|
||||
switchUser(targetUserId)
|
||||
manager.removeUser(currentUser.id)
|
||||
manager.removeUserWhenPossible(
|
||||
UserHandle.of(currentUser.id),
|
||||
/* overrideDevicePolicy= */ false
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -219,6 +219,7 @@ class GuestUserInteractorTest : SysuiTestCase() {
|
||||
repository.setUserInfos(listOf(NON_GUEST_USER_INFO, EPHEMERAL_GUEST_USER_INFO))
|
||||
repository.setSelectedUserInfo(EPHEMERAL_GUEST_USER_INFO)
|
||||
val targetUserId = NON_GUEST_USER_INFO.id
|
||||
val ephemeralGuestUserHandle = UserHandle.of(EPHEMERAL_GUEST_USER_INFO.id)
|
||||
|
||||
underTest.exit(
|
||||
guestUserId = GUEST_USER_INFO.id,
|
||||
@@ -230,7 +231,7 @@ class GuestUserInteractorTest : SysuiTestCase() {
|
||||
)
|
||||
|
||||
verify(manager).markGuestForDeletion(EPHEMERAL_GUEST_USER_INFO.id)
|
||||
verify(manager).removeUser(EPHEMERAL_GUEST_USER_INFO.id)
|
||||
verify(manager).removeUserWhenPossible(ephemeralGuestUserHandle, false)
|
||||
verify(switchUser).invoke(targetUserId)
|
||||
}
|
||||
|
||||
@@ -240,6 +241,7 @@ class GuestUserInteractorTest : SysuiTestCase() {
|
||||
whenever(manager.markGuestForDeletion(anyInt())).thenReturn(true)
|
||||
repository.setSelectedUserInfo(GUEST_USER_INFO)
|
||||
val targetUserId = NON_GUEST_USER_INFO.id
|
||||
val guestUserHandle = UserHandle.of(GUEST_USER_INFO.id)
|
||||
|
||||
underTest.exit(
|
||||
guestUserId = GUEST_USER_INFO.id,
|
||||
@@ -251,7 +253,7 @@ class GuestUserInteractorTest : SysuiTestCase() {
|
||||
)
|
||||
|
||||
verify(manager).markGuestForDeletion(GUEST_USER_INFO.id)
|
||||
verify(manager).removeUser(GUEST_USER_INFO.id)
|
||||
verify(manager).removeUserWhenPossible(guestUserHandle, false)
|
||||
verify(switchUser).invoke(targetUserId)
|
||||
}
|
||||
|
||||
@@ -296,6 +298,7 @@ class GuestUserInteractorTest : SysuiTestCase() {
|
||||
repository.setSelectedUserInfo(GUEST_USER_INFO)
|
||||
|
||||
val targetUserId = NON_GUEST_USER_INFO.id
|
||||
val guestUserHandle = UserHandle.of(GUEST_USER_INFO.id)
|
||||
underTest.remove(
|
||||
guestUserId = GUEST_USER_INFO.id,
|
||||
targetUserId = targetUserId,
|
||||
@@ -305,7 +308,7 @@ class GuestUserInteractorTest : SysuiTestCase() {
|
||||
)
|
||||
|
||||
verify(manager).markGuestForDeletion(GUEST_USER_INFO.id)
|
||||
verify(manager).removeUser(GUEST_USER_INFO.id)
|
||||
verify(manager).removeUserWhenPossible(guestUserHandle, false)
|
||||
verify(switchUser).invoke(targetUserId)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user