Commit Graph

785 Commits

Author SHA1 Message Date
Doug 2f2e6f6226 Revert weak media provider (#4483)
* Revert "Address the real lifetime issue of the SDK's `Client` by making `Context.mediaProvider` weak. (#4466)"

This reverts commit c794144ef1.

* Better docs.
2025-09-08 17:48:58 +01:00
Doug 90504d89c8 Use the SDK's offline detection everywhere (except for restarting the sync loop). (#4472)
* Use the SDK's offline state to drive the offline indicator.

* Only use network reachability for restarting the sync loop, use the homeserver reachability for requests.

* Add a separate indicator to distinguish when the server is unreachable but the device is online.
2025-09-08 12:18:02 +00:00
Doug c794144ef1 Address the real lifetime issue of the SDK's Client by making Context.mediaProvider weak. (#4466)
This reverts commit 927aea4bfe.
2025-09-05 17:18:14 +00:00
Doug 53eb1c1718 Allow joined rooms to be pushed within a space. (#4460)
* Allow joined rooms to be pushed within a space.

* Push a room in the space flow tests.

Also fixes some snapshots stale snapshots.

* Show the selected space/room within a space and set a custom title view.
2025-09-03 17:48:49 +01:00
Doug 1be6aff281 Fix a bug where invites would be hidden when the Low Priority feature is enabled. (#4461) 2025-09-03 17:15:25 +01:00
Doug c48580aeb4 Move call presentation from the chats flow into the user session flow. (#4459) 2025-09-03 17:01:07 +01:00
Doug eda37eb626 Use the Emoji/Map/Poll view models. (#4458)
* Toggle emojis in the EmojiPickerScreenViewModel.

* Send locations in the StaticLocationScreen.

* Send polls in the PollFormScreen.
2025-09-03 16:52:28 +01:00
Doug 049bb7b740 Use the SDK's SpaceService, SpaceRoom and SpaceRoomList. (#4455) 2025-09-01 15:22:37 +01:00
Doug 24067ce275 Use the UserSession for VoiceMessageMediaManager injection too. 2025-08-27 18:13:03 +01:00
Doug f67f826bb7 Bundle ClientProxy & MediaProvider injections together in UserSession. 2025-08-27 18:13:03 +01:00
Doug dfb2425240 Introduce flow parameters to simplify dependencies for child flows. (#4448) 2025-08-27 12:56:06 +00:00
Doug a1c31faa64 Remove unnecessary awaits on RoomFlowCoordinator.init. (#4434) 2025-08-22 16:13:53 +01:00
Doug d119964d50 Space flow improvements. (#4430)
* Space flow improvements

- Use a state machine to select a space.
- Add a SpaceFlowCoordinator for recursively presenting subspaces.
- Get the spaceRoomListProxy when tapping on the space so we can indicate failures.
- Fix the total room count in SpaceListScreen.

* Refactor spaceRoom → spaceRoomProxy.

* Add a UI test for the Spaces flow.
2025-08-22 15:49:47 +01:00
Copilot 8c38c11146 Add a Low Priority room filter behind a feature flag. (#4394)
* Add Low Priority room filter with incompatibility rules

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

* Add a feature flag and use the SDK filters.

* Fix filter tests and add RoomSummaryProvider tests for the default filters.

* Remove unnecessary comment.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: pixlwave <6060466+pixlwave@users.noreply.github.com>
Co-authored-by: Doug <douglase@element.io>
2025-08-20 11:56:44 +01:00
Doug 3f6fc03ffd Fix some app route navigation bugs. (#4415)
- Opening a notification would update the stack with an animated pop.
- Opening a permalink from the timeline wouldn't push the room as a child.
2025-08-15 10:34:01 +01:00
Doug f1f6cace77 Fix a bug where the image upload screen was unintentionally dismissed for some failures. (#4414) 2025-08-14 17:19:57 +00:00
Doug 8000dbe29f Add a SpaceScreen for listing rooms and subspaces within a space. (#4412) 2025-08-14 16:24:20 +00:00
Doug 3dc6d73899 Add SpaceRoomCell & Space…ProxyProtocols and use them on the SpaceListScreen. (#4404) 2025-08-13 12:06:29 +01:00
Copilot 63aadefd64 Remove unreachable guard condition in String.asciified() (#4395) 2025-08-08 11:31:15 +01:00
Doug a094362416 Fix some SwiftLint warnings. 2025-08-08 10:33:08 +01:00
Doug c5cd3ea79e Move the Settings flow from the Chats flow up one level to the UserSession flow. (#4390)
* Add the basis for a state machine to UserSessionFlowCoordinator.

* Move the Settings flow from the Chats flow to UserSession flow.

It now works from the Spaces tab.

* Add a StateMachineFactory and use it to publish the state in the tests.
2025-08-07 12:13:02 +00:00
Mauro 5ab6f90863 Last Owner should edit admins, and not leave when is last (#4372) 2025-08-07 08:40:14 +00:00
Doug f59a93d1a9 Initial setup for the SpaceListScreen. (#4380) 2025-08-05 11:06:26 +01:00
Doug bf0adfcb25 Implement tab bar badges, visibility and selection. (#4373) 2025-08-05 09:23:45 +01:00
Mauro 731d60b6e9 Restore permissions to creator and display them as owners in the list (#4369)
* restore permissions to creator and display them as owners in the list

* improved the code to use actually 5 roles in the app to distinguish a real creator from an owner
2025-07-31 16:52:55 +02:00
Doug 496c29ae36 Hide the tab bar whilst we're working on it and add some tests. 2025-07-31 14:09:26 +01:00
Doug 1ca84c8c94 Re-introduce a basic UserSessionFlowCoordinator using the NavigationTabCoordinator. 2025-07-31 14:09:26 +01:00
Doug 5658a30136 Rename UserSessionFlowCoordinator to ChatsFlowCoordinator. 2025-07-31 14:09:26 +01:00
Mauro e70e1f36b2 SDK Update + PowerLevels API update (#4366)
* update the sdk, and updated the power levels APIs

Revert "update the sdk, and updated the power levels APIs"

This reverts commit d3b291003d2b6fd6346ef7e445af4970fda62348.

x

* pr suggestions
2025-07-30 14:42:45 +00:00
Doug 5242e7fb6c Drop support for the legacy session directory and optional store encryption.
Store encryption became mandatory in #2692
Rust's sessionPath replaced the legacy session directory in #2903
Native sliding sync migration resulted in new restoration tokens for new users in #3071 and later for all users by #3801.
2025-07-30 14:42:59 +01:00
Doug 5762e1c537 Stop showing the sliding sync proxy alert to any remaining users.
The session will simply fail to restore and the restoration token deleted.
2025-07-30 14:42:59 +01:00
Stefan Ceriu df335bd2b1 Multi file uploads (#4358)
* Allow MediaPickerScreen users to select the media selection mode (single or multiple)

* Fix cancellation

* Add support for multiple media URLs on the MediaUploadPreviewScreen.

* Support processing more URLs on the `MediaUploadingPreprocessor` and sending more on the `MediaUploadPreviewScreen`

* Add feature flag for `multipleAttachmentUploadEnabled`

* Add a label showing the current preview item index in the MediaUploadPreviewScreen

* Add support for dragging and dropping or pasting multiple items at the same time.

* Support sharing more than one file through the share extension.

* Limit the number of items that can be shared in one go to 5.

* Fix unit tests

* Fix incorrect fatal error when dealing with single selection media pickers.

* Document the `multipleAttachmentUploadEnabled` usage in the context of the MediaPicker.

* Use a task group for processing selected media in the photo library picker.

* Use a task group for processing multiple selected media in the MediaUploadingPreprocessor

* Switch the maximum number of items that can be shared to 10.

* Allow multiple items to be pasted at the same time.
2025-07-30 15:44:05 +03:00
Doug 01033cf53e Add support for Space avatars. (#4362) 2025-07-29 12:20:13 +01:00
Doug 75bc26d20b Use the maxUploadSize in the media upload screen. (#4359)
* Fix a bug where some files sizes were sent as 0.

* Make FileManger.sizeForItem(at:) a UInt.

The docs specifically say that FileAttributeKey.size returns an unsigned long long so I have no idea why we were returning a Double here…

* Add the maxMediaUploadSize property on ClientProxy.

* Use the maxUploadSize to set a target video size and to show a file too big error.

* Refactor media upload parameter order.
2025-07-29 12:18:53 +01:00
Doug 095d927498 Refactor LoggingTests utilising Rust's new ability to redirect log files at runtime. (#4353) 2025-07-25 08:54:36 +01:00
Stefan Ceriu fb40bfd690 Use the new TimelineController message sending methods for media uploads. 2025-07-24 14:55:34 +03:00
Stefan Ceriu 1fc15a220d Remove the threadRootEventID associated value from all the RoomFlowCoordinatorStateMachine states and replace them with a UserInfo passed TimelineController. 2025-07-24 14:55:34 +03:00
Stefan Ceriu 3fcbc8c60a Transition voice messages to the new in thread sending mechanism 2025-07-24 14:55:34 +03:00
Stefan Ceriu ed98f64a35 Remove threadRootEventID parameters from TimelineProxy send methods. This is now handled internally to the SDK as long as the right timeline instance is used. 2025-07-24 14:55:34 +03:00
Doug d6f7607538 Update the default logs directory and allow collection from elsewhere. (#4352)
* Replace deprecated URL methods.

* Start putting log files in Library/Logs (moving existing files with a migration.)

* Make Tracing.deleteLogFiles aware of the legacy logs location.

* Allow the logs to be collected from a different directory.
2025-07-24 09:49:29 +01:00
Doug 76e83462a8 Add a TracingHook. (#4345) 2025-07-23 14:29:31 +01:00
Doug 5e165be8c3 Make the remote settings hook usable within the app extensions. (#4342) 2025-07-22 17:09:53 +01:00
Doug 82c659f3da Refactor Rageshake URL and Target configuration. (#4337)
* Move the rageshakeURL configuration from the BugReportService to AppSettings.

* Refactor Target to return a handle when configuring.

This helps with reconfiguration and removes the @MainActor constraint.
2025-07-22 10:19:26 +01:00
Doug f655fbc28b Show an alert when entering an account provider that requires Element Pro. (#4326) 2025-07-17 12:41:26 +00:00
Doug 448bc2d4e3 Merge the AuthenticationService with the QRCodeLoginService. (#4323)
* Merge the AuthenticationServer with the QRCodeLoginService.

* Merge AuthenticationClientBuilderFactory and AuthenticationClientBuilder into AuthenticationClientFactory

The separation is no longer needed now that password/OIDC login and QR code login have a similar API shape.
2025-07-15 17:59:15 +01:00
Doug 74952659e8 Update the SDK to fix a sync performance regression. (#4324) 2025-07-15 10:51:59 +00:00
Doug de4f05f338 Update the SDK and build a client before logging in with a QR code. (#4320) 2025-07-14 13:31:06 +00:00
Doug e46165119f Use the timeline when marking a room as read (#4319)
* Forward JoinedRoomProxy.markAsRead to the timeline

The room version was building a fresh timeline even though we already had one.

* Run swiftformat 0.57.0.
2025-07-14 12:20:41 +01:00
Doug c7b562250b Adopt StateStoreViewModelV2 in more screens. (#4275)
* Use StateStoreViewModelV2 in AnalyticsPromptScreen.

* Use StateStoreViewModelV2 in UserProfileScreen.

* Use StateStoreViewModelV2 in MediaUploadPreviewScreen.

* Use StateStoreViewModelV2 in the Roles & Permissions screens.

* Add the asyncStream variant of deferFailure.

* Use StateStoreViewModelV2 in BlockedUsersScreen.

* Use StateStoreViewModelV2 in ManageRoomMemberSheet.

* Use StateStoreViewModelV2 in ResolveVerifiedUserSendFailureScreen.

* Use StateStoreViewModelV2 in ReportContentScreen.

* Use StateStoreViewModelV2 in ReportRoomScreen.

* Use StateStoreViewModelV2 in StaticLocationScreen.

* Use StateStoreViewModelV2 in EmojiPickerScreen.

* Use StateStoreViewModelV2 in PollFormScreen.

* Use StateStoreViewModelV2 in DeclineAndBlockScreen.

* Use StateStoreViewModelV2 in RoomDetailsScreen.

* Fix a random compilation error that just popped up 🤷‍♂️

* Fix expectation message.
2025-07-02 15:13:42 +01:00
Doug a092211335 Fix flakey AuthenticationService test. (#4270)
The AppSettings overrides were being propagated.
2025-06-30 16:31:01 +01:00