Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e182b0d4 authored by Aaron Liu's avatar Aaron Liu Committed by Android (Google) Code Review
Browse files

Merge "[User Switcher] remove add guest user..." into tm-qpr-dev

parents 253592b4 00114b1b
Loading
Loading
Loading
Loading
+20 −13
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.qs.user.UserSwitchDialogController
import com.android.systemui.telephony.domain.interactor.TelephonyInteractor
import com.android.systemui.user.data.model.UserSwitcherSettingsModel
import com.android.systemui.user.data.repository.UserRepository
import com.android.systemui.user.data.source.UserRecord
import com.android.systemui.user.domain.model.ShowDialogRequestModel
@@ -61,6 +62,7 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
@@ -108,12 +110,16 @@ constructor(

    private val callbackMutex = Mutex()
    private val callbacks = mutableSetOf<UserCallback>()
    private val userInfos =
        combine(repository.userSwitcherSettings, repository.userInfos) { settings, userInfos ->
            userInfos.filter { !it.isGuest || canCreateGuestUser(settings) }
        }

    /** List of current on-device users to select from. */
    val users: Flow<List<UserModel>>
        get() =
            combine(
                repository.userInfos,
                userInfos,
                repository.selectedUserInfo,
                repository.userSwitcherSettings,
            ) { userInfos, selectedUserInfo, settings ->
@@ -147,22 +153,13 @@ constructor(
        get() =
            combine(
                repository.selectedUserInfo,
                repository.userInfos,
                userInfos,
                repository.userSwitcherSettings,
                keyguardInteractor.isKeyguardShowing,
            ) { _, userInfos, settings, isDeviceLocked ->
                buildList {
                    val hasGuestUser = userInfos.any { it.isGuest }
                    if (
                        !hasGuestUser &&
                            (guestUserInteractor.isGuestUserAutoCreated ||
                                UserActionsUtil.canCreateGuest(
                                    manager,
                                    repository,
                                    settings.isUserSwitcherEnabled,
                                    settings.isAddUsersFromLockscreen,
                                ))
                    ) {
                    if (!hasGuestUser && canCreateGuestUser(settings)) {
                        add(UserActionModel.ENTER_GUEST_MODE)
                    }

@@ -211,7 +208,7 @@ constructor(

    val userRecords: StateFlow<ArrayList<UserRecord>> =
        combine(
                repository.userInfos,
                userInfos,
                repository.selectedUserInfo,
                actions,
                repository.userSwitcherSettings,
@@ -687,6 +684,16 @@ constructor(
        )
    }

    private fun canCreateGuestUser(settings: UserSwitcherSettingsModel): Boolean {
        return guestUserInteractor.isGuestUserAutoCreated ||
            UserActionsUtil.canCreateGuest(
                manager,
                repository,
                settings.isUserSwitcherEnabled,
                settings.isAddUsersFromLockscreen,
            )
    }

    companion object {
        private const val TAG = "UserInteractor"
    }
+43 −0
Original line number Diff line number Diff line
@@ -672,6 +672,49 @@ class UserInteractorTest : SysuiTestCase() {
            )
        }

    @Test
    fun `users - secondary user - no guest user`() =
        runBlocking(IMMEDIATE) {
            val userInfos = createUserInfos(count = 3, includeGuest = true)
            userRepository.setUserInfos(userInfos)
            userRepository.setSelectedUserInfo(userInfos[1])
            userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))

            var res: List<UserModel>? = null
            val job = underTest.users.onEach { res = it }.launchIn(this)
            assertThat(res?.size == 2).isTrue()
            assertThat(res?.find { it.isGuest }).isNull()
            job.cancel()
        }

    @Test
    fun `users - secondary user - no guest action`() =
        runBlocking(IMMEDIATE) {
            val userInfos = createUserInfos(count = 3, includeGuest = true)
            userRepository.setUserInfos(userInfos)
            userRepository.setSelectedUserInfo(userInfos[1])
            userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))

            var res: List<UserActionModel>? = null
            val job = underTest.actions.onEach { res = it }.launchIn(this)
            assertThat(res?.find { it == UserActionModel.ENTER_GUEST_MODE }).isNull()
            job.cancel()
        }

    @Test
    fun `users - secondary user - no guest user record`() =
        runBlocking(IMMEDIATE) {
            val userInfos = createUserInfos(count = 3, includeGuest = true)
            userRepository.setUserInfos(userInfos)
            userRepository.setSelectedUserInfo(userInfos[1])
            userRepository.setSettings(UserSwitcherSettingsModel(isUserSwitcherEnabled = true))

            var res: List<UserRecord>? = null
            val job = underTest.userRecords.onEach { res = it }.launchIn(this)
            assertThat(res?.find { it.isGuest }).isNull()
            job.cancel()
        }

    private fun assertUsers(
        models: List<UserModel>?,
        count: Int,