* Change the Join Call button to 1.) show a Video Call Solid icon, 2.) change the label from "Join call" to "Join", and 3.) change the background color to primary/rest.
* Add a clarifying comment and snapshots.
* improved defer fullfillment
* applied also for async streams
* fix xcodeproject
* better documentation
* restict deferFulfillment only for Publisher which can never fail
* 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.
* migrated a lot of unit tests to Swift Testing and added a new implementation for deferred fulfillment
more tests migration
Cleaned the code manually to establish some good patterns
more code improvements
some more code improvements
removed empty tests
update project
* more pr suggestions and cleanups
* removed the TestSetup pattern
* fixing claude not reusing tests
* pr suggestion + added indent rule to swiftformat so that we can prevent AIs to change that
* 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
* Use the old state machine configuration style.
* Test starting the space settings flow in UI tests.
* Test starting the create space room flow in UI tests.
* 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.
* feat: Display an icon in the room header for rooms with shared history
* fix: Apply suggestions from code review
- Simplifies `isRoomHistoryShared` expressions using type inferrence.
- Adds failure messages to unit test.
Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>
* fix: Remove extension method in favour of field on configuration.
* fix: Distinguish between `shared` and `worldReadable` icons.
* refactor: Use `RoomHistorySharingState` enum with extension methods
---------
Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>
* 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.
* Rename PaginationState.timelineEndReached to PaginationState.endReached.
* Rename PaginationState to TimelinePaginationState.
Also renames PaginationStatus to PaginationState so that a TimelinePaginationState consists of the forward and backward pagination states.
* Add the empty state to SpaceScreen.
Only has 1 of the 2 buttons for now.
* Add support for SpaceFilters on the SpaceServiceProxy level and a screen that renders them
* Add aliases to a couple of space room mocks
* Update translations and related snapshots
* Add a feature flag for space filters
* Add a new room summary provider filter that takes a list of room identifiers next to the normal state filters
This will take the SpaceFilter's descendants and combine it with the normal filters to reduce the rooms shown
* Add a new space filter button to the home screen and link it to the SpaceFiltersScreen and the actual RoomSummaryProvider room list filters
* Bump the RustSDK to v26.01.20-2 for SpaceFilter support.
* Add a cancellation button to the space filters screen
* Make the filter presentation mode liquidy, move the sheet to within the home screen.
* Address PR comments
* Expand the space flow UI tests to include the add rooms screen.
Also fixes some failures in these tests due to the room/space title now being a button.
* Expand the space flow UI tests to include the space members screen.
* Reset AppSettings before running preview tests.
* create space flow implementation
# Conflicts:
# ElementX/Sources/FlowCoordinators/SpacesTabFlowCoordinator.swift
* create space flow fully implemented and working
* updated tests and updated the create room camera button UI
* updated the avatar button in the create room screen, and added power level overrides for spaces
* update power level content overrides to behave just as EW, and removed ask to join when creating a space regardless of the FF
* updated UI tests snapshots
* invite for a public space should always be forced to 50
* pr suggestions + PL override fix
* fix a missed code change
* Rename SpaceListScreen to SpacesScreen
To avoid confusion with the SpaceRoomListProxy.
* Rename SpaceExplorerFlowCoordinator to SpacesTabFlowCoordinator and ChatsFlowCoordinator to ChatsTabFlowCoordinator.
* Update proxies ready for adding rooms to a space.
- ClientProxy.recentlyVisitedRooms to take a filter and to return room proxies.
- Expose SpaceServiceProxy.addChildToSpace.
* Implement the SpaceAddRoomsScreen.
* Fix the designs of the selected carousels.
Add more snapshot tests for inviting users.
* Fix for screen using wrong avatar size.
* Added an FF to create spaces + empty spaces list state
* removed learn more button and improved spacing
* updated toolbar for chats and spaces to match ios 26 designs
* 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.
* Simplify QR errors even more and use the correct error state for deviceAlreadySignedIn.
* Remove the pre-defined padding on TitleAndIcon and use it in the QRCodeLoginScreen too.
* Update FullscreenDialog to allow different horizontal padding in each section.
* Move BigIcon into Compound.
* Replace the old server selection image asset with the \.host icon.
* Add a new TitleAndIcon component to Compound.
* Add the ability to override TitleAndIcon's padding.
* Tidy-up Rust to Swift mapping.
* Refactor out a dedicated QRCodeErrorView.
* Use the new QRCodeErrorView for most error state snapshots.
* Simplify QRCodeErrorView structure.
Also updates the background to match the designs.
* Fix a small compile error in the unit tests.
* Add a LinkNewDeviceService that exposes the SDK's grant QR code login methods.
* Add a flow coordinator for linking a new device.
Changes the presentation too.
* Remove `eraseToStream` now that `any AsyncSequence` is available to us.
* Remove the now unnecessary backport of Mutex.
* Silence a couple more deprecation warnings.