* Handle poll events from the sdk
* Render started poll event in the timeline
* Create poll module
* Check poll kind before revealing the results
* Check if user has voted before revealing the results
* Add active poll previews
* Minor cleanup
* Update todos
* Fix CI
* Remove hardcoded string
* Update preview
* changelog file
* Update screenshots
* Use CommonPlurals
* Set poll root view as selectableGroup
* Improve poll result rendering
* Update screenshots
* Add missing showkase processor
* Update screenshots
---------
Co-authored-by: ElementBot <benoitm+elementbot@element.io>
* Change RoomSummaryDataSource to RoomListService to better reflects the rust api
* Better Sync management
* Sync: improve sync spinner rendering
* Sync: make test compiles
* Sync: add more test for sync spinner
* Sync: more clean-up
* Sync: pr review
---------
Co-authored-by: ganfra <francoisg@element.io>
* Enable filter push notifications by push rules
* Remove unused `filterByPushRules` parameter
* Use fallback notification only for items not filetered by the push rules
* Fix tests
* Align TracingConfiguration with iOS
* Create TracingTree from rust sdk
* tracing: create a working configuration with RustTracingTree
* Tracing: WIP implementation of new api
* Tracing: clean up
* Tracing: use the latest api
* Tracing: some more clean up
* Remove generated logcat file after compressing it
---------
Co-authored-by: ganfra <francoisg@element.io>
Co-authored-by: Jorge Martín <jorgem@element.io>
* Sort reactions by count and then timestamp
- Sort reactions within an aggregation by timestamp descending. This puts the most recent at the top, useful in cases like the reaction summary view or getting the most recent reaction.
- Sort aggregated reactions by count and then timestamp ascending, using the most recent reaction in the aggregation. This appends new aggregations on the end of the reaction layout.
* Add reaction summary view
* fix warnings
* Fix test unit tests and add sorting tests
- Fix broken build in test code
- Add a test for reaction sorting
* Remove default closure, move logic to presenter and add tests
* Update screenshots
* Fix imports
* Revert Screenshots I didn't update
* Fix imports remove screetshots
* Update screenshots
* Update screenshots
* Address comments.
* Update screenshots
* Remove unnecessary snapshotFlow
* Fix code quality checks
---------
Co-authored-by: ElementBot <benoitm+elementbot@element.io>
* Fetched `RoomMembers` are mapped in parallel
* Add horizontal padding to room/user name in room details screen
* Relax User & Event id regex matches
---------
Co-authored-by: ElementBot <benoitm+elementbot@element.io>
* First attempt at implementing encrypted history banner and removing old UTDs
* Get the right behavior in the timeline
* Implement the designs
* Extract post-processing logic, add tests
* Add encryption banner to timeline screenshots
* Create FTUE feature to handle welcome screen and analytics
* Move classes to their own packages, add tests for `DefaultFtueState`.
* Remove unnecessary private MutableStateFlow
* Move some FTUE related methods and classes back to the `impl` module
* Handle back press at each FTUE step
* Remove unneeded `TestScope` receiver for `createState` in tests.
* Use light & dark previews for the banner view.
* Move color customization from `TextStyle` to `Text` component.
* Rename `InfoList` design components, use them in `AnalyticsOptInView` too.
* Cleanup MatrixClient.
* Fix copy&paste error
Co-authored-by: Benoit Marty <benoit@matrix.org>
* Fix typo
* Fix Maestro tests
---------
Co-authored-by: ElementBot <benoitm+elementbot@element.io>
Co-authored-by: Benoit Marty <benoit@matrix.org>
* Notifications: Add some extra mappings so we keep the original contents and can pass it later to an UI layer
* Fix notifications not appearing for a room if the app was on that room when it went to background.
* Modernize how we create spannable strings for notifications, remove unneeded dependency
* Remove actions from invite notifications temporarily
* Add `NotificationDrawerManager` interface to be able to clear membership notifications when accepting or rejecting a room invite
* Fix tests
* Add comment to clarify some weird behaviours
* Address review comments
* Set circle shape for `largeBitmap` in message notifications
* Fix no avatar in DM rooms
* Fix rebase issues
* Add invite list pending intent:
- Refactor pending intents.
- Make `DeepLinkData` a sealed interface.
- Fix and add tests.
* Rename `navigate__` functions to `attach__`
* Add an extra test case for the `InviteList` deep link
* Address most review comments.
* Fix rebase issue
* Add fallback notification type, allow dismissing invite notifications.
Fallback notifications have a different underlying type and can be dismissed at will.
* Fix tests
* Fix displaying reaction row in message action list
* Rename `sendState` to `localSendState` and make it nullable.
Create an `isRemote` helper to detect if an event comes from the server instead.
---------
Co-authored-by: ElementBot <benoitm+elementbot@element.io>
* Fix actions for redacted, not sent and media messages
* Make `EventDebugInfoView` sections fill max width
* Don't display action list if there are no actions to display
---------
Co-authored-by: ElementBot <benoitm+elementbot@element.io>
* Send read receipts
* Add changelog
* Add tests.
* Optimise how sending read receipts work in the timeline.
* Move the check for send read receipts to the presenter
Also improve the way we find the first visible `Event` if we have `Virtual` ones in the timeline.
- `syncUpdateFlow` becomes a `val` and always returns the same instance of the underlying `StateFlow` instead of different `Flow` instances to allow consumers not to remember the `Flow` and not to specify an unneeded initial value.
- `timeline` becomes a `val` as it already always returns the same instance.
- Amends calling code accordingly
- Removes a few unneeded `val`s in `RustMatrixClient
- Fixes a small bug in `MessagesPresenter` that allowed to sometime show a newly created room's name as "Empty room" (changes `LaunchedEffect(syncUpdateFlow)` to `LaunchedEffect(syncUpdateFlow.value)`)