* Added a chevron to collapsed call buttons in the DM
This makes the context menu more intuitive and easy to find. Inspired by the collapsed state of call buttons in Whatsapp that I saw recently
* Shortening video/voice call button strings
Currently the text is unnecessarily long, I have reduced to button text
# Conflicts:
# ElementX/Sources/Generated/Strings+Untranslated.swift
* Move translations to localazy
---------
Co-authored-by: Stefan Ceriu <stefan.ceriu@gmail.com>
The QLPreviewItem used the media's file name as its title, which VoiceOver
read as cryptic alt text. Provide a descriptive "Photo preview" / "Video
preview" title based on the media type instead.
Addresses #5240, #5241.
* Add a developer flag for the search tab
Introduces a globalSearchEnabled user preference (off by default) with a toggle in Developer Options, used to gate the new search experience.
* Support search role tabs in the tab coordinator
Migrates the NavigationTabCoordinator to SwiftUI's value-based Tab API and adds an isSearch option so a tab can adopt the iOS 26 .search role, which detaches it into the trailing search button in the tab bar.
* Moves room search to a new screen
Adds a new screen that filters the alternate room summary provider as you type, shows an empty state, and lists matching rooms with their matrix identifier. Supports hardware keyboard selection (arrow keys to move through results, return to open) by reaching into the system search field.
* Present search in a dedicated tab
Adds the search tab to the chats flow on iOS 26 when the flag is enabled, rendered as the detached .search role button. The Cmd+K shortcut now selects this tab, and the home screen's inline search is hidden while the tab is available.
* Remove the old global search screen
The dedicated search tab replaces the Cmd+K floating window, so the GlobalSearchScreen, its window plumbing in the WindowManager, and its presentation in the chats flow are all removed.
* 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>
* 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
* 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>
* 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
If the user attempts to invite someone (to a room or creating a DM) whose identity is not cached, we prompt them to make sure this was their intention.
* feat: Start voice call from DM
* rename voiceCall:bool to isVoiceCall
* review: Fix a typo
* review: use one displayCall(bool) instead of 2 actions
* review: Add a new specific preview for DM calls
* combine startCall and startVoiceCall in single enum with isVoiceCall
* review: add isVoiceCall to presentCallScreen action
* review: Use proper a11y for voice vs video
* add voice/video options to UserProfile Screen
* fixup: move config params to the roomInfo object
* review: Revert changes on preview as the toolbar cannot be snapshot'd
* review: Extract call controls in specific file
* oups: Add voice call option in room details screen
* Update room details screenshots
* Update user profile screenshots
* Update room member details screenshots
* fixup: remove dead code
* Settings > Change Done button to Close
Do it!
* Change ordering of menu item sections
Swap manage app section with manage account section.
* Use a primaryAction placement for the close button.
* Generate the preview snapshots.
* Merge the Manage account and Manage devices actions.
---------
Co-authored-by: Doug <douglase@element.io>
* refactored the static location screen to the location sharing screen
# Conflicts:
# UnitTests/Sources/LocationSharingScreenViewModelTests.swift
# Conflicts:
# ElementX.xcodeproj/project.pbxproj
* implemented a custom pin with an overlayable view
* implemented the render of the user when the location is sender instead of the pin type
* removed description and body they are not used at all.
* reimplemented single button for sharing this or user location + implemented an experimental way to update annotations
* removed unnecessary @Suite description
* implemented a way to display the alert on top of the sheet and added a spinner to the center user location button
* fixed alerts strings
* fixed a failing test
* improved preview tests