Loading packages/SystemUI/src/com/android/systemui/settings/UserTrackerImpl.kt +2 −0 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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, Loading packages/SystemUI/src/com/android/systemui/user/data/repository/UserRepository.kt +4 −0 Original line number Diff line number Diff line Loading @@ -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()) Loading packages/SystemUI/tests/src/com/android/systemui/settings/UserTrackerImplTest.kt +31 −0 Original line number Diff line number Diff line Loading @@ -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) Loading packages/SystemUI/tests/src/com/android/systemui/user/data/repository/UserRepositoryImplRefactoredTest.kt +19 −0 Original line number Diff line number Diff line Loading @@ -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, Loading packages/SystemUI/tests/utils/src/com/android/systemui/settings/FakeUserTracker.kt +4 −0 Original line number Diff line number Diff line Loading @@ -68,4 +68,8 @@ class FakeUserTracker( callbacks.forEach { it.onUserChanged(_userId, userContext) } } fun onProfileChanged() { callbacks.forEach { it.onProfilesChanged(_userProfiles) } } } Loading
packages/SystemUI/src/com/android/systemui/settings/UserTrackerImpl.kt +2 −0 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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, Loading
packages/SystemUI/src/com/android/systemui/user/data/repository/UserRepository.kt +4 −0 Original line number Diff line number Diff line Loading @@ -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()) Loading
packages/SystemUI/tests/src/com/android/systemui/settings/UserTrackerImplTest.kt +31 −0 Original line number Diff line number Diff line Loading @@ -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) Loading
packages/SystemUI/tests/src/com/android/systemui/user/data/repository/UserRepositoryImplRefactoredTest.kt +19 −0 Original line number Diff line number Diff line Loading @@ -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, Loading
packages/SystemUI/tests/utils/src/com/android/systemui/settings/FakeUserTracker.kt +4 −0 Original line number Diff line number Diff line Loading @@ -68,4 +68,8 @@ class FakeUserTracker( callbacks.forEach { it.onUserChanged(_userId, userContext) } } fun onProfileChanged() { callbacks.forEach { it.onProfilesChanged(_userProfiles) } } }