Commit Graph

3139 Commits

Author SHA1 Message Date
Danny eae464ecd7 Timeline: add a Jump to Unread button and a new-message badge on the scroll-to-bottom button. (#5506)
* Timeline: add a Jump to Unread button and a new-message badge on the scroll-to-bottom button.

* Rename scrollToFirstUnread to scrollToReadMarker for consistency with isReadMarkerVisible.

* Cache readMarkerUniqueID and unreadMessageCount as stored properties on TimelineState.

* TimelineViewModel: rename newTimelineItems and drop redundant ordering comment.

* Use Compound chevron icons in TimelineScrollButton.

* Fix TimelineScrollButton layout at large dynamic type sizes.

* Add a trailingAccessory slot to topBanners and use it to dodge banners with the jump-to-read-marker button.

* Put jump-to-read-marker behind a developer-options feature flag.

* Fine-tune TimelineScrollButton sizing and badge colour.

* Remove TimelineScrollButton chevron offset that was compensating for SF Symbol centering.

* Drop the new-messages count, replace with a presence dot.

* Move both timeline scroll buttons to bottom-right and revert topBanners trailingAccessory slot.

* Position TimelineScrollButton badge above for up direction and below for down direction.

* Add long-press mark-as-read pill to the timeline scroll buttons

* Read isSwitchingTimelines from state in updateHasNewMessagesAtBottom.

* Use assertionFailure when scrollToReadMarker is called with no read marker.

* Add TimelineScrollButton preview snapshots.

* (fix) design and various self-review issues

* (fix) suppress scroll button tap after long-press

* (feat) fall back to RoomInfo.fullyReadEventID for jump-to-unread

* (fix) hide jump-to-unread immediately after mark-as-read

* (fix) align with newer matrix-rust-sdk surface

* Bump the RustSDK to v26.05.20

---------

Signed-off-by: Daniel Anderson <daniel.anderson@toptal.com>
Co-authored-by: Stefan Ceriu <stefan.ceriu@gmail.com>
2026-05-21 15:03:32 +03:00
Stefan Ceriu ab82068740 Make the AnalyticsServiceMock default a variable as well, for consistency. 2026-05-21 12:37:52 +03:00
Stefan Ceriu 13128d9869 Provide a default implementation for the NotificationToneManager and fix the NotificationSettingsScreen preview tests 2026-05-21 12:37:52 +03:00
Michael dd0de4d7b0 Custom Notification Tones (#5527)
* added foundation for custom notifications

* feat: add localizations for tone names

also, if available, include the pro sound in the element x sound list

* use a static file location to store the notification tone

and update the file at that location when selected

* if there's a problem previewing or setting the alert tone, toast the user with the error

* rename tone directory

* create NotificationToneManager to handle tone business logic

* conform to project formatting

* assign custom sound to actual notifications

* dry up notification generation in the nse

* add compilation condition for including notification alert tone and remove from share extension

* swift format had some opinions

* flatten the notification tone ui, removing system/elementx designations

* fix stored file url breaking due to sandbox path changes

* tone manager can import custom tones and provide a list of imported tones

* ui support for custom tones

* can delete custom imported tones

* sort the custom tones

* add additional preset sounds

* can choose caf files for custom sounds and fix location persistence issues

* store sound locations with relative links

this is a better solution than storing bookmarks since bookmark resolution can be variable and differ from freshly derived urls

* add docs for new notification features

* run tone conversion in background

* resolved several ai found issues

* added protocol and mocks for notification tone manager

* added tests for notification settings screen vm interactions with the tone manager

* add tests for notification tone manager

* rename element tone names per feedback

* move custom tone option to the top of the notification tone list

* rename Tone to Sound for consistency with Android

* remove additional bundled tones

* restore accidentally deleted Element Default sound file

* system alert tones are filtered by what's available on the system prior to finalizing the collection

* Add a couple more caf file conversion log statements

* Simplify the notification sound conversion logic

* Update notification sound strings in sync with Android

* update xcodeproj after rebase

* remove conditional compilation and include NotificationAlertSound in share extension

* Use AudioPlayer instead of custom tone previewer and remove the previewer

* rename NotificationTone

* Consolidate and move errors to top of NotificationToneManager

* tone manager no longer depends on userinterfacecontroller

* Move static Tone properties to NotificationToneManager

* resolve view model initializer feedback

* update xcodeproj

* fatalerror when tone manager cannot init

* Remove banner icon on alert tone error

* fixup review feedback

* Moved URL handling to NotificationToneManager
2026-05-20 15:40:34 +03:00
renovate[bot] cb1c89be9d Update XcodeGen (#5610) 2026-05-20 08:33:44 +03:00
Michael 5a07c98afc Make AnalyticsService mockable via `AnalyticsServiceProtocol (#5599)
* Create AnalyticsServiceProtocol and conform AnalyticsService

* Replace AnalyticsService properties and arguments with AnalyticsServiceProtocol

* Inline AnalyticsServiceMock replacing old mock

* handle more complex AnalyticsServiceMock callsites

* move documentation from AnalyticsService to AnalyticsServiceProtocol
2026-05-20 08:23:58 +03:00
Mauro Romito b3e6373750 update sdk to 26.05.18 2026-05-18 17:40:17 +02:00
Atridad Lahiji 96230fcc36 Fixing Room List in Spaces View Not Rendering Some Rooms (#5595)
Removed drawingGroup call in SpaceRoomCell and fix #5306
2026-05-18 16:23:09 +03:00
ElementRobot 087bf9a2c8 Translations update (#5604)
* Translations update

* Translations update

* update the name of the theme keys

---------

Co-authored-by: Element CI <ci@element.io>
Co-authored-by: Mauro Romito <mauro.romito@element.io>
2026-05-18 11:16:18 +00:00
Mauro 6c0aaa7a58 Invite the DM recipient to a new room (#5588)
* handle the details to invite users flow.

* implemented the room creation in the invite screen, and its dismissal + navigaton to the newly created room

* updated preview and unit tests

* pr suggestions
2026-05-18 10:08:07 +02:00
Mauro Romito 9ed47c61b7 possible fix for the top banner having it's pieces slide and appear independently 2026-05-17 14:40:47 +03:00
Stefan Ceriu 4ff58f8756 Hook up client pausing and resuming next to sync starting and stopping for nightly and debug builds.
This will hopefully close all file descriptors and prevent the system from killing the app in the background.
Reported in https://github.com/matrix-org/matrix-rust-sdk/issues/6366 and implemented in https://github.com/matrix-org/matrix-rust-sdk/pull/6495
2026-05-17 14:37:55 +03:00
Stefan Ceriu 579b63d331 Remove unused method 2026-05-17 14:37:55 +03:00
Stefan Ceriu 16715ea1c2 Remove the focused ComposerToolbar accessibility test and preview
The automatically focused keyboard is creating false positives when running accessibility
tests and doesn't bring any value in the previews. Simplest solution is to remove it.
2026-05-16 16:54:32 +03:00
Mauro Romito a4a857003c use isDM from the SDK to determine if a spaceRoom, a joinedRoom or a notificationItem are from a dm room. 2026-05-14 13:47:44 +02:00
Michael ff5dcb040d Replace the ServiceLocator with direct dependency injection (#5548)
Removes the ServiceLocator singleton and instead directly injects the dependencies it was holding for more control over instantiation of the various component subtrees and better visibility over how they're being used.
2026-05-14 09:45:49 +03:00
Stefan Ceriu f70182d09a Add a developer option button for marking every single room as read (#5582)
This will use an underlying SDK method and send a private read receipt plus a fully read marker in every single room the user is part of. It will most likely be a long operation that will get rate limited so the task is set to run detached for as long as it takes.
2026-05-13 19:46:52 +03:00
Stefan Ceriu 6aec4f210a Bump the RustSDK to v26.05.13 2026-05-13 16:48:11 +03:00
Mauro Romito 690a177f6b apply last character font size to the attachment 2026-05-13 12:40:01 +02:00
Mauro Romito 5763e152b8 update SDK to 26.05.12 (v0.17 of the main repo)
# Conflicts:
#	ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
2026-05-12 17:55:16 +02:00
Mauro Romito 07fc022a65 prevent replies to LLS timeline items, and live location sharing in threads 2026-05-12 17:26:02 +02:00
Stefan Ceriu 212ac17d0b Add media upload preview cropping capability for images (#5575)
Start using [Mantis](https://github.com/guoyingtao/Mantis) to crop and rotate images
before upload.
2026-05-12 17:04:08 +03:00
Mauro Romito d60f5d6efb UI tests updated 2026-05-12 14:46:18 +02:00
Mauro Romito 8318198601 update preview tests (also improved the strings for ltr and rtl testing) 2026-05-12 14:46:18 +02:00
Mauro Romito 2217803825 update all the timeline item views to use the new implemementation with nstextattachment 2026-05-12 14:46:18 +02:00
Mauro Romito 686753721e new implementation based on the usage of NSTextAttachment to allocate space for the timestamp 2026-05-12 14:46:18 +02:00
Mauro Romito deac31e48d remove code related to the previous bidi usage implementation of whitespaces for the timestamp label 2026-05-12 14:46:18 +02:00
Valere 2582293c06 call: Only group voice/video call if threads developer option is on 2026-05-12 10:39:05 +03:00
Doug 008975c7b0 Let Element Call manage the safe areas within the web view. (#5573)
* Let Element Call manage the safe areas within the web view.

* Update Element Call to 0.19.3.
2026-05-11 18:04:00 +01:00
Doug e235e3ba81 Link new device with QR code tweaks. (#5563)
* Hook up Rust's InvalidCheckCode failure to the right state when linking a new device.

* Automatically regenerate a new QR code instead of ending the flow when it expires.
2026-05-11 14:22:34 +01:00
Valere Fedronic ba23153ab4 feat: Render declined calls in DM timeline (#5512)
* feat: Render declined calls in DM timeline

* Record preview snapshots

* review: Use CallIntent constant

* review: clean-up

* Record preview snapshots

* review: Move private field to the bottom with MARK: - Private

* review: Male CallIntent a string enum to use rawValue

---------

Co-authored-by: Element CI <ci@element.io>
2026-05-11 14:51:30 +03:00
ElementRobot 2b3cd27129 Translations update (#5569)
Co-authored-by: Element CI <ci@element.io>
2026-05-11 11:43:18 +01:00
Doug bd2c775ff7 Fix an accessibility test failure. (#5571) 2026-05-11 11:28:37 +01:00
Doug 091ff8a35f Use onScrollGeometryChange to hide the scrollable media caption fade. (#5559)
Fixes a hang on macOS and more closely aligns with Android.
2026-05-07 13:17:49 +01:00
Stefan Ceriu d6a8bcf24c Remove the RoomDirectorySearch feature flag and enable the feature by default. 2026-05-06 15:12:59 +03:00
Mauro Romito 6d71a3efe5 updated preview tests 2026-05-06 13:53:36 +02:00
Mauro Romito 53669a606c Add the setting to change live location permissions to the change permissions screen. 2026-05-06 13:53:36 +02:00
Mauro Romito d5170ae4cc 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 b5d9f03ad0 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
Mauro Romito 2ce32d00ef update SDK to 26.05.06 2026-05-06 13:04:11 +02:00
Doug 0355e9f708 Add an OAuthPresenterHook. (#5545)
* Add an OAuthPresenterHook.

* Update the enterprise submodule.
2026-05-06 10:29:25 +01:00
Stefan Ceriu 5e95bd6531 Move verification request acceptance confirmation to method call response instead of delegate callback
This because the Rust side verification state machine doesn't wait for the request
to be sent and acknowledged before changing its inner state and with the automatic
starting of SAS in https://github.com/element-hq/element-x-ios/pull/5116 that creates
race conditions between `m.key.verification.ready` and `m.key.verification.start`.
2026-05-06 11:11:38 +03:00
Mauro Romito 680a9a587c Show alert if user has not beacon and beaconInfo permissions in the room. 2026-05-05 15:10:38 +02:00
Doug 0acbc41432 Rename OIDC to OAuth. (#5525)
* Rename OIDC to OAuth.

* Update the enterprise submodule.
2026-05-05 14:07:06 +01:00
Doug fef942f529 Restore the .oidcCallback route for external authentication. (#5391)
* Restore the .oidcCallback route (partially reverts #3461) for external authentication.

* Make sure OIDC also works for non-http URLs.

* Remove oidcAuthentication from the state machine.

There isn't a reliable way to detect failure/cancellation when e.g. the user returns from an external app without interacting with the MAS page.
2026-05-05 12:47:07 +01:00
Daniel Anderson 4188a10ea9 Fix a crash on iOS 26 when the scene's keyWindow is nil at cold start.
On iOS 26, `UIWindowScene.keyWindow` can be nil during scene connection
until the scene becomes active. The implicitly-unwrapped `mainWindow`
then crashes on the next line. Fall back to `scene.windows.first`, which
is the SwiftUI WindowGroup's window and is already attached to the scene
at this point.
2026-05-05 12:08:30 +02:00
Element CI f0aac9295b Translations update 2026-05-04 15:28:22 +03:00
Mauro Romito d02459d9b8 limit knock FF only room creation and access type changes
# Conflicts:
#	ElementX/Sources/Screens/RoomScreen/RoomScreenViewModel.swift
2026-05-04 14:12:31 +03:00
renovate[bot] 272c8ca764 Update dependency PostHog to v3.57.0 (#5532)
* Update dependency PostHog to v3.57.0

* Run XcodeGen, update Package.resolved and Settings.bundle
2026-05-04 14:10:32 +03:00
Doug 9015c3e483 Fixes for multi-window support. (#5528)
* Correctly handle the re-opening of the main window.

Add an additional safe-guard to ensure only one main window exists.
Make sure all secondary windows use the correct tint colour.

* Fix a bug where the settings screen isn't shown on macOS when the AppLock feature is enabled.
2026-05-01 14:44:04 +01:00