summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author João Victor Mendes Freire <jvfreire@google.com> 2022-10-28 12:47:53 +0000
committer João Victor Mendes Freire <jvfreire@google.com> 2022-10-28 17:29:35 +0000
commit1cc5912bd2419d09a812bed6e800a34c6b6bbe16 (patch)
tree5b217f7e8cd425cc026793e0a293ecffea10b30e
parent19ba99d34b7c45ee271d9e88dea2347f24b26f4e (diff)
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
-rw-r--r--packages/SystemUI/src/com/android/systemui/user/domain/interactor/GuestUserInteractor.kt19
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/GuestUserInteractorTest.kt9
2 files changed, 22 insertions, 6 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/user/domain/interactor/GuestUserInteractor.kt b/packages/SystemUI/src/com/android/systemui/user/domain/interactor/GuestUserInteractor.kt
index 07e5cf9d9df2..f9d14cd1b7ca 100644
--- a/packages/SystemUI/src/com/android/systemui/user/domain/interactor/GuestUserInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/user/domain/interactor/GuestUserInteractor.kt
@@ -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
+ )
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/GuestUserInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/GuestUserInteractorTest.kt
index 120bf791c462..e49652148f3a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/GuestUserInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/GuestUserInteractorTest.kt
@@ -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)
}