diff --git a/CHANGES.md b/CHANGES.md index 64de4ac68df..5e9f9ce6710 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,6 +14,7 @@ Other changes: Bugfix 🐛: - Do not show long click help if only invitation are displayed - Fix emoji filtering not working + - Fix issue of closing Realm in another thread (#725) Translations 🗣: - diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/filter/DefaultFilterRepository.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/filter/DefaultFilterRepository.kt index 53967784a1e..33cd245a423 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/filter/DefaultFilterRepository.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/filter/DefaultFilterRepository.kt @@ -30,25 +30,26 @@ internal class DefaultFilterRepository @Inject constructor(private val monarchy: override suspend fun storeFilter(filterBody: FilterBody, roomEventFilter: RoomEventFilter): Boolean { return Realm.getInstance(monarchy.realmConfiguration).use { realm -> val filter = FilterEntity.getFilter(realm) - val result = if (filter.filterBodyJson != filterBody.toJSONString()) { - // Filter has changed, store it and reset the filter Id - monarchy.awaitTransaction { + // Filter has changed, or no filter Id yet + filter.filterBodyJson != filterBody.toJSONString() + || filter.filterId.isBlank() + }.also { hasChanged -> + if (hasChanged) { + // Filter is new or has changed, store it and reset the filter Id. + // This has to be done outside of the Realm.use(), because awaitTransaction change the current thread + monarchy.awaitTransaction { realm -> // We manage only one filter for now val filterBodyJson = filterBody.toJSONString() val roomEventFilterJson = roomEventFilter.toJSONString() - val filterEntity = FilterEntity.getFilter(it) + val filterEntity = FilterEntity.getFilter(realm) filterEntity.filterBodyJson = filterBodyJson filterEntity.roomEventFilterJson = roomEventFilterJson // Reset filterId filterEntity.filterId = "" } - true - } else { - filter.filterId.isBlank() } - result } }