1477 Commits

Author SHA1 Message Date
Stefan Ceriu a3c7c47a69 Made room state event collapsing configurable, expose it in the developer menu. Allow the UserSetting property wrappers to only store values in memory (+11 squashed commits)
Squashed commits:
[42e45fc] Even more tweaks following code review
[5dcd5be] Add swift-algoritms and switch bubbling detection to its `chunked` method
[4ac70ed] Move the groupBy implementation to Collection instead of Array
[6aeffc3] Tweaks following code review
[0ca5ac2] Bubbles working again, grouping computed closer to the UI level
[3a66030] Refactor how timeline items are built in the RoomTimelineController
[57d51e9] Remove grouping from timeline items
[8608950] Remove the RoomTimelineViewFactory, update the GroupRoomTimelineView
[9e52e61] Add array grouping extension, unit tests and switched the timeline controller to it
[7d213a1] First attempt
[90bb1d7] Remove now unused `RoomTimelineController` `updatedTimelineItem` calback
2023-02-24 07:34:07 +02:00
Stefan Ceriu ad06e812bc Fix navigationStackCoordinator getting torn down when being reset on … (#613)
* Fix navigationStackCoordinator getting torn down when being reset on the navigationSplitCoordinator, added unit tests for it

* Guard against using the same coordinator more than once
2023-02-23 16:01:48 +02:00
Stefan Ceriu 99d6caed4e Manually cancel timeline listeners when a RoomScreen is torn down instead of waiting for a delayed deinit 2023-02-23 16:00:05 +02:00
Mauro 698b0aea44 Audio Timeline Item support (#612)
* audio timeline item support

* improved the code to reduce cognitive complexity

* no need anymore for this swiftlint disabling of a rule

* pr comments
2023-02-23 11:06:31 +00:00
Mauro e48676e4eb Report Content (#587)
* ui for reporting content has been implemented

* implementation done, will only work withe a mx rust sdk that supports report content

* fix

* code improvements

* code improvement

* fix typo

Co-authored-by: Stefan Ceriu <stefanc@matrix.org>

* removing unneeded task

* code improvement

* changelog

---------

Co-authored-by: Stefan Ceriu <stefanc@matrix.org>
2023-02-22 17:14:43 +00:00
Doug 2399088084 Bump SDK version and fix breaking changes. (#610) 2023-02-22 14:31:17 +00:00
Doug 19303de8fa Add required state on subscribe. (#589) 2023-02-16 16:06:15 +00:00
Mauro e91e0513b6 Attach Screenshot in Bug Report Screen (#578)
* 127 Attach Screenshot in Bug Report Screen

* #127 code improvement

* #127 Code improvements, and changed the loading... label to sending...

* using a statically defined identifier for the new defined ui element

* added the RowLabelStyle and improved the design of the view

* code improvement

* code improvement

* making alignment private

* synthesised init
2023-02-15 16:46:53 +00:00
Doug 872c911cb5 Use files instead of UDP for signalling. (#585) 2023-02-15 14:02:50 +00:00
Doug 6211f121a0 Enable shorthand_optional_binding SwiftLint rule. (#582) 2023-02-15 09:34:48 +00:00
Doug afc660a1ea Add SwiftFormat wraparguments (#579)
Matches the wrapparameters rule, seems it was missed.
2023-02-15 08:53:10 +00:00
Mauro Romito d7f80807df 547 refactored userNotification into userIndicator 2023-02-14 11:35:17 +01:00
Stefan Ceriu ee4e4a212b #396 - Work around duplicated room list items and add error logs (#571) 2023-02-13 12:21:49 +00:00
Mauro 910a8e2067 Updated Screenshot Tests and fixed an issue with the MockMediaProvider (#554)
* updated the tests

* updated ui tests

* removed unused files

* fixed a bug that prevented the image to be added in the avatar of the rooms from the mock, and improved some UI tests

* swiftformat

* fixed an issue where the room Id was not matching the real room id coming from the timelineController, also updated some tests, and added a test for the case where the RoomAvatar is available.

* added some waitForExistence checks to allow the CI to find the UI elements

* this should make the loading bar always match at the HStack size

* code improvement for the tests

* fix for the max frame of the loading screen

* updated tests

* regenerated and improved some tests

* sonarcloud improvements

* changelog
2023-02-09 14:57:55 +01:00
Mauro e5522e7753 Added a progress tracker to the bug report view (#513)
* created a progress tracker class and passed it in the user notification to be observed by the progress view

* improved the publishing by dispatching it on RunLoop.main

* bug report struct created and progress tracker class moved into the Other folder

* some swiftlint adjustments

* fixed tests

* fixed another test BugReportServiceTests

* changelog 495 - change

* added a mock preview

* fixing some linting suggestions

* no need to use KVO, achieve the same result using a publisher

* some refactors to address PR comments

* some code improvements

* fixed the issue that prevented the avatar of the room to be displayed in the mocks, and updated the tests

* Revert "fixed the issue that prevented the avatar of the room to be displayed in the mocks, and updated the tests"

This reverts commit 113d6091d91a3aac1f9a59ff6c5e07610ed59859.
2023-02-08 21:52:31 +01:00
Doug 4d87701ae9 Automatic discovery of the sliding sync proxy. (#535)
* Automatic discovery of the sliding sync proxy.

* Handle homeserver detection from a MXID.

* Update sliding sync info link, SDK and bump patch.

Add a migration on the new version. The change in restoration token format requires the user to sign in again, but this will fail with the existing device ID.
2023-02-08 19:07:02 +00:00
Stefan Ceriu f8e6179933 Add permalink detection and custom attributed string attributes (#536)
* Pass full attributed string to TimelineItems and let the UI level handle blockquote coalescing
* Add permalink detection and attribute embedding within the attributed string
2023-02-06 14:59:32 +00:00
Doug dae8f93b40 Revert decryption banner & try fix context menu crash. (#525) 2023-02-03 18:24:28 +02:00
Doug 2aaeb576d2 Further design updates to the timeline. (#524)
- Decryption banner on the timeline
- Bubble colours
- Background insets
- Multiline composer corner radius
- Read marker
- GIF indicator
- Reactions shape
- Use RoomTimelineViewLabelStyle everywhere possible
- Only set a line limit on reply quotes, allow all the lines for regular quotes.
- Message label icons
- Yes/No button casing
- Make sender profiles immutable.
- Enable copy link and invite buttons.
- Fix layout loop detecting multiline composer text.
- Add animation to the encryption banner.
2023-02-03 14:09:48 +00:00
Stefan Ceriu 183cc88114 Load member profiles through the timeline (#522) 2023-02-03 10:12:36 +00:00
Stefan Ceriu 3f900df3de Prevent duplicated timeline items from crashing the diffable datasource 2023-02-02 18:10:52 +02:00
Stefan Ceriu cbfd2d1cca Refactor the dynamic timeline modifiers and make sure they fire in the right order 2023-02-02 17:09:14 +02:00
Stefan Ceriu 8f3842f74a Dynamically adjusting the visibleRoomsView's timeline limit based on the app state 2023-01-31 20:59:08 +02:00
Doug f6629e0d6e Hardcode the sliding sync proxy. (#502)
* Add support for migrating between versions.
* Rename InfoPlistReader property.
* Bump SDK version.
2023-01-31 17:48:24 +00:00
Doug 4f8cc08989 Handle API changes from Rust. (#506)
There are some bad assumptions about profile changes in here.

* Remove assumption FIXME's

Profile changes that come from other members will be state event of None.

* Bump SDK version.
2023-01-31 13:28:28 +00:00
Doug 17568a6a2e Initial timeline design tweaks (#505) 2023-01-31 13:27:35 +00:00
Stefan Ceriu d51a9b3a2b Memory management (#503)
* Correctly tear down the user session on signing out

* Fix session verification <-> user session retain cycle, visible range debouncer leak

* Manually clean up coordinators retained within SwiftUI's NavigationStacks

* Slightly refactor the timeline content menu builder and prevent it from retaining the view model. Cleanup now unnecessarily optional RoomScreenCoordinator instance vars

* Move coordinator dismissal logic to the navigation modules
2023-01-31 11:51:56 +02:00
Gil Eluard e2e69534e3 430 - Design review for first public TestFlight Part2 (#496)
* 430 - Design review for first public TestFlight Part2

---------

Co-authored-by: Doug <douglase@element.io>
2023-01-30 11:51:07 +00:00
Stefan Ceriu f29c0a9811 Fix SS update observer and implicitly session verification not being requested 2023-01-27 16:54:20 +02:00
Stefan Ceriu 413b433806 Move last message timestamp formatting to the room summary provider and its background processing queue 2023-01-26 16:31:26 +02:00
Stefan Ceriu 1433100535 Reduce the quality of service of all custom dispatch queues 2023-01-26 16:31:26 +02:00
Stefan Ceriu 86aec7896b Drop the timeline limit to 1 on the visible rooms sliding sync view 2023-01-26 15:03:23 +02:00
Stefan Ceriu 58d5346db4 Hardcode server versions for stop the SDK from making an extra requests on every startup 2023-01-26 15:03:23 +02:00
Stefan Ceriu aa2c46d82d Remove hard 500 room limit from the all rooms sliding sync view 2023-01-26 15:03:23 +02:00
Stefan Ceriu b68002cbb4 Drop the entire sliding sync observer and updating rooms by identifiers now that we can request to be sent item updates 2023-01-26 15:03:23 +02:00
Stefan Ceriu bd4c0b72cb Media loading flow changes (#483)
* Use an imageProvider directly from the view in the home screen

* Add support for media request coalescing

* Rename MediaProxy to MediaLoader

* Add new image loading mechanism to the room details screen avatar.

* Use the `SettingsScreen` prefix for all settings screen related components

* Add new image loading mechanism to the room header

* Add new image loading mechanism to the room member details screen

* Introduce a LoadableImage SwiftUI view that will automatically handle image loading

* Adopt the new LoadableImage where possible

* Fix LoadableImage not using/storing loaded images properly

* Simplify media loader enqueueing

* Made LodableImage load content after mediaSource updates. Adopt it on the home and settings screens

* Introduce a LoadableAvatarImage component and reuse it throughout the app

* Small logging tweaks, made some LoadableImage properties private

* Fix redacted skeletons avatar background color

* Fix placeholder avatars changing when backgrounding the app

* PR comments.

- Trim the @ sign off of mxid placeholders.
- Only expose AvatarSize on the avatar image, use CGSize elsewhere.

Co-authored-by: Doug <douglase@element.io>
2023-01-25 17:45:01 +00:00
Doug 3a74f13097 Add support for aliases to RoomProxy and bump the SDK. (#486) 2023-01-24 17:01:00 +00:00
Stefan Ceriu e8b48d4897 Fixes #448 - Prevent room timelines from becoming stale if the room drops out of the sliding sync window 2023-01-23 19:54:01 +02:00
Doug 9f865cf5c9 Improvements to state items (#478)
- Remove context menu (and fix long press when there are no items).
- Add membership change tests.
- Fix new/old name incorrect ordering.
- Fix message grouping when it comes before/after a state item from the same user.
- Only show reactions picker for items that can be reacted to.
2023-01-23 10:01:45 +00:00
Stefan Ceriu ae8009d040 Various performance tweaks (#474)
* Store and reuse room list placeholder avatars and last messages

* Cache and reuse HomeScreenRooms

* Reduce RoomSummaryProvider diff collection time

* Promote more logs to info

* Slighty tweak RustTracing to make it easier to configure

* Move TimelineProvider and RoomTimelineController item processing to background queues

* Prevent the timeline from stopping an ogoing decelerating scroll when starting backpaginating
2023-01-20 14:40:23 +00:00
Doug 70920550e7 Tidy up to #473 2023-01-20 14:09:59 +00:00
Doug f05fa630c1 Render state items in the timeline and as the last message on the home screen. (#473)
* State events in the timeline WIP
* Implement membership change strings.
* Add other state event types and use in RoomSummaryProvider.

Co-authored-by: Stefan Ceriu <stefanc@matrix.org>
2023-01-20 13:37:39 +00:00
Doug 5017ba7122 Mark rooms as read on push and pop. (#462)
We don't have visibility into timeline item read status so can't do this continuously yet.

* Simplify RoomTimelineProvider's responsibilities.
2023-01-18 15:14:03 +00:00
Stefan Ceriu 6615116226 Sliding sync tweaks (#470)
* Show the splash screen again after failing to restore a session

* Fix visible rooms cold cache not working. Construct the visibleRoomsView before calling the sliding sync builder, process invalid entries directly if the allRoomsView is not available

* Stop building custom identifiers for invalidated rooms, we still have duplicates coming from filled ones.

* Fix visibleItemRangePublisher debouncer, guard against changing the range while the view isn't "live" yet

* Add more logs
2023-01-18 17:13:44 +02:00
Stefan Ceriu 8f3f83167b Timeline item sender profiles (#463)
* Adopt timeline item sender profiles for displaying user avatars and display names
* Prevent images from automatically being evicted from the in-memory cache when entering background
* Get rid of all the `urlString: String`s and start using proper URLs
* Add back manual display name loading as the sender profiles aren't working properly yet
* Implement a sender profile.
* Bump the RustSDK to v1.0.32-alpha

Co-authored-by: Doug <douglase@element.io>
2023-01-18 14:29:44 +00:00
Doug 8f906c7be7 Fix unit and UI tests. (#460)
* Fix race condition on session verification tests.
* Fix clear button on text field.
* Add a timeout to UI test signalling.
* Use snapshot testing for login screen.
2023-01-18 13:28:59 +00:00
Doug c8937505d7 Improvements to logging (#457)
* Use `.info` logging in most places.
* Remove old objc logging support.
* Fix table view controller.
* Make sure timeline item content isn't logged.
* Add tests.
2023-01-17 09:28:01 +00:00
Stefan Ceriu 83e6ba8f6b Various sliding sync tweaks (#446)
* Refactor SS configuration and add (unfinished) support for adding views dynamically.

* Implement pop and clear support on the room summary provider

* Register views against sliding sync

* Read invalidated vislbeRoomsSummaryProvider from the allRoomSummaryProvider

* Switch SS window range setting from the ScrollViewAdapter to a publisher debounce

* Tweak allRoomsView addition: switch from listening the visibleRoomsView's state to when it publishes the first diff update

* Cleanup client delegate and sliding sync observers and lifecycle

* Bump the RustSDK to 1.0.30-alpha

* Reuse startSync within restartSync
2023-01-13 17:09:37 +02:00
Doug c383029203 QuickLook media. (#447)
* Use QL previews for video and present full screen.
* Use URL(staticString:) in more places.
* Fix DesignKit issues.
2023-01-12 17:37:33 +00:00
Doug e509165d52 Fix playback of encrypted videos.
Encrypted videos from Element iOS were being stored with a `.Video` extension which was confusing AVFoundation.
2023-01-12 10:33:30 +02:00