diff options
author | 2024-02-06 11:08:23 -0500 | |
---|---|---|
committer | 2024-02-06 17:05:46 +0000 | |
commit | b386cca4830e69919ffff5a8e506b84b0debd579 (patch) | |
tree | dcbc58561ef68a7bbba792d6b25ca24a2b7fbd4b /java/src | |
parent | 8e1def731fdaab07953f8d11531dbc518860d94e (diff) |
Fix duplicated User values when availability changes
When the availability has updated, the updated user was
appended, but the prvious value was never removed, causing
the list to continue growing.
Test: atest IntentResolver-tests-unit
Test: onHandleAvailabilityChange_userStateMaintained
Bug: 324073704
Change-Id: I3c51ea9e1a2cf0de9c064b08e7c9f21c4c0f7af1
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/com/android/intentresolver/v2/data/repository/UserRepository.kt | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/java/src/com/android/intentresolver/v2/data/repository/UserRepository.kt b/java/src/com/android/intentresolver/v2/data/repository/UserRepository.kt index 91ad6409..b57609e5 100644 --- a/java/src/com/android/intentresolver/v2/data/repository/UserRepository.kt +++ b/java/src/com/android/intentresolver/v2/data/repository/UserRepository.kt @@ -158,11 +158,14 @@ constructor( } } + private fun List<UserWithState>.update(handle: UserHandle, user: UserWithState) = + filter { it.user.id != handle.identifier } + user + private fun handleAvailability(event: UserEvent, current: UserStates): UserStates { val userEntry = current.firstOrNull { it.user.id == event.user.identifier } ?: throw UserStateException("User was not present in the map", event) - return current + userEntry.copy(available = !event.quietMode) + return current.update(event.user, userEntry.copy(available = !event.quietMode)) } private fun handleProfileRemoved(event: UserEvent, current: UserStates): UserStates { |