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

Commit d1638a8b authored by Aaron Liu's avatar Aaron Liu
Browse files

[User Switcher] Fix username sync in bouncer.

The user name is not updated when userinfo changes (name and avatar).
Updated usertracker to listen to this intent and updated repository to
listen to these changes. Corresponding tests have also been updated.

Fixes: 254678959
Test: Observed username in bouncer. I unlock the device and change the
username for the current user. Turn device screen off and on and go back
to bouncer. Observe that the username is the same as the one changed in
settings.

Change-Id: Ie6e289dfc65c14f9b0a35f031c46122d10dca9d0
parent 2546f800
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -108,6 +108,7 @@ class UserTrackerImpl internal constructor(

        val filter = IntentFilter().apply {
            addAction(Intent.ACTION_USER_SWITCHED)
            addAction(Intent.ACTION_USER_INFO_CHANGED)
            // These get called when a managed profile goes in or out of quiet mode.
            addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE)
            addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE)
@@ -125,6 +126,7 @@ class UserTrackerImpl internal constructor(
            Intent.ACTION_USER_SWITCHED -> {
                handleSwitchUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL))
            }
            Intent.ACTION_USER_INFO_CHANGED,
            Intent.ACTION_MANAGED_PROFILE_AVAILABLE,
            Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE,
            Intent.ACTION_MANAGED_PROFILE_REMOVED,
+4 −0
Original line number Diff line number Diff line
@@ -250,6 +250,10 @@ constructor(
                        override fun onUserChanged(newUser: Int, userContext: Context) {
                            send()
                        }

                        override fun onProfilesChanged(profiles: List<UserInfo>) {
                            send()
                        }
                    }

                tracker.addCallback(callback, mainDispatcher.asExecutor())
+31 −0
Original line number Diff line number Diff line
@@ -310,6 +310,37 @@ class UserTrackerImplTest : SysuiTestCase() {
        assertThat(callback.lastUserProfiles.map { it.id }).containsExactly(0, profileID)
    }

    @Test
    fun testCallbackCalledOnUserInfoChanged() {
        tracker.initialize(0)
        val callback = TestCallback()
        tracker.addCallback(callback, executor)
        val profileID = tracker.userId + 10

        `when`(userManager.getProfiles(anyInt())).thenAnswer { invocation ->
            val id = invocation.getArgument<Int>(0)
            val info = UserInfo(id, "", UserInfo.FLAG_FULL)
            val infoProfile = UserInfo(
                id + 10,
                "",
                "",
                UserInfo.FLAG_MANAGED_PROFILE,
                UserManager.USER_TYPE_PROFILE_MANAGED
            )
            infoProfile.profileGroupId = id
            listOf(info, infoProfile)
        }

        val intent = Intent(Intent.ACTION_USER_INFO_CHANGED)
            .putExtra(Intent.EXTRA_USER, UserHandle.of(profileID))

        tracker.onReceive(context, intent)

        assertThat(callback.calledOnUserChanged).isEqualTo(0)
        assertThat(callback.calledOnProfilesChanged).isEqualTo(1)
        assertThat(callback.lastUserProfiles.map { it.id }).containsExactly(0, profileID)
    }

    @Test
    fun testCallbackRemoved() {
        tracker.initialize(0)
+19 −0
Original line number Diff line number Diff line
@@ -145,6 +145,25 @@ class UserRepositoryImplRefactoredTest : UserRepositoryImplTest() {
        assertThat(userInfos).isEqualTo(expectedUsers)
    }

    @Test
    fun `userTrackerCallback - updates selectedUserInfo`() = runSelfCancelingTest {
        underTest = create(this)
        var selectedUserInfo: UserInfo? = null
        underTest.selectedUserInfo.onEach { selectedUserInfo = it }.launchIn(this)
        setUpUsers(
            count = 2,
            selectedIndex = 0,
        )
        tracker.onProfileChanged()
        assertThat(selectedUserInfo?.id == 0)
        setUpUsers(
            count = 2,
            selectedIndex = 1,
        )
        tracker.onProfileChanged()
        assertThat(selectedUserInfo?.id == 1)
    }

    private fun setUpUsers(
        count: Int,
        isLastGuestUser: Boolean = false,
+4 −0
Original line number Diff line number Diff line
@@ -68,4 +68,8 @@ class FakeUserTracker(

        callbacks.forEach { it.onUserChanged(_userId, userContext) }
    }

    fun onProfileChanged() {
        callbacks.forEach { it.onProfilesChanged(_userProfiles) }
    }
}