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

Commit c9701437 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes I7860df35,I0b1c399e into main

* changes:
  Use separate "logout eligibility" logic for managed and desktop logouts
  Rename logout methods in UserRepository for extra clarity
parents 2b5c9f93 aa3e1294
Loading
Loading
Loading
Loading
+110 −46
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@ import android.content.pm.UserInfo
import android.internal.statusbar.fakeStatusBarService
import android.os.UserHandle
import android.os.UserManager
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.provider.Settings
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
@@ -234,13 +236,26 @@ class UserRepositoryImplTest : SysuiTestCase() {
    private fun setUpUsers(
        count: Int,
        isLastGuestUser: Boolean = false,
        isFirstSystemUser: Boolean = false,
        selectedIndex: Int = 0,
    ): List<UserInfo> {
        val userInfos =
            (0 until count).map { index ->
                createUserInfo(index, isGuest = isLastGuestUser && index == count - 1)
                createUserInfo(
                    index,
                    isSystem = isFirstSystemUser && index == 0,
                    isGuest = isLastGuestUser && index == count - 1,
                )
            }
        whenever(manager.aliveUsers).thenReturn(userInfos)
        whenever(manager.getUserLogoutability(userInfos[selectedIndex].id))
            .thenReturn(
                if (isFirstSystemUser && selectedIndex == 0) {
                    UserManager.LOGOUTABILITY_STATUS_CANNOT_LOGOUT_SYSTEM_USER
                } else {
                    UserManager.LOGOUTABILITY_STATUS_OK
                }
            )
        tracker.set(userInfos, selectedIndex)
        return userInfos
    }
@@ -310,124 +325,172 @@ class UserRepositoryImplTest : SysuiTestCase() {
        }

    @Test
    fun isSecondaryUserLogoutEnabled_secondaryLogoutDisabled_alwaysFalse() =
    fun isPolicyManagerLogoutEnabled_policyManagerLogoutDisabled_alwaysFalse() =
        testScope.runTest {
            underTest = create(testScope.backgroundScope)
            mockLogoutUser(LogoutUserResult.NON_SYSTEM_CURRENT)
            setSecondaryUserLogoutEnabled(false)
            mockPolicyManagerLogoutUser(LogoutUserResult.NON_SYSTEM_CURRENT)
            setPolicyManagerLogoutEnabled(false)
            setUpUsers(count = 2, selectedIndex = 0)
            tracker.onProfileChanged()

            val secondaryUserLogoutEnabled by
                collectLastValue(underTest.isSecondaryUserLogoutEnabled)
            val policyManagerLogoutEnabled by
                collectLastValue(underTest.isPolicyManagerLogoutEnabled)

            assertThat(secondaryUserLogoutEnabled).isFalse()
            assertThat(policyManagerLogoutEnabled).isFalse()

            setUpUsers(count = 2, selectedIndex = 1)
            tracker.onProfileChanged()
            assertThat(secondaryUserLogoutEnabled).isFalse()
            assertThat(policyManagerLogoutEnabled).isFalse()
        }

    @Test
    fun isSecondaryUserLogoutEnabled_secondaryLogoutEnabled_NullLogoutUser_alwaysFalse() =
    fun isPolicyManagerLogoutEnabled_policyManagerLogoutEnabled_NullLogoutUser_alwaysFalse() =
        testScope.runTest {
            underTest = create(testScope.backgroundScope)
            mockLogoutUser(LogoutUserResult.NONE)
            setSecondaryUserLogoutEnabled(true)
            mockPolicyManagerLogoutUser(LogoutUserResult.NONE)
            setPolicyManagerLogoutEnabled(true)
            setUpUsers(count = 2, selectedIndex = 0)
            tracker.onProfileChanged()

            val secondaryUserLogoutEnabled by
                collectLastValue(underTest.isSecondaryUserLogoutEnabled)
            val policyManagerLogoutEnabled by
                collectLastValue(underTest.isPolicyManagerLogoutEnabled)

            assertThat(secondaryUserLogoutEnabled).isFalse()
            assertThat(policyManagerLogoutEnabled).isFalse()

            setUpUsers(count = 2, selectedIndex = 1)
            tracker.onProfileChanged()
            assertThat(secondaryUserLogoutEnabled).isFalse()
            assertThat(policyManagerLogoutEnabled).isFalse()
        }

    @Test
    fun isSecondaryUserLogoutEnabled_secondaryLogoutEnabled_NonSystemLogoutUser_trueWhenNonSystem() =
    fun isPolicyManagerLogoutEnabled_policyManagerLogoutEnabled_NonSystemLogoutUser_trueWhenNonSystem() =
        testScope.runTest {
            underTest = create(testScope.backgroundScope)
            mockLogoutUser(LogoutUserResult.NON_SYSTEM_CURRENT)
            setSecondaryUserLogoutEnabled(true)
            mockPolicyManagerLogoutUser(LogoutUserResult.NON_SYSTEM_CURRENT)
            setPolicyManagerLogoutEnabled(true)
            setUpUsers(count = 2, selectedIndex = 0)
            tracker.onProfileChanged()

            val secondaryUserLogoutEnabled by
                collectLastValue(underTest.isSecondaryUserLogoutEnabled)
            val policyManagerLogoutEnabled by
                collectLastValue(underTest.isPolicyManagerLogoutEnabled)

            assertThat(secondaryUserLogoutEnabled).isFalse()
            assertThat(policyManagerLogoutEnabled).isFalse()

            setUpUsers(count = 2, selectedIndex = 1)
            tracker.onProfileChanged()
            assertThat(secondaryUserLogoutEnabled).isTrue()
            assertThat(policyManagerLogoutEnabled).isTrue()
        }

    @Test
    fun isLogoutToSystemUserEnabled_logoutThroughLoginScreenDisabled_alwaysFalse() =
    fun isLogoutWithUserManagerEnabled_userManagerLogoutDisabled_alwaysFalse() =
        testScope.runTest {
            underTest = create(testScope.backgroundScope)
            mockLogoutUser(LogoutUserResult.NON_SYSTEM_CURRENT)
            mockPolicyManagerLogoutUser(LogoutUserResult.NON_SYSTEM_CURRENT)
            setUserSwitchingMustGoThroughLoginScreen(false)
            setUpUsers(count = 2, selectedIndex = 0)
            tracker.onProfileChanged()

            val logoutToSystemUserEnabled by collectLastValue(underTest.isLogoutToSystemUserEnabled)
            val userManagerLogoutEnabled by collectLastValue(underTest.isUserManagerLogoutEnabled)

            assertThat(logoutToSystemUserEnabled).isFalse()
            assertThat(userManagerLogoutEnabled).isFalse()

            setUpUsers(count = 2, selectedIndex = 1)
            tracker.onProfileChanged()
            assertThat(logoutToSystemUserEnabled).isFalse()
            assertThat(userManagerLogoutEnabled).isFalse()
        }

    @Test
    fun isLogoutToSystemUserEnabled_logoutThroughLoginScreenEnabled_NullLogoutUser_alwaysFalse() =
    @EnableFlags(android.multiuser.Flags.FLAG_LOGOUT_USER_API)
    fun isLogoutWithUserManagerEnabled_userManagerLogoutEnabled_systemUserLogoutDisabled() =
        testScope.runTest {
            underTest = create(testScope.backgroundScope)
            mockLogoutUser(LogoutUserResult.NONE)
            setUserSwitchingMustGoThroughLoginScreen(true)
            setUpUsers(count = 2, selectedIndex = 0)
            tracker.onProfileChanged()
            setUpUsers(
                count = 3,
                selectedIndex = 0,
                isFirstSystemUser = true,
                isLastGuestUser = true,
            )
            val userManagerLogoutEnabled by collectLastValue(underTest.isUserManagerLogoutEnabled)

            val logoutToSystemUserEnabled by collectLastValue(underTest.isLogoutToSystemUserEnabled)
            tracker.onProfileChanged()
            assertThat(userManagerLogoutEnabled).isFalse()
        }

            assertThat(logoutToSystemUserEnabled).isFalse()
    @Test
    @EnableFlags(android.multiuser.Flags.FLAG_LOGOUT_USER_API)
    fun isLogoutWithUserManagerEnabled_userManagerLogoutEnabled_regularUserLogoutEnabled() =
        testScope.runTest {
            underTest = create(testScope.backgroundScope)
            setUserSwitchingMustGoThroughLoginScreen(true)
            setUpUsers(
                count = 3,
                selectedIndex = 1,
                isFirstSystemUser = true,
                isLastGuestUser = true,
            )
            val userManagerLogoutEnabled by collectLastValue(underTest.isUserManagerLogoutEnabled)

            setUpUsers(count = 2, selectedIndex = 1)
            tracker.onProfileChanged()
            assertThat(logoutToSystemUserEnabled).isFalse()
            assertThat(userManagerLogoutEnabled).isTrue()
        }

    @Test
    fun isLogoutToSystemUserEnabled_logoutThroughLoginScreenEnabled_NonSystemLogoutUser_trueWhenNonSystem() =
    @EnableFlags(android.multiuser.Flags.FLAG_LOGOUT_USER_API)
    fun isLogoutWithUserManagerEnabled_userManagerLogoutEnabled_guestUserLogoutEnabled() =
        testScope.runTest {
            underTest = create(testScope.backgroundScope)
            mockLogoutUser(LogoutUserResult.NON_SYSTEM_CURRENT)
            setUserSwitchingMustGoThroughLoginScreen(true)
            setUpUsers(count = 2, selectedIndex = 0)
            setUpUsers(
                count = 3,
                selectedIndex = 2,
                isFirstSystemUser = true,
                isLastGuestUser = true,
            )
            val userManagerLogoutEnabled by collectLastValue(underTest.isUserManagerLogoutEnabled)

            tracker.onProfileChanged()
            assertThat(userManagerLogoutEnabled).isTrue()
        }

    @Test
    @DisableFlags(android.multiuser.Flags.FLAG_LOGOUT_USER_API)
    fun isLogoutWithUserManagerEnabled_userManagerLogoutEnabled_noLogoutApi_systemUserLogoutDisabled() =
        testScope.runTest {
            underTest = create(testScope.backgroundScope)
            setUserSwitchingMustGoThroughLoginScreen(true)
            setUpUsers(count = 2, selectedIndex = 0, isFirstSystemUser = true)
            val userManagerLogoutEnabled by collectLastValue(underTest.isUserManagerLogoutEnabled)

            val logoutToSystemUserEnabled by collectLastValue(underTest.isLogoutToSystemUserEnabled)
            tracker.onProfileChanged()
            assertThat(userManagerLogoutEnabled).isFalse()
        }

            assertThat(logoutToSystemUserEnabled).isFalse()
    @Test
    @DisableFlags(android.multiuser.Flags.FLAG_LOGOUT_USER_API)
    fun isLogoutWithUserManagerEnabled_userManagerLogoutEnabled_noLogoutApi_regularUserLogoutEnabled() =
        testScope.runTest {
            underTest = create(testScope.backgroundScope)
            setUserSwitchingMustGoThroughLoginScreen(true)
            setUpUsers(count = 2, selectedIndex = 1, isFirstSystemUser = true)
            val userManagerLogoutEnabled by collectLastValue(underTest.isUserManagerLogoutEnabled)

            setUpUsers(count = 2, selectedIndex = 1)
            tracker.onProfileChanged()
            assertThat(logoutToSystemUserEnabled).isTrue()
            assertThat(userManagerLogoutEnabled).isTrue()
        }

    private fun createUserInfo(id: Int, isGuest: Boolean): UserInfo {
    private fun createUserInfo(id: Int, isSystem: Boolean, isGuest: Boolean): UserInfo {
        val flags = 0
        return UserInfo(
            id,
            "user_$id",
            /* iconPath= */ "",
            flags,
            if (isGuest) UserManager.USER_TYPE_FULL_GUEST else UserInfo.getDefaultUserType(flags),
            when {
                isSystem -> UserManager.USER_TYPE_FULL_SYSTEM
                isGuest -> UserManager.USER_TYPE_FULL_GUEST
                else -> UserInfo.getDefaultUserType(flags)
            },
        )
    }

@@ -466,7 +529,7 @@ class UserRepositoryImplTest : SysuiTestCase() {
        assertThat(model.isUserSwitcherEnabled).isEqualTo(expectedUserSwitcherEnabled)
    }

    private fun setSecondaryUserLogoutEnabled(enabled: Boolean) {
    private fun setPolicyManagerLogoutEnabled(enabled: Boolean) {
        whenever(devicePolicyManager.isLogoutEnabled).thenReturn(enabled)
        broadcastDispatcher.sendIntentToMatchingReceiversOnly(
            kosmos.applicationContext,
@@ -481,11 +544,12 @@ class UserRepositoryImplTest : SysuiTestCase() {
        )
    }

    private fun mockLogoutUser(result: LogoutUserResult) {
    private fun mockPolicyManagerLogoutUser(result: LogoutUserResult) {
        when (result) {
            LogoutUserResult.NONE -> {
                whenever(devicePolicyManager.logoutUser).thenReturn(null)
            }

            LogoutUserResult.NON_SYSTEM_CURRENT -> {
                whenever(devicePolicyManager.logoutUser).thenAnswer {
                    if (tracker.userHandle != UserHandle.SYSTEM) {
+27 −25
Original line number Diff line number Diff line
@@ -48,67 +48,69 @@ class UserLogoutInteractorTest : SysuiTestCase() {
    fun setUp() {
        userRepository.setUserInfos(USER_INFOS)
        runBlocking { userRepository.setSelectedUserInfo(USER_INFOS[2]) }
        userRepository.setLogoutToSystemUserEnabled(false)
        userRepository.setSecondaryUserLogoutEnabled(false)
        userRepository.setUserManagerLogoutEnabled(false)
        userRepository.setPolicyManagerLogoutEnabled(false)
    }

    @Test
    fun logOut_doesNothing_whenBothLogoutOptionsAreDisabled() {
        testScope.runTest {
            val isLogoutEnabled by collectLastValue(underTest.isLogoutEnabled)
            val secondaryUserLogoutCount = userRepository.logOutSecondaryUserCallCount
            val logoutToSystemUserCount = userRepository.logOutToSystemUserCallCount
            val secondaryUserLogoutCount = userRepository.logOutWithPolicyManagerCallCount
            val logoutToSystemUserCount = userRepository.logOutWithUserManagerCallCount
            assertThat(isLogoutEnabled).isFalse()
            underTest.logOut()
            assertThat(userRepository.logOutSecondaryUserCallCount)
            assertThat(userRepository.logOutWithPolicyManagerCallCount)
                .isEqualTo(secondaryUserLogoutCount)
            assertThat(userRepository.logOutToSystemUserCallCount)
            assertThat(userRepository.logOutWithUserManagerCallCount)
                .isEqualTo(logoutToSystemUserCount)
        }
    }

    @Test
    fun logOut_logsOutSecondaryUser_whenAdminEnabledSecondaryLogout() {
    fun logOut_logsOutUsingPolicyManager_whenPolicyManagerLogoutIsEnabled() {
        testScope.runTest {
            val isLogoutEnabled by collectLastValue(underTest.isLogoutEnabled)
            val lastLogoutCount = userRepository.logOutSecondaryUserCallCount
            val logoutToSystemUserCount = userRepository.logOutToSystemUserCallCount
            userRepository.setSecondaryUserLogoutEnabled(true)
            val lastLogoutCount = userRepository.logOutWithPolicyManagerCallCount
            val logoutToSystemUserCount = userRepository.logOutWithUserManagerCallCount
            userRepository.setPolicyManagerLogoutEnabled(true)
            assertThat(isLogoutEnabled).isTrue()
            underTest.logOut()
            assertThat(userRepository.logOutSecondaryUserCallCount).isEqualTo(lastLogoutCount + 1)
            assertThat(userRepository.logOutToSystemUserCallCount)
            assertThat(userRepository.logOutWithPolicyManagerCallCount)
                .isEqualTo(lastLogoutCount + 1)
            assertThat(userRepository.logOutWithUserManagerCallCount)
                .isEqualTo(logoutToSystemUserCount)
        }
    }

    @Test
    fun logOut_logsOutToSystemUser_whenLogoutToSystemUserIsEnabled() {
    fun logOut_logsOutUsingUserManager_whenLogoutWithUserManagerIsEnabled() {
        testScope.runTest {
            val isLogoutEnabled by collectLastValue(underTest.isLogoutEnabled)
            val lastLogoutCount = userRepository.logOutSecondaryUserCallCount
            val logoutToSystemUserCount = userRepository.logOutToSystemUserCallCount
            userRepository.setLogoutToSystemUserEnabled(true)
            val lastLogoutCount = userRepository.logOutWithPolicyManagerCallCount
            val logoutToSystemUserCount = userRepository.logOutWithUserManagerCallCount
            userRepository.setUserManagerLogoutEnabled(true)
            assertThat(isLogoutEnabled).isTrue()
            underTest.logOut()
            assertThat(userRepository.logOutSecondaryUserCallCount).isEqualTo(lastLogoutCount)
            assertThat(userRepository.logOutToSystemUserCallCount)
            assertThat(userRepository.logOutWithPolicyManagerCallCount).isEqualTo(lastLogoutCount)
            assertThat(userRepository.logOutWithUserManagerCallCount)
                .isEqualTo(logoutToSystemUserCount + 1)
        }
    }

    @Test
    fun logOut_secondaryUserTakesPrecedence() {
    fun logOut_policyManagerTakesPrecedence() {
        testScope.runTest {
            val isLogoutEnabled by collectLastValue(underTest.isLogoutEnabled)
            val lastLogoutCount = userRepository.logOutSecondaryUserCallCount
            val logoutToSystemUserCount = userRepository.logOutToSystemUserCallCount
            userRepository.setLogoutToSystemUserEnabled(true)
            userRepository.setSecondaryUserLogoutEnabled(true)
            val lastLogoutCount = userRepository.logOutWithPolicyManagerCallCount
            val logoutToSystemUserCount = userRepository.logOutWithUserManagerCallCount
            userRepository.setUserManagerLogoutEnabled(true)
            userRepository.setPolicyManagerLogoutEnabled(true)
            assertThat(isLogoutEnabled).isTrue()
            underTest.logOut()
            assertThat(userRepository.logOutSecondaryUserCallCount).isEqualTo(lastLogoutCount + 1)
            assertThat(userRepository.logOutToSystemUserCallCount)
            assertThat(userRepository.logOutWithPolicyManagerCallCount)
                .isEqualTo(lastLogoutCount + 1)
            assertThat(userRepository.logOutWithUserManagerCallCount)
                .isEqualTo(logoutToSystemUserCount)
        }
    }
+49 −43
Original line number Diff line number Diff line
@@ -113,11 +113,19 @@ interface UserRepository {
    /** Whether refresh users should be paused. */
    var isRefreshUsersPaused: Boolean

    /** Whether logout for secondary users is enabled by admin device policy. */
    val isSecondaryUserLogoutEnabled: StateFlow<Boolean>
    /**
     * Whether logout back to primary user can be performed by the device Policy Manager for the
     * secondary account. See
     * https://developer.android.com/work/dpc/dedicated-devices/multiple-users#logout for more
     * details.
     */
    val isPolicyManagerLogoutEnabled: StateFlow<Boolean>

    /** Whether logout into system user is enabled. */
    val isLogoutToSystemUserEnabled: StateFlow<Boolean>
    /**
     * Whether logout can be performed by the UserManager, to support desktop-style logout into the
     * neutral login space.
     */
    val isUserManagerLogoutEnabled: StateFlow<Boolean>

    /** Asynchronously refresh the list of users. This will cause [userInfos] to be updated. */
    fun refreshUsers()
@@ -128,11 +136,11 @@ interface UserRepository {

    fun isUserSwitcherEnabled(): Boolean

    /** Performs logout logout for secondary users. */
    suspend fun logOutSecondaryUser()
    /** Performs logout from secondary user into primary user via DevicePolicyManager. */
    suspend fun logOutWithPolicyManager()

    /** Performs logout into the system user. */
    suspend fun logOutToSystemUser()
    /** Performs logout into the system user via UserManager. */
    suspend fun logOutWithUserManager()

    /**
     * Returns the user ID of the "main user" of the device. This user may have access to certain
@@ -258,32 +266,25 @@ constructor(

    override val selectedUserInfo: Flow<UserInfo> = selectedUser.map { it.userInfo }

    /** Whether the secondary user logout is enabled by the admin device policy. */
    private val isSecondaryUserLogoutSupported: Flow<Boolean> =
    /** Cold flow that emits upon ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED broadcast. */
    private val devicePolicyManagerStateChangeEvents: Flow<Unit> =
        broadcastDispatcher
            .broadcastFlow(
                filter =
                IntentFilter(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED)
            ) { intent, _ ->
                if (
                    DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED == intent.action
                ) {
                    Unit
                } else {
                    null
                }
            }
            .filterNotNull()
            )
            .onStart { emit(Unit) }
            .map { _ -> devicePolicyManager.isLogoutEnabled() }
            .flowOn(backgroundDispatcher)

    @SuppressLint("MissingPermission")
    override val isSecondaryUserLogoutEnabled: StateFlow<Boolean> =
    override val isPolicyManagerLogoutEnabled: StateFlow<Boolean> =
        selectedUser
            .flatMapLatestConflated { selectedUser ->
                if (selectedUser.isEligibleForLogout()) {
                    isSecondaryUserLogoutSupported
                if (selectedUser.selectionStatus == SelectionStatus.SELECTION_COMPLETE) {
                    devicePolicyManagerStateChangeEvents
                        .map { _ ->
                            devicePolicyManager.isLogoutEnabled() &&
                                devicePolicyManager.logoutUser != null
                        }
                        .flowOn(backgroundDispatcher)
                } else {
                    flowOf(false)
                }
@@ -303,32 +304,37 @@ constructor(
    }

    @SuppressLint("MissingPermission")
    override val isLogoutToSystemUserEnabled: StateFlow<Boolean> =
    override val isUserManagerLogoutEnabled: StateFlow<Boolean> =
        selectedUser
            .flatMapLatestConflated { selectedUser ->
                if (selectedUser.isEligibleForLogout()) {
                    flowOf(
                        resources.getBoolean(
            .map { selectedUser ->
                when {
                    !resources.getBoolean(
                        com.android.internal.R.bool.config_userSwitchingMustGoThroughLoginScreen
                        )
                    )
                } else {
                    flowOf(false)
                    ) -> false

                    selectedUser.selectionStatus != SelectionStatus.SELECTION_COMPLETE -> false

                    !android.multiuser.Flags.logoutUserApi() ->
                        selectedUser.userInfo.id != UserHandle.USER_SYSTEM

                    else ->
                        withContext(backgroundDispatcher) {
                            manager.getUserLogoutability(selectedUser.userInfo.id) ==
                                UserManager.LOGOUTABILITY_STATUS_OK
                        }
                }
            }
            .stateIn(applicationScope, SharingStarted.Eagerly, false)

    @SuppressLint("MissingPermission")
    override suspend fun logOutSecondaryUser() {
        if (isSecondaryUserLogoutEnabled.value) {
    override suspend fun logOutWithPolicyManager() {
        if (isPolicyManagerLogoutEnabled.value) {
            withContext(backgroundDispatcher) { devicePolicyManager.logoutUser() }
        }
    }

    override suspend fun logOutToSystemUser() {
        // TODO(b/377493351) : start using proper logout API once it is available.
        // Using reboot is a temporary solution.
        if (isLogoutToSystemUserEnabled.value) {
    override suspend fun logOutWithUserManager() {
        if (isUserManagerLogoutEnabled.value) {
            if (android.multiuser.Flags.logoutUserApi()) {
                withContext(backgroundDispatcher) {
                    val currentUserId = tracker.userId
+6 −6
Original line number Diff line number Diff line
@@ -39,18 +39,18 @@ constructor(

    val isLogoutEnabled: StateFlow<Boolean> =
        combine(
                userRepository.isSecondaryUserLogoutEnabled,
                userRepository.isLogoutToSystemUserEnabled,
                userRepository.isPolicyManagerLogoutEnabled,
                userRepository.isUserManagerLogoutEnabled,
                Boolean::or,
            )
            .stateIn(applicationScope, SharingStarted.Eagerly, false)

    fun logOut() {
        applicationScope.launch {
            if (userRepository.isSecondaryUserLogoutEnabled.value) {
                userRepository.logOutSecondaryUser()
            } else if (userRepository.isLogoutToSystemUserEnabled.value) {
                userRepository.logOutToSystemUser()
            if (userRepository.isPolicyManagerLogoutEnabled.value) {
                userRepository.logOutWithPolicyManager()
            } else if (userRepository.isUserManagerLogoutEnabled.value) {
                userRepository.logOutWithUserManager()
            }
        }
    }
+16 −16

File changed.

Preview size limit exceeded, changes collapsed.