Merge "Remove USER_SYSTEM usage."
This commit is contained in:
@@ -76,6 +76,9 @@ interface UserRepository {
|
||||
/** Whether user switching is currently in progress. */
|
||||
val userSwitchingInProgress: Flow<Boolean>
|
||||
|
||||
/** User ID of the main user. */
|
||||
val mainUserId: Int
|
||||
|
||||
/** User ID of the last non-guest selected user. */
|
||||
val lastSelectedNonGuestUserId: Int
|
||||
|
||||
@@ -130,7 +133,9 @@ constructor(
|
||||
private val _selectedUserInfo = MutableStateFlow<UserInfo?>(null)
|
||||
override val selectedUserInfo: Flow<UserInfo> = _selectedUserInfo.filterNotNull()
|
||||
|
||||
override var lastSelectedNonGuestUserId: Int = UserHandle.USER_SYSTEM
|
||||
override var mainUserId: Int = UserHandle.USER_NULL
|
||||
private set
|
||||
override var lastSelectedNonGuestUserId: Int = UserHandle.USER_NULL
|
||||
private set
|
||||
|
||||
override val isGuestUserAutoCreated: Boolean =
|
||||
@@ -172,6 +177,11 @@ constructor(
|
||||
// The guest user is always last, regardless of creation time.
|
||||
.sortedBy { it.isGuest }
|
||||
}
|
||||
|
||||
if (mainUserId == UserHandle.USER_NULL) {
|
||||
val mainUser = withContext(backgroundDispatcher) { manager.mainUser }
|
||||
mainUser?.let { mainUserId = it.identifier }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -139,11 +139,11 @@ constructor(
|
||||
}
|
||||
|
||||
applicationScope.launch {
|
||||
var newUserId = UserHandle.USER_SYSTEM
|
||||
var newUserId = repository.mainUserId
|
||||
if (targetUserId == UserHandle.USER_NULL) {
|
||||
// When a target user is not specified switch to last non guest user:
|
||||
val lastSelectedNonGuestUserHandle = repository.lastSelectedNonGuestUserId
|
||||
if (lastSelectedNonGuestUserHandle != UserHandle.USER_SYSTEM) {
|
||||
if (lastSelectedNonGuestUserHandle != repository.mainUserId) {
|
||||
val info =
|
||||
withContext(backgroundDispatcher) {
|
||||
manager.getUserInfo(lastSelectedNonGuestUserHandle)
|
||||
@@ -215,8 +215,11 @@ constructor(
|
||||
// Create a new guest in the foreground, and then immediately switch to it
|
||||
val newGuestId = create(showDialog, dismissDialog)
|
||||
if (newGuestId == UserHandle.USER_NULL) {
|
||||
Log.e(TAG, "Could not create new guest, switching back to system user")
|
||||
switchUser(UserHandle.USER_SYSTEM)
|
||||
Log.e(TAG, "Could not create new guest, switching back to main user")
|
||||
val mainUser = withContext(backgroundDispatcher) { manager.mainUser?.identifier }
|
||||
|
||||
mainUser?.let { switchUser(it) }
|
||||
|
||||
withContext(backgroundDispatcher) {
|
||||
manager.removeUserWhenPossible(
|
||||
UserHandle.of(currentUser.id),
|
||||
|
||||
@@ -128,6 +128,11 @@ class UserRepositoryImplTest : SysuiTestCase() {
|
||||
|
||||
@Test
|
||||
fun refreshUsers() = runSelfCancelingTest {
|
||||
val mainUserId = 10
|
||||
val mainUser = mock(UserHandle::class.java)
|
||||
whenever(manager.mainUser).thenReturn(mainUser)
|
||||
whenever(mainUser.identifier).thenReturn(mainUserId)
|
||||
|
||||
underTest = create(this)
|
||||
val initialExpectedValue =
|
||||
setUpUsers(
|
||||
@@ -166,6 +171,7 @@ class UserRepositoryImplTest : SysuiTestCase() {
|
||||
assertThat(selectedUserInfo).isEqualTo(thirdExpectedValue[1])
|
||||
assertThat(selectedUserInfo?.isGuest).isTrue()
|
||||
assertThat(underTest.lastSelectedNonGuestUserId).isEqualTo(selectedNonGuestUserId)
|
||||
assertThat(underTest.mainUserId).isEqualTo(mainUserId)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -204,10 +204,12 @@ class GuestUserInteractorTest : SysuiTestCase() {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `exit - last non-guest was removed - returns to system`() =
|
||||
fun `exit - last non-guest was removed - returns to main user`() =
|
||||
runBlocking(IMMEDIATE) {
|
||||
val removedUserId = 310
|
||||
val mainUserId = 10
|
||||
repository.lastSelectedNonGuestUserId = removedUserId
|
||||
repository.mainUserId = mainUserId
|
||||
repository.setSelectedUserInfo(GUEST_USER_INFO)
|
||||
|
||||
underTest.exit(
|
||||
@@ -221,7 +223,7 @@ class GuestUserInteractorTest : SysuiTestCase() {
|
||||
|
||||
verify(manager, never()).markGuestForDeletion(anyInt())
|
||||
verify(manager, never()).removeUser(anyInt())
|
||||
verify(switchUser).invoke(UserHandle.USER_SYSTEM)
|
||||
verify(switchUser).invoke(mainUserId)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -28,6 +28,10 @@ import kotlinx.coroutines.flow.filterNotNull
|
||||
import kotlinx.coroutines.yield
|
||||
|
||||
class FakeUserRepository : UserRepository {
|
||||
companion object {
|
||||
// User id to represent a non system (human) user id. We presume this is the main user.
|
||||
private const val MAIN_USER_ID = 10
|
||||
}
|
||||
|
||||
private val _userSwitcherSettings = MutableStateFlow(UserSwitcherSettingsModel())
|
||||
override val userSwitcherSettings: Flow<UserSwitcherSettingsModel> =
|
||||
@@ -43,7 +47,8 @@ class FakeUserRepository : UserRepository {
|
||||
override val userSwitchingInProgress: Flow<Boolean>
|
||||
get() = _userSwitchingInProgress
|
||||
|
||||
override var lastSelectedNonGuestUserId: Int = UserHandle.USER_SYSTEM
|
||||
override var mainUserId: Int = MAIN_USER_ID
|
||||
override var lastSelectedNonGuestUserId: Int = mainUserId
|
||||
|
||||
private var _isGuestUserAutoCreated: Boolean = false
|
||||
override val isGuestUserAutoCreated: Boolean
|
||||
|
||||
Reference in New Issue
Block a user