* 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
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.
* 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>
* 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
* 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
* Live Location Sharing Banner
# Conflicts:
# ElementX.xcodeproj/project.pbxproj
* updated the top banner modifier and the top banner views
# Conflicts:
# ElementX/Resources/Localizations/en-US.lproj/Localizable.strings
# ElementX/Resources/Localizations/en.lproj/Localizable.strings
* improved the stopping function from the timeline item
* stop live location sharing before starting a new one.
* added some tests for LiveLocationManager
* pr suggestions
* Update Send button bg color
Change the gradient bg to accent/rest.
* Tidy-up ComposerToolbar to match iOS 18 Figma.
Also simplifies the tests a bit.
* Add a .glassEffect to Compound's SendButton.
* Add a border to TimelineReplyView.
Also use the same sizes in both the message bubbles and the composer.
* Change icon size and container in message bubbles
- Container size = 36x36px
- Icon size = 24x24px
* Update icon of reply contents to be 24x24
* Update the VoiceMessageButton to match the designs.
* Adopt Liquid Glass in the ComposerToolbar.
* Generate and fix snapshots.
---------
Co-authored-by: Doug <douglase@element.io>
* 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
* 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
* Implement voice message variable playback speed
* Move playback speed string to Untranslated
https://github.com/element-hq/element-x-ios/pull/5121#discussion_r2822631371
* Address review feedback for voice message playback speed
- Persist voice message playback speed as an enum in AppSettings instead of storing an index.
- Update playback speed cycling to derive from enum allCases and safely fall back to `.default` if the stored value cannot be resolved.
- Apply runtime speed updates in AudioPlayer only when the player is in the `.playing` state.
- Keep MediaPlayerProviderTests formatting/indentation style intact while retaining mock playback speed setup.
- Regenerate preview snapshots for:
- PlaybackSpeedButton
- VoiceMessageRoomPlaybackView
- VoiceMessageRoomTimelineView
* Move VoiceMessagePlaybackSpeed outside AppSettings, remove speedRatio
* Stabilize PlaybackSpeedButton width
* Sync voice-message speed label
- Add voiceMessagePlaybackSpeed to TimelineViewState and bind it from appSettings.$voiceMessagePlaybackSpeed.
- Pass that timeline-level speed into VoiceMessageRoomPlaybackView and use it for PlaybackSpeedButton, so labels update consistently across items.
- Use @EnvironmentObject in VoiceMessageRoomTimelineContent so the view re-renders when timeline context state changes.
- In WaveformInteractionModifier, add .allowsHitTesting(showCursor) to the cursor interaction view so hidden pre-playback cursor hit area does not steal taps from the speed button.
* compound is now using 6.2 and main actor isolation + some tweaks to make it build tests and EX
* better handling of the nonisolated context for CompoundUIColors
* improving docs
* fix comment
* remove unused Sendable conformance
* replace NavigationStack with ElementNavigationStack to allow the content to be rendered without a NavigationStack in a11y tests
* fix a11y tests
* update xcodeproject
* swiftformat fix
* use iOS 26.1 for CI
* use a wrapper to solve the issue for a11y tests
* ElementNavigationStack only uses the trick in DEBUG mode, and added a swiftlint rule to prevent the usage of NavigationStack
* Tidy-up FormattedBodyText.
* Switch TimelineBubbleLayout.Priority from .layoutPriority to .layoutValue.
* Rename TimelineBubbleLayout.Priority to TimelineBubbleLayout.Size
* Fix inline code being rendered as blocks.
And make blocks non-greedy as well as only scrolling when needed.
* Rename the bubble layout priorities.
* Add an InlineCode attribute so that the builder also strips links from these too.
* Split up the snapshot tests into individual cases.
This should make it much easier to see *what* has changed when regenerating.
* 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.
* Fix the search text field's tint colour.
* Don't allow optional content IDs in the placeholder avatar.
* Use SwiftUI to resolve the hex values in the Inspector app.
This fixes incorrect values being shown in dark/high-contrast modes.
* Fix a layout bug with the colour swatch in the Inspector app on iPhone.
* Switch to the chats tab when selecting a room with the global search screen.
* Run the latest SwiftFormat.