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

Commit 02debd9b authored by Alex Stetson's avatar Alex Stetson
Browse files

Ensure secondary sysui service starts

If a system boots and switches into a secondary user prior to SystemUI
initializing, the ACTION_USER_SWITCHED intent will not be received and
the secondary service will never be started. By checking the current
user on init, it is ensured that we do not miss this case.

Bug: 286338771
Test: manual, atest com.android.systemui.user

Change-Id: Ic3110213db96c29f7943604c451aec1ac9b254fc
parent d3813b18
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.content.pm.UserInfo
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import android.graphics.drawable.Icon
import android.os.Process
import android.os.RemoteException
import android.os.UserHandle
import android.os.UserManager
@@ -334,6 +335,7 @@ constructor(
                onBroadcastReceived(intent, previousSelectedUser)
            }
            .launchIn(applicationScope)
        restartSecondaryService(repository.getSelectedUserInfo().id)
        keyguardUpdateMonitor.registerCallback(keyguardUpdateMonitorCallback)
    }

@@ -646,7 +648,7 @@ constructor(

        // Connect to the new secondary user's service (purely to ensure that a persistent
        // SystemUI application is created for that user)
        if (userId != UserHandle.USER_SYSTEM) {
        if (userId != Process.myUserHandle().identifier) {
            applicationContext.startServiceAsUser(
                intent,
                UserHandle.of(userId),
+19 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.app.ActivityManager
import android.app.StatusBarManager.DISABLE2_NONE
import android.app.StatusBarManager.DISABLE2_NOTIFICATION_SHADE
import android.app.StatusBarManager.DISABLE2_QUICK_SETTINGS
import android.content.pm.UserInfo
import android.os.UserManager
import androidx.test.filters.SmallTest
import com.android.internal.logging.UiEventLogger
@@ -47,6 +48,7 @@ import com.android.systemui.user.domain.interactor.UserInteractor
import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
@@ -92,6 +94,23 @@ class ShadeInteractorTest : SysuiTestCase() {
                mainDispatcher = testDispatcher,
                repository = userRepository,
            )

        runBlocking {
            val userInfos =
                listOf(
                    UserInfo(
                        /* id= */ 0,
                        /* name= */ "zero",
                        /* iconPath= */ "",
                        /* flags= */ UserInfo.FLAG_PRIMARY or
                            UserInfo.FLAG_ADMIN or
                            UserInfo.FLAG_FULL,
                        UserManager.USER_TYPE_FULL_SYSTEM,
                    ),
                )
            userRepository.setUserInfos(userInfos)
            userRepository.setSelectedUserInfo(userInfos[0])
        }
        userInteractor =
            UserInteractor(
                applicationContext = context,
+201 −85

File changed.

Preview size limit exceeded, changes collapsed.

+5 −0
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.toList
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.advanceUntilIdle
@@ -237,6 +238,10 @@ class StatusBarUserChipViewModelTest : SysuiTestCase() {
                set(Flags.FULL_SCREEN_USER_SWITCHER, false)
                set(Flags.FACE_AUTH_REFACTOR, true)
            }
        runBlocking {
            userRepository.setUserInfos(listOf(USER_0))
            userRepository.setSelectedUserInfo(USER_0)
        }
        return StatusBarUserChipViewModel(
            context = context,
            interactor =
+14 −0
Original line number Diff line number Diff line
@@ -102,6 +102,20 @@ class UserSwitcherViewModelTest : SysuiTestCase() {
        testScope = TestScope(testDispatcher)
        userRepository = FakeUserRepository()
        runBlocking {
            val userInfos =
                listOf(
                    UserInfo(
                        /* id= */ 0,
                        /* name= */ "zero",
                        /* iconPath= */ "",
                        /* flags= */ UserInfo.FLAG_PRIMARY or
                            UserInfo.FLAG_ADMIN or
                            UserInfo.FLAG_FULL,
                        UserManager.USER_TYPE_FULL_SYSTEM,
                    ),
                )
            userRepository.setUserInfos(userInfos)
            userRepository.setSelectedUserInfo(userInfos[0])
            userRepository.setSettings(
                UserSwitcherSettingsModel(
                    isUserSwitcherEnabled = true,