Commit Graph

761 Commits

Author SHA1 Message Date
Stefan Ceriu 6700d4301d #748 - Implement methods for processing various media types and prepa… (#772)
* #748 - Implement methods for processing various media types and preparing them for upload

* Various tweaks following code review:
- added blurhash generation
- changed thumbnails to jpeg
- throwing if file size cannot be retrieved
- move MediaProvider files to separate folder so they can cleanly be imported in the NSE
- added audio file processing
- switched all image resizing methods to ImageIO
- various renames

* Fix blurhash formatting issues, `swift-format-ignore-file` doesn't work

* Processing all media within unique folders to avoid conflicts

* Fix various warnings

* Rename `sizeForItemAt(_ url: URL)` to `sizeForItem(at url: URL)`

* Remove unnecessary resizeImage(UIImage) method, start by copying not moving the file to the unique location

* Add back warning for roomDetails.avatarURL
2023-04-21 12:13:36 +03:00
Stefan Ceriu 59a4e0ac7c Adopt new timeline item debug info and overhaul the timeline item deb… (#781)
* Adopt new timeline item debug info and overhaul the timeline item debug menu
2023-04-19 18:07:51 +03:00
Nicolas Mauri 5b7ec6c9e2 Set up Analytics to track data per session (#780) 2023-04-18 07:33:32 +00:00
Alfonso Grillo 2439431287 Improve tests' reliability (#763)
* Create publisher extension into the unit test target

* Add ViewModelContext test extension

* Refactor BugReportViewModelTests

* Fix failing UTs

* Idea PublishedClosure

* Refactor RoomDetailsViewModelTests

* Replace more Task.yield/Task.sleep

* Move leaveRoom/ignore/unignore under the @MainActor

* Revert "Idea PublishedClosure"

This reverts commit 4ab25291041f0dbd99083baf9d95bc6647f1fd97.

* Make process(viewAction:) sync

* Refactor BugReportViewModel callback to a publisher

* Fix UTs

* Refactor ReportContentViewModel

* Fix ui test build error

* Try make sonar happy

* Empty commit

* Revert "Try make sonar happy"

This reverts commit 97804b19373a8f55f12174ccbf27f1fd8db583b7.

* Rename ui test identifier

* Cleanup

* Callback -> actions refactor

* Update template

* Add publisher in TemplateCoordinator

* Add env variable in IntegrationTests.xctestplan

* Add async sequence extension

* Amend integration test plan

* Remove env variable from target.yml

* Cleanup

* Fix failing UI tests
2023-04-05 17:07:12 +02:00
Doug 220138d492 Add Block user to Report Content screen. (#742) 2023-04-03 10:21:24 +01:00
Stefan Ceriu 5f6edacc1a Implements #745, #746, #747 - Initial media uploading flows
- room composer contextual menu for selecting source
- coordinator for presenting the different sources
- system picker handling and URL passback
- file preview after selection
- feature flag
2023-03-31 17:00:36 +03:00
Doug d7622ea731 Update UI tests (#730)
* Update snapshots.

* Fix timeline grouping and UI tests.

* Remove German UI tests with double-length pseudolanguage.

Avoids tests breaking when translations are updated.
2023-03-28 13:06:53 +00:00
Doug 2b753b1135 Use strings from Localazy (#718)
* Adopt strings from Localazy.

* Remove all old Android strings.

* Disable german snapshot tests for now.

* Rebase and add latest strings.
2023-03-27 17:18:59 +00:00
Doug efdb47a98a Move media file loading logic to the SDK. (#702)
* Adopt getMediaFile for media previewing.
2023-03-20 14:51:33 +00:00
Mauro 61d42a24ba Leave Room (#699)
* created the row in the view and the alert, and added the new function to the RoomProxy

* fixed an issue with the alert function

* handling the navigation

* fixed a bug with the detail coordinators being dismissed incorrectly when inside a stack

* implementation completed

* replaced UI screenshots

* added a test for the fixed bug of the coordinators

* trying to increase the wait time for the expectation

* improved the test

* improved the buttons UI

* uploading artifacts for unit tests

* added result bundle true

* improved the tests

* added a new test

* pr suggestions

* updating mock

* PR suggestions

* improved tests

* fixed UI tests

* pr should be ready now

* removed testing code

* reduced complexity

* fixed test

* added a an assert to the new test case

* more tests and messages cases

* pr comments addressed

* completed
2023-03-17 13:57:08 +00:00
Doug 1a81768c62 Fix accent colour not being applied to Alerts etc. (#701) 2023-03-14 13:38:36 +00:00
sem pruijs d001b3dd32 Fix message composer textfield accessibility label (#688) 2023-03-09 10:25:02 +00:00
sem pruijs 25aa6963a0 Hide scroll down button VoiceOver (#670)
* Hide scroll down button for VoiceOver users if the button is hidden for visual users

* Add change log
2023-03-06 09:34:03 +02:00
Mauro eed031c9cc Report Content v2 (#659)
* created the empty files

* set up the view content

* connected the Room Coordinator to the ReportContent Coordinator

* added the loading indicators and the dismiss behaviour

* almost completed but I need to display the success indicator when the report is sent succesfully

* completed

* added an untranslated string

* tests

* Update ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>

* Update ElementX/Sources/Screens/ReportContent/View/ReportContentScreen.swift

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>

* pr comment

* pr suggestion

* removing unused identifiers

* fixing compilation error

* added a form text editor view

* changelog

---------

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>
2023-03-02 18:24:10 +00:00
Doug 1c09a7eace Update login and server selection screens (#651)
* Update login and server selection screens.

* Replace all NavigationViews with NavigationStacks
2023-03-02 18:05:18 +00:00
Stefan Ceriu 32c4594a65 Collapsible timeline item tweaks (#646)
* Fix collapsible timeline items grouping just one item, remove duplicate timeline item checking, clean up the logic

* Cleanup collapsible, separator and state room timeline view paddings

* Add changelog
2023-02-27 17:57:41 +02:00
Doug 6ff135032f Put back the initial pagination. (#635) 2023-02-24 17:46:19 +00:00
Stefan Ceriu 252a5f2bdc Sliding sync session reset manual backpagination (#628)
* Force a timeline backpagination when the app becomes active again in case the sliding sync session expires and it no longer shows any items

* Better way to load up timeline items when empty
2023-02-24 14:41:44 +02:00
Doug 21bd37c0b1 Naming consistency and improve conformance (a bit) (#625) 2023-02-24 11:44:41 +00:00
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 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
Mauro e2f2604ec0 Removed Edit/Reply Dimming (#606)
* #542 removed reply/edit dimming

* removed unneeded didSet
2023-02-21 10:02:35 +00:00
Stefan Ceriu 4fd24a6c16 Fixes #322 - Developer options menu (#581) 2023-02-15 11:07:06 +00:00
Michael Kaye a06365517c Align accessibility IDs with elementX android (#567)
* Rename onboarding and login user/pass accessibility ids.

* Refactor remaining server change accessibility IDs

* Avoid accessibilityIdentifier spreading to all decorations on the textBox.

Required because otherwise there are multiple items tagged with the accessibilityId
which means we can't click on "the" item.

* Move all accessibility identifiers to `AccessibilityIdentifiers.swft`
- use same naming convention on all of them
- remove the unused ones
- fix build errors in integration tests and invalid identifiers (still broken until autodiscovery lands on rosa)

---------

Co-authored-by: Stefan Ceriu <stefanc@matrix.org>
2023-02-15 07:53:04 +02:00
Mauro Romito d7f80807df 547 refactored userNotification into userIndicator 2023-02-14 11:35:17 +01:00
Doug d0960cf75c Message composer icon and scroll to bottom button dark mode (#562)
Remove animations on the composer when entering/exiting edit/reply mode too.
2023-02-10 09:48:01 +00:00
Stefan Ceriu a02b461c37 Switch to weakAssign for all AppSettings listeners 2023-02-09 11:41:14 +02:00
Stefan Ceriu 98cfc2c9fb Fixes #367 - Refactor AppSettings usage patterns 2023-02-09 11:41:14 +02:00
Doug f7fbdcc32c Update the timeline to correctly fix it to the bottom in UI tests. (#553) 2023-02-08 18:58:12 +01:00
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 70cff446cf Workaround #418 - Allow swiping back from file previews (#499) 2023-01-30 18:53:05 +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