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

Commit df918570 authored by Yao Li's avatar Yao Li
Browse files

sysui to use ActivityManager.logoutUser()

Bug: 380125011
Flag: android.multiuser.logout_user_api
Test: m
Test: atest UserRepositoryImplTest
Test: (if revert ag/32246147) Click logout button would logout current
user

Change-Id: I6fdc0bd1db98ab0b41a63d79112385606ac748b4
parent ee345f68
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@

package com.android.systemui.user.data.repository

import android.app.activityManager
import android.app.admin.DevicePolicyManager
import android.app.admin.devicePolicyManager
import android.content.Intent
@@ -68,6 +69,7 @@ class UserRepositoryImplTest : SysuiTestCase() {
    private val broadcastDispatcher = kosmos.broadcastDispatcher
    private val devicePolicyManager = kosmos.devicePolicyManager
    private val statusBarService = kosmos.fakeStatusBarService
    private val activityManager = kosmos.activityManager

    @Mock private lateinit var manager: UserManager

@@ -509,6 +511,7 @@ class UserRepositoryImplTest : SysuiTestCase() {
            devicePolicyManager = devicePolicyManager,
            resources = context.resources,
            statusBarService = statusBarService,
            activityManager = activityManager,
        )
    }

+11 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.user.data.repository

import android.annotation.SuppressLint
import android.annotation.UserIdInt
import android.app.ActivityManager
import android.app.admin.DevicePolicyManager
import android.content.Context
import android.content.Intent
@@ -33,7 +34,6 @@ import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.internal.statusbar.IStatusBarService
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging
import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
@@ -45,6 +45,7 @@ import com.android.systemui.user.data.model.SelectionStatus
import com.android.systemui.user.data.model.UserSwitcherSettingsModel
import com.android.systemui.util.settings.GlobalSettings
import com.android.systemui.util.settings.SettingsProxyExt.observerFlow
import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow
import com.android.systemui.utils.coroutines.flow.flatMapLatestConflated
import java.util.concurrent.atomic.AtomicBoolean
import javax.inject.Inject
@@ -165,6 +166,7 @@ constructor(
    private val devicePolicyManager: DevicePolicyManager,
    private val broadcastDispatcher: BroadcastDispatcher,
    private val statusBarService: IStatusBarService,
    private val activityManager: ActivityManager,
) : UserRepository {

    private val _userSwitcherSettings: StateFlow<UserSwitcherSettingsModel> =
@@ -325,9 +327,16 @@ constructor(
        // TODO(b/377493351) : start using proper logout API once it is available.
        // Using reboot is a temporary solution.
        if (isLogoutToSystemUserEnabled.value) {
            if (android.multiuser.Flags.logoutUserApi()) {
                withContext(backgroundDispatcher) {
                    val currentUserId = tracker.userId
                    activityManager.logoutUser(currentUserId)
                }
            } else {
                withContext(backgroundDispatcher) { statusBarService.reboot(false) }
            }
        }
    }

    @SuppressLint("MissingPermission")
    override fun refreshUsers() {