Commit Graph

510 Commits

Author SHA1 Message Date
Doug 588975d53f Minor tweaks to the message composer. (#548) 2023-02-08 12:21:41 +00:00
Doug 591a8679e9 Explicitly pass the context into the cell's environment. (#539) 2023-02-06 15:55:00 +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 2734a18217 Allow blockquote bubbles to fill the message bubble (#527)
Use a custom layout to prevent them from unnecessarily widening the bubble.
2023-02-06 13:42:19 +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
Doug 3775569f48 Minor fixes.
- Marking a room as read on iPad.
- Potential state machine crash if you swipe to dismiss verification.
2023-01-31 21:21:59 +02: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
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 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 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 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
Stefan Ceriu b835b55394 Fixes #388 - Prevent long room names from breaking the room navigation bar layout (#453) 2023-01-18 07:24:21 +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
Doug 08b333839a Fix back pagination (#432)
* Use pagination and start items for view state.

isBackPaginating and canBackPaginate are updated each time the timeline is rebuilt

* Update some timeline snapshots

The top section has gone, which has altered the layout slightly.
2023-01-11 09:11:36 +00:00
Stefan Ceriu d70a240869 New timeline items (#424)
* Cleanup session verification state machine configuration

* Add support for new timeline items: loading indicators, stickers and invalid/unsupported events

* Add sticker accessibility label, fix session verification ones

* Add support for the new TimelineStart timeline item and new pagination API. Remove identifiers from individual timeline items and only set them in the TimelineTableViewController

* Add changelog
2023-01-10 13:41:07 +02:00
Doug 51e300642c Timeline UI Tests (#380)
* Add signalling between UI tests and the app.

* Fix navigationStack on roomLayout screens and update screenshots

Co-authored-by: Stefan Ceriu <stefanc@matrix.org>
2023-01-05 16:35:20 +00:00
Doug 530ae336ab Minor fixes. (#406)
* Use the links colour from Compound for links.
* Avoid constantly recomputing the RoomScreen view hierarchy while scrolling.
2023-01-05 11:06:49 +00:00
Stefan Ceriu ac77743c7a Add retry decryption encrypted timeline item debug menu option (#384)
* Fixed a couple of warnings (+2 squashed commits)
Squashed commits:
[21fbc3b0] Add changelog
[abb092c6] Add retry decryption encrypted timeline item debug menu option

* Cleanup room list state computations

* Bump the RustSDK to v1.0.25-alpha

* Fix brew CI errors: remove imagemagick and brew lock file entirely

* Fix release script version bumping

* Bump ruby dependencies
2022-12-22 13:59:38 +02:00
Stefan Ceriu 131197b7d7 Add timeline day separators and read markers (#383)
* Add timeline day separators and read markers
2022-12-21 15:35:45 +02:00
Stefan Ceriu 71f1f044c7 Various tweaks (#381)
* Add the message delivery status to the plain timeline styler and display it outside of the main content

* Fix glitchy timeline scroll to bottom button

* Fixed bubbled reactions padding

* Simplified the emoji picker, double tapping a timeline item directly opens it now and added a context menu option. Linked it to rust side reaction sending

* Fix the sliding sync cold cache: treat invalidated rooms as filled

* Make splash screen view full screen

* Fix the offline indicator popping up when first setting up the network monitor

* Expose presentationDetents on the NavigationStackCoordinator and start using them for the EmojiPicker

* Fix link tint color

* Linked TimelineReactionsView reaction sending

* Remove now unused/unnecessary classes

* Add changelog

* Fix formatting issue
2022-12-21 11:18:45 +02:00
Stefan Ceriu e0e2d26b4b Fixes #351 - Replace Syncing toast indicator with an in-timeline loading activity indicator (#378) 2022-12-19 16:25:41 +02:00
ismailgulek 1a47fd1a8d Room details screen (#348)
* Create screen module

* Display details on header tap

* Add strings

* Add room avatar size on details

* Update members method signature

* Use room proxy values

* Create room members screen

* Display room members on tap

* Update previews and mock room proxy

* Commit project file

* Various tweaks and cleanup following code review

* More small tweaks + UI and screenshot tests

Co-authored-by: Stefan Ceriu <stefanc@matrix.org>
2022-12-19 14:39:33 +02:00
Stefan Ceriu 6f974a4422 Resetting the app after deletion and cleanup settings (#372)
* Fixes #361 - Reset everything if the app has been deleted since the last run

* Cleaned up and renamed the ElementSettings to ApplicationSettings. Removed its singleton and moved it to the service locator.

* Moved the ApplicationSettings to the Application folder

* Merged together the BuildSettings and ApplicationSettings

* Reset the UserDefaults too when resetting the application state

* Rename ServiceLocator.applicationSettings to just settings

* Fix indentation

* Rename ApplicationSettings to AppSettings

* Various tweaks following code review

* Fix unit tests
2022-12-16 10:02:22 +02:00
Doug 6dc2ea800e #352: Add basic UI tests for the timeline. (#363)
Makes the MockTimelineController configurable with incoming items and pagination responses.
2022-12-12 14:27:49 +02:00
Doug 1791993560 Use a view controller for the timeline. (#359)
This exposes lifecycle methods and tidies up the Coordinator.
2022-12-12 11:21:43 +00:00
Stefan Ceriu cd40da6c3f Fixes #317 - Adopt a split layout for iPad and Mac apps
Rename navigation components: SplitScreenCoordinator -> NavigationSplitCoordinator, StackScreenCoordinator -> NavigationStackCoordinator and SingleScreenCoordinator -> NavigationRootCoordinator
[0c161039] Tweak navigation logging
[826c19cf] Move the navigation dismissal callbacks to the NavigationModule, add SingleScreenCoordinator tests
[b8830d9c] Add tests
[252ad119] Merge the StackScreenCoordinator and SplitScreenCoordinators into a single file and stop publicly exposing their internal workings. Add more documentation.
[37671699] Cleanup navigation logging
[51406184] Use the parent SplitScreenCoordinator to present embedded StackScreenCoordinator sheets
[b94b04c9] Retract the room "syncing" indicator when dismissing a room
[1467b0ac] Correctly move to the no room selected state when popping in compact layouts
[10bf2ad8] Allow nilling root coordinators, replace present/dismiss sheet with setSheetCoordinator(?)
[33716784] Add single screen coordinator fade transition animation
[3cbe65e7] Prevent the timeline table view from being reused between different rooms
[9c94c50b] Move files around
[c10b6bc5] Adapt the user session state machine to the split layout
[7115a319] Fix unit and UI tests
[1ece59e8] Fix login flows
[6884dc3b] Use modules everywhere the underlying object is a NavigationModule
[ab08d44c] Rename navigation components to: SingleScreenCoordinator, SplitScreenCoordinator and StackScreenCoordinator
[ada2be57] Add SplitNavigationController

* Remove the navigationRootCoordinator from the UserSessionFlowCoordinator
2022-12-12 12:31:27 +02:00
Aleksandrs Proskurins 1e197d48de Send reaction method placeholder (#355)
* Send reaction method placeholder

* Removed unnecessary emoji skin parsing

* Code review fixes
2022-12-07 11:19:47 +00:00
Aleksandrs Proskurins 7f91852291 Timeline Reactions: Emoji picker (#350)
* Screens template

* Loading and parsing

* Gridview

* New json

* Search method

* Unit tests

* Added emoji provider state

* Removed containsIgnoringCase

* Added plus icon, added double tap gesture, dismiss sheet after selecting emoji

* Renamed EmojisProvider to EmojiProvider

* Renamed EmojiPickerScreenScreen

* Extra padding

* Renamed EmojisLoaderProtocol

* Category names

* Moved method into public section of the class

* Return all categories when search string is empty

* Added cancel button and tittle

* Removed empty lines

* Removed swiftlint warning
2022-12-06 14:04:48 +00:00
Doug 3c893ba342 Use a UITableView component for the timeline. (#349)
* Use a collection view for the timeline.
* Switch to a table view.
2022-12-05 15:39:21 +00:00
Doug bd530333df Match reaction alignment to message alignment. (#344)
* Match reaction alignment to message alignment.

* Add extra padding for clearer bubble alignment.
2022-11-28 11:54:00 +00:00
Doug f776575c81 Stop making previews for light & dark colour schemes. (#345)
Xcode 14 now has preview variants for this.
2022-11-25 17:49:13 +00:00
Stefan Ceriu d89782a8b2 Reduce automatic back pagination delay to 0.25 seconds 2022-11-24 10:35:53 +02:00
Doug 5c4ca74426 Use a VStack on the timeline (#332)
* Use a VStack for the timeline.

Replace edge publishers with a binding.

* Allow both top and bottom edges to be detected.

* Fix scrolling with frame changes.
2022-11-22 13:28:35 +00:00
Doug 6c2ea61585 #305: Fix message composer padding with multiple lines. 2022-11-22 09:46:02 +00:00
ismailgulek d389ce7ad7 Notifications (#275) 2022-11-21 19:37:13 +03:00
Stefan Ceriu 9f3ed6ca7b Revert "Force the timeline to stay at the bottom when first loading"
This reverts commit ef8d230328.
2022-11-21 15:02:28 +02:00
Stefan Ceriu ef8d230328 Force the timeline to stay at the bottom when first loading 2022-11-21 11:11:58 +02:00
Aleksandrs Proskurins 9d6495d14a Send messages on return (#325)
* Send messages on return

* Formating

* Changelog
2022-11-18 15:43:03 +00:00
Aleksandrs Proskurins 77a0d5a58f Introduce sending and sent state for timeline messages (#319)
* Updated md files

* Changelog

* Update CONTRIBUTING.md

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

* PR fixes

* Sending state in the timeline

* Changelog

* Formating

* Project file

* Make MessageTimelineItemDeliveryStatus Equatable

* Renamed seconds ago to elepsed time

* Moved show/hide logic into TimelineDeliveryStatusView

* Hide view when unknown status

* Added delivery status for other items

* Cleanup

Co-authored-by: Stefan Ceriu <stefanc@matrix.org>
2022-11-17 15:47:28 +00:00
ismailgulek 287fa4cad5 File messages on timeline (#311)
* Create media player screen

* Introduce `FileCache` to cache message attachments

* Add file loading functionality into the media provider

* Process tap action on timeline items

* Pass item taps to view model

* Navigate to media player on view model callback

* Commit project file

* Add changelog

* Add file messages into the timeline

* Create file preview screen

* Display files in the preview screen

* Commit project file

* Update Rust SDK to 1.0.19-alpha

* Add changelog

* Bump the RustSDK to `v1.0.20-alpha`

* Configure audio session on video playback

Co-authored-by: Stefan Ceriu <stefanc@matrix.org>
2022-11-16 11:34:37 +00:00
Stefan Ceriu ce6b0041d2 Fixes #296 - Improved bubble timeline item corner radii 2022-11-16 11:22:57 +02:00
Stefan Ceriu 2bce779206 Revert timeline item scrolling change in 3401d7a that seems to have introduced regressions. 2022-11-15 15:42:20 +02:00
ismailgulek 2e56fe9380 Video playback (#308)
* Create media player screen

* Introduce `FileCache` to cache message attachments

* Add file loading functionality into the media provider

* Process tap action on timeline items

* Pass item taps to view model

* Navigate to media player on view model callback

* Commit project file

* Add changelog

* Rename media to video

* Add a loader when large videos being processed

* Add back button explicitly on video screen, fixes for light scheme

* Handle right swipe to dismiss video
2022-11-14 08:58:18 +00:00
ismailgulek 3401d7a7e2 Message editing (#298)
* Add translation for editing mode

* Add `is_editable` flag to timeline item

* Add edit api implementation

* Add edit context menu action

* Add changelog

* Update Rust package

* Add isEditable into video timeline item

* Fix cyclomatic complexity

* Fix video item thumbnail loading

* Fix not updating timeline layout
2022-11-10 11:41:38 +00:00
ismailgulek 9f12b34a98 Video messages on timeline (#304)
* Create timeline item and view for video

* Create video timeline items in factory, do not bubble them

* Add changelog

* Update packages

* Revert DTCoreText update
2022-11-10 13:45:35 +03:00