Commit Graph

4419 Commits

Author SHA1 Message Date
Stefan Ceriu 7097ceb910 Fix voice message recording crashes caused by an isolation assertion failure 2026-07-01 10:35:41 +03:00
Element CI 6aac3bc46e Prepare next release 2026-06-30 06:58:23 -07:00
Mauro Romito bed5e0c288 update sdk 26.06.30 2026-06-30 15:15:36 +02:00
Michael ff9c260674 Limit conversations a message can be forwarded to (#5793)
* Limit conversations a message can be forwarded to

* Review fixups

* fix: remove the unused constant argument

---------

Co-authored-by: Mauro Romito <mauro.romito@element.io>
2026-06-30 14:01:49 +02:00
Mauro 2d486ece33 Use iOS 26 Observation for Unit and Preview tests. (#5797)
* use observation in unit and preview tests instead of the async stream

* use a parsing approach that is independent of the sourcery annotation

* Fix observation deferred fulfillments not receiving the initial value

Observation's observe only emits transitions, not the value present at subscription time. Drop the leading initial value from the affected transitionValues sequences and assert it directly with #expect instead.

* improved docs
2026-06-30 14:01:08 +02:00
Stefan Ceriu c26677753a Filter out SearchScreen empty container errors 2026-06-30 11:18:45 +03:00
Stefan Ceriu 2d274a5e1f Log underlying accessibility test problems 2026-06-30 11:18:45 +03:00
Stefan Ceriu bcee62f198 Fix new swiftformat errors 2026-06-30 11:18:45 +03:00
renovate[bot] 17ae3bcce7 Update dependency swiftlang/swift-syntax to v603 (#5803)
* Update dependency swiftlang/swift-syntax to v603

* Stop hiding Package.resolved file contents in GH reviews.

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Doug <douglase@element.io>
2026-06-30 08:50:37 +01:00
Element CI 785193c2d8 Bump the calendar version ready for the next release 2026-06-30 08:04:54 +03:00
Stefan Ceriu 2777075655 Handle the non-deprecated INStartCallIntent for calls from Recents
The call-from-Recents handling was wired entirely to the deprecated
INStartVideoCallIntent (the activity-type registration and the cast), which
also meant the app never handled the modern INStartCallIntent that superseded
it in iOS 13. Switch both to INStartCallIntent and derive isVoiceCall from its
callCapability. Clears the deprecation warning.
2026-06-29 18:10:30 +03:00
Stefan Ceriu 89de0f3f2b Use PostHogConfig(projectToken:host:) instead of the deprecated init
PostHog deprecated `init(apiKey:host:)` in favour of `init(projectToken:host:)`.
The project token is the same value as the old API key, so this is a label-only
swap with no behaviour change.
2026-06-29 18:10:30 +03:00
Stefan Ceriu 122a0052ae Drop the unnecessary @Sendable from the composer attribute enumeration
`NSMutableAttributedString.enumerateAttribute(_:in:options:using:)` runs its
closure synchronously on the calling thread and its `using:` parameter isn't
`@Sendable`. The explicit `@Sendable` on the closure literals was therefore
unnecessary and was the only thing triggering the "capture of non-Sendable
NSMutableAttributedString" and "mutation of captured var in concurrently-
executing code" warnings. Removing it clears all six with no behaviour change.
2026-06-29 18:10:30 +03:00
Stefan Ceriu 95319d13b7 Make the zip and file attaching bug report service steps concurrent 2026-06-29 18:01:57 +03:00
Doug 566d8edeab Fix a bug where scanning a universal link as a QR code would open the app without handling the link. (#5804) 2026-06-29 15:11:15 +01:00
Stefan Ceriu ad8d70ebe0 Fix MediaLoader EXC_BAD_ACCESS ongoingRequests crashes 2026-06-29 16:06:54 +03:00
ElementRobot bfd3756671 Translations update (#5802)
Co-authored-by: Element CI <ci@element.io>
2026-06-29 11:12:13 +01:00
renovate[bot] c901238835 Update zizmorcore/zizmor-action action to v0.5.7 (#5801)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-29 11:11:45 +01:00
Doug 59ba4a238e Fix macros on CI.
The explicit SDK usage means macros fail to compile for macOS. The SDK will be inferred by the destination platform.
Note: We no longer use a plugin so I've remove that argument too.
2026-06-29 10:34:32 +01:00
Doug 66de86b5d2 Merge the UserDefaultsStorage helpers into UserDefaultsProtocol. 2026-06-29 10:34:32 +01:00
Doug f05fd41c36 Replace the UserPreference property wrapper with the new macro version. 2026-06-29 10:34:32 +01:00
Doug c53e0c1466 Add a new BuildExtensions package that contains a UserPreference macro.
The build extensions package can be used for both macros and plugins.
2026-06-29 10:34:32 +01:00
Doug f3da459d16 Ensure that the current user is the device owner before linking a new device. (#5773) 2026-06-26 16:24:18 +01:00
renovate[bot] 3f3aa79a48 Update actions/checkout action to v7 (#5791)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-26 14:49:05 +01:00
Stefan Ceriu 2f6a295486 Fix search screen keyboard navigation 2026-06-25 13:11:28 +03:00
Stefan Ceriu 0bd32d24fd Switch to a custom HomeserverReachability instead of different publishers 2026-06-24 20:49:49 +03:00
Stefan Ceriu 3ccaa04554 Don't show the server unreachable banner while the client is suspended
homeserverReachabilityPublisher now reports unreachable while suspended so media loading parks instead of failing against a closed store. The reachability banner was keyed off the same publisher, so pausing the client would surface a spurious "Server unreachable" message.

Expose a separate homeserverConnectivityPublisher derived from the sync service state alone (it stays reachable while suspended) and key the banner off that, keeping the suspend-aware publisher for gating work that needs an open store.
2026-06-24 20:49:49 +03:00
Stefan Ceriu 05922f1bc7 Fix media loading failures when retrying with a closed store
`homeserverReachabilityPublisher` was driven directly by the sync service state so stopping sync on pause still reported .reachable. MediaProvider.loadImageRetryingOnReconnection would then retry against a closed store, fail, and bail out permanently because it treated the reachable state as a non-recoverable error.

Make reachability a function of both the desired service state and the latest sync state, computed in one place: store the sync state in the listener and recompute reachability from it, reporting unreachable whenever the client isn't meant to be running. Recompute on suspend and on resume.
2026-06-24 20:49:49 +03:00
Doug 605ccc6be7 Fix a crash on macOS when using QuickLook. (#5790)
Introduced by the default @MainActor isolation and macOS being weird with threads.
2026-06-24 18:34:45 +01:00
Copilot 3c5c1c62e3 Update AGENTS.md for Swift 6.2 migration (#5766)
* Update AGENTS.md concurrency section for Swift 6.2 migration

* Add a caveman update line to AGENTS.md.

---------

Co-authored-by: Doug <douglase@element.io>
2026-06-24 16:57:20 +01:00
Mauro Romito a6384500c9 integration tests now use swift 6.2 2026-06-24 17:32:15 +02:00
Mauro Romito 1725f0d97b migrated a11y tests to swift 6.2 2026-06-24 17:31:58 +02:00
Mauro Romito 31a9f2c961 migrating ui tests using swift 6.2 2026-06-24 17:31:40 +02:00
Stefan Ceriu 057b8728d3 Stop selecting search results automatically when dismissing the keyboard 2026-06-24 16:58:40 +03:00
Mauro 10b48d37ad Preview tests migration to swift 6.2 (#5786)
preview tests now use swift 6.2
2026-06-24 14:24:46 +02:00
Michael 80f747985f Remove custom tones menu on macOS (#5776)
* Remove custom tones menu on macos

* Moved property to allotted location
2026-06-24 12:24:20 +01:00
Mauro c93d6e3265 Unit Tests migration to swift 6.2 (#5781) 2026-06-24 12:39:35 +02:00
Stefan Ceriu c5cf9e2fac Fix queue assertion crashes on accessibility testing 2026-06-24 12:31:20 +03:00
Stefan Ceriu 69dd66b432 Fix poll form UI test snapshots after allowing multiple votes. 2026-06-24 11:12:44 +03:00
Stefan Ceriu b9476f65a3 Bump the RustSDK to 26.06.23 2026-06-23 18:59:13 +03:00
Mauro Romito 24af5804d6 use … in place of ... 2026-06-23 15:38:41 +02:00
Mauro Romito 2dc4a24333 update preview tests 2026-06-23 15:38:41 +02:00
Mauro Romito d60b41a05f Add a programmatic label to the join room by address field
The field relied on its placeholder for a label, which VoiceOver only reads
while empty. Set a persistent accessibility label so it's always announced.

Addresses #5256.
2026-06-23 15:38:41 +02:00
Mauro Romito ed58120fd3 Associate the room address field helper text and error with the field
The address field already had an accessibility label, but the section's
helper text and validation error were only shown in a separate footer and
weren't conveyed to VoiceOver when focusing the field. Compose them into the
field's accessibility hint.

Addresses #5258.
2026-06-23 13:06:36 +02:00
Mauro Romito 87d18fe8e3 migrated the max answers poll feature strings to localazy 2026-06-23 13:05:48 +02:00
ElementRobot a9252e400e Bump the calendar version ready for the next release (#5777)
Co-authored-by: Element CI <ci@element.io>
2026-06-23 09:24:41 +01:00
Stefan Ceriu d40d775717 Don't crash when scrolling to the oldest item before the data is applied
scrollToOldestItem targeted (timelineItemsIDs.count - 1, section: 1) even
when the table's data source hadn't applied that section yet, raising an
out-of-bounds NSRangeException. Scroll against the table's actual section
and row counts instead.
2026-06-22 16:54:52 +03:00
Stefan Ceriu 0a3944deaa Don't crash when recording starts with an invalid input format
AudioRecorder.startRecording crashed AVAudioEngine
(IsFormatSampleRateAndChannelCountValid) when the input node reported an
invalid format - e.g. a zero sample rate when no input route is
available. Bail out with an error before connecting nodes or installing
the tap.
2026-06-22 16:54:52 +03:00
Stefan Ceriu 1e7a9a5ae5 Don't report an empty media selection as a successful pick
Both PhotoLibraryPicker and DocumentPicker reported failures via .error
but still emitted .selectedMediaAtURLs([]) when every selected item
failed to load or export (e.g. an iCloud photo that isn't downloaded, or
a document that fails the security-scoped temp copy) - an empty "success"
that consumers had to defend against. Skip that emission in both, and
report .error for PhotoLibraryPicker's previously silent
missing-content-type case so the user gets feedback.
2026-06-22 16:54:52 +03:00
Stefan Ceriu 101fc7573b Don't crash when the GIF data provider is invoked off the main thread
LoadableImageContent.data(handler:) used MainActor.assumeIsolated to read
the loader's content, which crashes (libdispatch precondition) when
Kingfisher invokes the provider off the main thread, and fatalError'd
when the content wasn't GIF data. Hop onto the main actor and return a
failure instead. The handler is @Sendable per Kingfisher's protocol.
2026-06-22 16:54:52 +03:00