Skip to content

Commit f1ad735

Browse files
authored
Merge pull request #1371 from vector-im/feature/fga/fix_anr
RoomList : fix ANR (#1370)
2 parents f808dcd + 6746bf5 commit f1ad735

File tree

3 files changed

+9
-5
lines changed

3 files changed

+9
-5
lines changed

changelog.d/1370.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix ANR on RoomList when notification settings change.

libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryListProcessor.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@ package io.element.android.libraries.matrix.impl.roomlist
1919
import io.element.android.libraries.core.coroutine.parallelMap
2020
import io.element.android.libraries.matrix.api.roomlist.RoomSummary
2121
import kotlinx.coroutines.CompletableDeferred
22+
import kotlinx.coroutines.CoroutineDispatcher
2223
import kotlinx.coroutines.flow.MutableStateFlow
23-
import kotlinx.coroutines.flow.map
2424
import kotlinx.coroutines.sync.Mutex
2525
import kotlinx.coroutines.sync.withLock
26+
import kotlinx.coroutines.withContext
2627
import org.matrix.rustcomponents.sdk.RoomListEntriesUpdate
2728
import org.matrix.rustcomponents.sdk.RoomListEntry
2829
import org.matrix.rustcomponents.sdk.RoomListService
@@ -33,6 +34,7 @@ import java.util.UUID
3334
class RoomSummaryListProcessor(
3435
private val roomSummaries: MutableStateFlow<List<RoomSummary>>,
3536
private val roomListService: RoomListService,
37+
private val dispatcher: CoroutineDispatcher,
3638
private val roomSummaryDetailsFactory: RoomSummaryDetailsFactory = RoomSummaryDetailsFactory(),
3739
) {
3840

@@ -143,10 +145,11 @@ class RoomSummaryListProcessor(
143145
return builtRoomSummary
144146
}
145147

146-
private suspend fun updateRoomSummaries(block: suspend MutableList<RoomSummary>.() -> Unit) =
148+
private suspend fun updateRoomSummaries(block: suspend MutableList<RoomSummary>.() -> Unit) = withContext(dispatcher) {
147149
mutex.withLock {
148150
val mutableRoomSummaries = roomSummaries.value.toMutableList()
149151
block(mutableRoomSummaries)
150152
roomSummaries.value = mutableRoomSummaries
151153
}
154+
}
152155
}

libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RustRoomListService.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,17 +45,17 @@ import org.matrix.rustcomponents.sdk.RoomListService as InnerRustRoomListService
4545
class RustRoomListService(
4646
private val innerRoomListService: InnerRustRoomListService,
4747
private val sessionCoroutineScope: CoroutineScope,
48-
dispatcher: CoroutineDispatcher,
48+
private val dispatcher: CoroutineDispatcher,
4949
roomSummaryDetailsFactory: RoomSummaryDetailsFactory = RoomSummaryDetailsFactory(),
5050
) : RoomListService {
5151

5252
private val allRooms = MutableStateFlow<List<RoomSummary>>(emptyList())
5353
private val inviteRooms = MutableStateFlow<List<RoomSummary>>(emptyList())
5454

5555
private val allRoomsLoadingState: MutableStateFlow<RoomList.LoadingState> = MutableStateFlow(RoomList.LoadingState.NotLoaded)
56-
private val allRoomsListProcessor = RoomSummaryListProcessor(allRooms, innerRoomListService, roomSummaryDetailsFactory)
56+
private val allRoomsListProcessor = RoomSummaryListProcessor(allRooms, innerRoomListService, dispatcher, roomSummaryDetailsFactory)
5757
private val invitesLoadingState: MutableStateFlow<RoomList.LoadingState> = MutableStateFlow(RoomList.LoadingState.NotLoaded)
58-
private val inviteRoomsListProcessor = RoomSummaryListProcessor(inviteRooms, innerRoomListService, roomSummaryDetailsFactory)
58+
private val inviteRoomsListProcessor = RoomSummaryListProcessor(inviteRooms, innerRoomListService, dispatcher, roomSummaryDetailsFactory)
5959

6060
init {
6161
sessionCoroutineScope.launch(dispatcher) {

0 commit comments

Comments
 (0)