- whilst closing the session, we iterate through all the listeners calling onSessionStopped however some implementations also use this callback to remove themselves from the listeners, causing the concurrent modification crash
When lots (> 10) of messages arrive in a chat, such that not all get
/sync'ed, the app couldn't properly check if events that were not synced
are before or after the read marker.
The previous way to handle this was just to always assume these events
would be unread, which caused some old messages show in notifications
and not dismiss themselves when appropriate.
Unfortunately, we can not safely assume that if the read marker is in the
latest chunk, the missing events would be read, since we may be showing
"fastlane" notifications from fcm/push before the /sync finished.
Thus, with this commit, we now remove messages that weren't synced or
paginated if they meet the following heuristic:
1. The read marker is in the latest chunk and
2. The read marker points at an event with a timestamp later than the one of the missing event.
Change-Id: I8053252e95a3b2142512f93244647a86b6f1a231
Background: Clients write Markdown and convert it to HTML before
sending the event. All events are formatted as HTML. However, if an
HTML formatted event happened to include markdown characters, Element
Android would incorrectly render that markdown.
For example, an event with formatted_body: "*test*" should be
displayed as literally *test* with no effects, but Element Android
incorrectly displayed it as test in italics.
This commit fixes this behaviour, making Element Android not parse
Markdown in HTML messages.
From the perspective of most users it will appear that backslash
escapes now work properly (even though this wasn't the real issue).
* Sync: delete all previous chunks in case of gappy sync
* Chunk: dont link chunks if we find existing timeline event (keep multiple timeline events in db)
* Timeline : remove some unused code
* Clean and add changelog
* Timeline: set named argument
* Timeline: avoid restarting the timeline when there is a CancellationException due to permalink
* Timeline: add migration to clean up old (broken) chunks
* Update matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/migration/MigrateSessionTo030.kt
Co-authored-by: Benoit Marty <benoitm@matrix.org>
* Timeline: try to fix test
* ignoring broken instrumentation test in order to release
Co-authored-by: ganfra <francoisg@element.io>
Co-authored-by: Benoit Marty <benoitm@matrix.org>
Co-authored-by: Adam Brown <adampsbrown@gmail.com>
* Sync: delete all previous chunks in case of gappy sync
* Chunk: dont link chunks if we find existing timeline event (keep multiple timeline events in db)
* Timeline : remove some unused code
* Clean and add changelog
* Timeline: set named argument
* Timeline: avoid restarting the timeline when there is a CancellationException due to permalink
* Timeline: add migration to clean up old (broken) chunks
* Update matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/migration/MigrateSessionTo030.kt
Co-authored-by: Benoit Marty <benoitm@matrix.org>
* Timeline: try to fix test
* ignoring broken instrumentation test in order to release
Co-authored-by: ganfra <francoisg@element.io>
Co-authored-by: Benoit Marty <benoitm@matrix.org>
Co-authored-by: Adam Brown <adampsbrown@gmail.com>