* Load `JoinedRoom` in `HomeFlowNode.navigateToRoom`, then pass it to the next navigation nodes
* Add delayed loading indicator for cases when loading the room takes too long
* Avoid an extra FFI call in `RustRoomFactory`.
Use `RoomInfo.membership` instead.
Also use `computation` dispatcher, since it should reduce the delay when switching contexts.
* Remove the dispatcher usage when loading the room in `HomeFlowNode`, we immediately call a method that changes the dispatcher used
* Make sure only a single room is opened at a time
We want to measure how long it takes the SDK to update the room list when the app comes back from being in background.
Note we don't want to check this in cold starts, only warm ones.
- Add `AnalyticsService.startTransaction(...)` to start a logging transaction that can be uploaded to Sentry if the user enabled the analytics upload.
- Add `AnalyticsTransaction` wrapper to abstract the Sentry ones.
- Added several helper methods to improve the UX around these transactions.
- Then measure:
- Time until the first sync, and how it ended.
- Time until the first rooms are displayed.
- Time to load a room or a preview.
- Time to load a timeline.
* Separate thread notifications into their own notifications when the feature flag is enabled.
Otherwise, set the `threadId` to null so it'll behave as usual. It's done this way to avoid having to inject `FeatureFlagService` in several places.
* Add permalink navigation to threads from notifications, focusing on the latest event in the list of messages of the notification tapped
* Fix redactions in threads
* Clear notifications for a thread when visiting it
* Fix opening a thread happening twice, first because of the `openThreadId` value, then because of the `focusedEventId` one
* Make opening a room through a notification also focus on the latest event
* Add helper `NotificationCreator.messageTag` function
* Remove unused `ROOM_CALL_NOTIFICATION_ID`: `FOREGROUND_SERVICE_NOTIFICATION_ID`+ `ForegroundServiceType` is used instead
* Simplify `DefaultDeepLinkCreator`
* Make sure the main timeline focuses on the thread root id too when navigating to a thread
* Handle "Mark as read" action for thread notification, using `timeline.markAsRead`
* Log failures to mark rooms as read using the notification action
---------
Co-authored-by: Benoit Marty <benoit@matrix.org>
* Add `Timeline.markAsRead` to avoid reinstantiating the timeline using `Room.markAsRead`
* Mark as read when exiting the room screen, destroy the timeline when fully closed
* Ensure `MarkAsFullyReadAndExit` event can only be processed once
* Fix `DelayedVisibility` not being displayed in previews