235 Commits

Author SHA1 Message Date
Mauro Romito
e081811f1c Revert "use isDm from the SDK to determine if a room is a direct one to one room."
This reverts commit 58d0841bedb9cc40bd5880a76f3cc1f56c3b8bdb.
2026-05-06 13:04:11 +02:00
Mauro Romito
155d153b36 use isDm from the SDK to determine if a room is a direct one to one room. 2026-05-06 13:04:11 +02:00
Richard van der Hoff
bc32a05a2c Promote "history sharing on invite" out of developer options (#5480)
* Enable key-share-on-invite irrespective of feature flag

* Remove feature-flag dep: warning on starting chat with new people

* Remove feature-flag dep: invite from room member details

* Remove feature-flag dep: warning on new users in invite screen

* Remove feature-flag dep: from room details screen

* Remove feature-flag dep: starting chat from user profile screen

* Remove feature-flag dep: timeline info on forwarded keys

* Remove feature-flag dep: RoomScreenModel

* Remove `enableKeyShareOnInvite` from AppSettings

* Remove `enableKeyShareOnInvite` feature flag

* Remove outdated comments

* Update preview test room snapshots as their header now includes the history sharing icon
2026-04-27 14:43:18 +03:00
Mauro
2e9a499fc3 LLS Sheet implementation (#5420)
* Add LiveLocationSheet and refactor existing views to share code

* Implement logic for highlighting a specific LLS from a user once selected in the sheet

* Updated tests, project and added new previews for the LLS sheet.

# Conflicts:
#	PreviewTests/Sources/__Snapshots__/PreviewTests/liveLocationRoomTimelineView.Bubbles-iPad-pseudo.png
#	PreviewTests/Sources/__Snapshots__/PreviewTests/liveLocationRoomTimelineView.Bubbles-iPhone-pseudo.png

* add Equatable conformance to CLLocationCoordinate2D
2026-04-17 11:13:16 +00:00
Mauro Romito
fcbb7ab057 reactively determine with a timer if the lls timeline item has expired or not.
Move mockToday410/420/430 to private Date extension in LiveLocationRoomTimelineView

Agent-Logs-Url: https://github.com/element-hq/element-x-ios/sessions/d2136882-1acc-455d-a363-815e0fb73e89

Co-authored-by: Velin92 <34335419+Velin92@users.noreply.github.com>

fix
2026-03-31 14:29:04 +02:00
manuroe
c7026da5a9 Use single typeText call to speed up tests execution 2026-03-30 10:11:49 +02:00
Mauro
8934f68f7b Render the live location timeline item (#5209)
* created the data for the timeline item

# Conflicts:
#	ElementX/Sources/Other/Logging/Tracing.swift
#	ElementX/Sources/Services/Authentication/AuthenticationService.swift
#	ElementX/Sources/Services/Authentication/LinkNewDeviceService.swift

* Implemented the LLS timeline item

* updated preview tests

* pr and design suggestions

* previewscrollview is debug only
2026-03-24 10:34:00 +01:00
Mauro
9442b6981f Rename Sign Out to Remove Device + Update SDK 26.03.18 (#5280)
* update the sdk

* updated preview tests

# Conflicts:
#	ElementX/Sources/Screens/Timeline/View/Style/TimelineItemSendInfoLabel.swift
#	ElementX/Sources/Screens/Timeline/View/TimelineItemViews/LiveLocationRoomTimelineView.swift

* update sdk to 26.03.18 + regenerated preview tests after sign out copy change

* updated UI tests

* pr suggestions
2026-03-18 17:34:45 +01:00
Stefan Ceriu
5d973eb231 Update the RustSDK to v26.03.02 2026-03-02 18:14:21 +02:00
Doug
e1d2c1d415 Update the SDK. (#5141) 2026-02-24 16:29:30 +00:00
Doug
9b6324b295 Add boot detection in the NSE and use this to inform the user that there may be more notifications. (#5054)
* Add an initial implementation of the receivedWhileOfflineNotification.

* Only deliver a single receivedWhileOffline notification per boot and clarify the API.

* Add a 15-minute threshold for the receiveWhileOfflineNotification.
2026-02-06 15:18:09 +00:00
Doug
633bd65177 Fix a bug where the app wouldn't retry when the server rate-limits its requests. (#5022)
Change the retry limit to 3.

Without this the SDK immediately fails when rate-limited instead of waiting and trying again.
2026-01-30 10:37:23 +00:00
Stefan Ceriu
04053ae69b Update files following swiftformat upgrade 2026-01-27 12:50:57 +02:00
Stefan Ceriu
11af2bb0ca Horizontally scrollable code blocks (#5001)
* Remove attributed string backed codeblock background color

* Add code block support to attributed string componentization

* Render code blocks within their own custom horizontal scroll view within the timeline

* Update preview test snapshots

* Introduce a attributed string component type instead of a 2 different booleans.
2026-01-26 12:39:55 +02:00
Stefan Ceriu
b38480e1e7 Fix #4946 - Linkification strips trailing brackets from URLs 2026-01-12 20:49:31 +02:00
Doug
7c839efffc Add support for linking new devices in the QRCodeLoginScreen. (#4891)
* Adds the remaining parts for showing/scanning a QR code to link a new device.

* Refactor the QRCodeLoginService to work the same way as the LinkNewDeviceService.
2026-01-07 12:18:39 +00:00
Doug
afe6ce2bbd Add a Log Files entry to the Usage sizes. (#4921) 2026-01-06 21:39:39 +00:00
Doug
28556da516 Remove eraseToStream now that any AsyncSequence is available to us. (#4836)
* Remove `eraseToStream` now that `any AsyncSequence` is available to us.

* Remove the now unnecessary backport of Mutex.

* Silence a couple more deprecation warnings.
2025-12-10 18:33:15 +00:00
Skye Elliot
6880bf4c94 Set trust requirement even if setEncryption is false. (#4823)
* fix: Set trust requirement even if `setEncryption` is `false`.

- Calls `builder.decryptionSettings` with sender trust requirement,
  even if `setEncryption` is false`.
- Fixes https://github.com/element-hq/element-x-ios/issues/4702

* docs: Add doc comment explaining necessity of fix.

* feat: Set `roomKeyRecipientStrategy` alongside trust requirement.
2025-12-09 09:17:50 +00:00
Doug
5d8e7de8d1 Update the date separators to use "Today", "Yesterday" etc for messages in the past 7 days. (#4785)
* Update the date separators to use "Today", "Yesterday" etc for messages in the past 7 days.

* Fix the observation tests.
2025-11-26 10:47:29 +00:00
Mauro
dfa5214136 Threaded notifications (#4644)
* implemented grouping

* implemented presenting the thread

* improved the implementation by reusing the presentation action

* add Thread group to DMs to differentiate from non threaded messages of the same DM

* name for a threaded notification in group room

* focus event when tapping on a notification

* pr suggestions

* document
2025-10-23 15:28:45 +02:00
Mauro
6160c44d67 Update copyright holding and dates (#4640)
* Update copyright holding and dates

* compound IDE Macros updated

* update copyright

* update copyrights done

* update templates and README
2025-10-21 14:34:56 +02:00
Mauro Romito
00993ef92f revert observable to a pre ios 26 implementation 2025-09-30 12:26:43 +02:00
Mauro Romito
dbe5bb35b4 more fixes and preview tests updated 2025-09-26 16:38:55 +03:00
Doug
eaf14bfd87 Fix proxies by reverting the change that introduced schemes. (#4481)
This partially reverts commit 83fd64fe0a.
2025-09-08 12:03:41 +01:00
Stefan Ceriu
83fd64fe0a Improve global proxy detection, building and logging. 2025-08-25 16:57:17 +03:00
Stefan Ceriu
055a7b1caa Fix pasting no longer working for rich text formats. 2025-08-22 13:32:18 +03:00
Stefan Ceriu
3d95168e0c Fallback to the first type with a valid extension when sharing media and no supported content types can be found 2025-08-21 15:51:17 +03:00
Stefan Ceriu
93c1efc0a2 Add support for audio/* mime types on pasting/sharing/drag&dropping files. 2025-08-21 15:51:17 +03:00
Doug
2573c8b989 Update the SDK. (#4405) 2025-08-12 16:20:09 +00:00
Copilot
d5df52db59 Remove unreachable guard condition in String.asciified() (#4395) 2025-08-08 11:31:15 +01:00
Doug
05fc508632 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
Stefan Ceriu
ed6610f5d4 Fix Cannot explicitly specialize instance method 'deferFulfillment(_:timeout:message:until:) warning 2025-07-24 14:55:34 +03:00
Doug
d6ca170ed9 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
ee9f055822 Add a TracingHook. (#4345) 2025-07-23 14:29:31 +01:00
Doug
913e286f09 Fix the flakey preview tests. (#4329)
* Try fix the flakey preview tests with a low priority task…

* Try RunLoop.current.perform

* Revert #4321: Use a dispatch queue again. Also fixes the concurrency warning with a Mutex.

The Mutex package is only required for iOS 17, we can remove it when we set the minimum deployment target to iOS 18.
2025-07-17 12:45:33 +01:00
Doug
07093c2b1a Use a Task instead of a DispatchQueue to fix the flakey observation tests. (#4321)
When debugging in, sometimes the value hadn't been set after dispatching, whereas it has with a Task. Not sure I fully understand why and it's annoying that there aren't any observation APIs for didSet.
2025-07-15 17:58:38 +01:00
Mauro
84e095f726 Automatic Accessibility Audits on previews part 1 (#4322)
* setup target

* accessibility tests implementation

* removed ipad check

* pr improvements

* updated project
2025-07-15 14:40:16 +02:00
Mauro
89275b2a6c Aadded sender name when voiceover focuses a poll title (#4306)
* added sender name in poll voiceover

* improved the code

* code improvement
2025-07-08 16:37:27 +02:00
Stefan Ceriu
4d616c550c Add support for the new client wide threads feature flag
- enable it everywhere as it's safer than dealing with different configurations
2025-07-04 16:04:46 +03:00
Doug
84ff9ee2e2 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
71fca18a7c Fix media previews in private room notifications and pagination on upgraded rooms. 2025-06-24 20:12:20 +03:00
Stefan Ceriu
c56940e5a8 Move all Introspect VersionPredicates into Compound to have them all in the same place. 2025-06-19 15:06:16 +03:00
Stefan Ceriu
a8dcd78e4f Fix MediaTimeline screen header iOS 26 crash, update remaining version predicates. 2025-06-19 14:29:49 +03:00
Richard van der Hoff
24ce5c03de Add a developer option for history sharing on invite
Adds a new developer flag, enabling our experimental support for MSC4268.
2025-06-11 11:24:29 +03:00
Stefan Ceriu
ce277bfd7e Threaded timeline composer 2025-06-10 08:57:08 +03:00
Doug
b4174aed22 Adopt StateStoreViewModelV2 in the remaining settings screens. (#4158)
* Move the AuthenticationStartScreen into the Authentication directory.

* Commit the updated Sentry license.

No idea why they dropped the 2024 🤷‍♂️

* Use StateStoreViewModelV2 in BugReportScreen.

* Use StateStoreViewModelV2 in UserDetailsEditScreen.

* Use StateStoreViewModelV2 in NotificationSettingsScreen.

* Use StateStoreViewModelV2 in NotificationSettingsEditScreen.

* Use StateStoreViewModelV2 in LegalInformationScreen.

* Use StateStoreViewModelV2 in LogViewerScreen.

* Use StateStoreViewModelV2 in AnalyticsSettingsScreen.

* Rename AdvancedSettingsScreen directory.

* Use StateStoreViewModelV2 in EncryptionResetScreen.

* Use StateStoreViewModelV2 in EncryptionResetPasswordScreen.

* Use StateStoreViewModelV2 in SecureBackup…Screens.

* Use StateStoreViewModelV2 in LoginScreen.

Seems this one was ignored waiting on the fulfillment transitionValues implementation.

* Use StateStoreViewModelV2 in DeactivateAccountScreen.

* Move DeactivateAccountScreen into the Settings directory.
2025-05-30 12:24:56 +01:00
Doug
2ea9302095 Update the SDK. 2025-05-16 09:58:05 +03:00
Doug
405d0572c5 Fix the integration tests. (#4084)
* Fix logging/alerts during OIDC cancellation.

- Cancelling from within the web view wasn't being handled since moving the UserIndicatorController into the presenter.
- The WAS canceledLogin error code is also used when the system cancels the login. When the system cancels there's a failure reason included in the error.

* Allow UI tests to tap on any point within a view.

* Make the homeserver optional in integration tests.

* Dismiss the keyboard after entering a username to reveal the password text field.

Do the same after entering the password field too, just in case.

* Add a loop while waiting for the WAS prompt to be shown.
2025-05-01 12:07:04 +01:00
Doug
a67559299a Update the template screen to use the new(ish) Observation framework. (#4077)
* Update the template screen to use the new(ish) Observation framework.

* Add a variant of deferFulfillment that supports observables.

* Update snapshot fulfilment to work with either a publisher or a stream.
2025-04-30 16:49:23 +01:00