Commit Graph

172 Commits

Author SHA1 Message Date
Matthew Hodgson eec2facab1 Add a Mentions room list filter (#5885)
* Add a Mentions room list filter

Adds a new filter chip to the room list that shows only rooms with
unread mentions, using the new mentions room list filter from the
Rust SDK (matrix-org/matrix-rust-sdk branch matthew/mentions-filter).

The SDK version needs bumping to a release that includes the new
filter kind before this can build against the released components.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Order the room list filters by expected usage

Move Favourites ahead of People and Rooms so the more commonly used
filters (Unreads, Mentions, Favourites) sit first in the chip row —
Rooms and Invites are used rarely enough that it's fine for them to
wrap off the side.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uk8aPxHn3BHCe52L226jdG

* update the SDK and use the appropriate rust filter types

* preview tests + app settings flag for mentions

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Mauro Romito <mauro.romito@element.io>
2026-09-01 18:08:00 +02:00
Stefan Ceriu 9dd9fd9176 Prefetch the next room list page before reaching the bottom
Growing the list only once the last row was already visible, on top of the half a
second visible range throttle, meant hitting and bouncing off the end of the list
while the next page loaded. Ask for the next page half a page early instead, so
the growth happens while the user is still scrolling towards the boundary.

The threshold is clamped so that it stays positive for accounts with fewer rooms
than half a page, where it would otherwise always match and leave the list unable
to shrink back to a single page.
2026-08-21 12:26:02 +03:00
Stefan Ceriu df6b7d0d21 Avoid re-applying identical room list filters
The home screen's filter observation fires on every view state change, so setFilter was repeatedly pushing the same filter down into the SDK. Cache the last applied filter and skip the SDK call when it hasn't changed.
2026-08-13 17:24:11 +03:00
Stefan Ceriu 66f68093f0 Remove the createSpan method entirely
As it's easier to live without it than to deal with the API redesign or or misuse
panics.
2026-08-10 13:23:17 +03:00
Stefan Ceriu bb0713b686 Fix tracing span panic when accessed from multiple threads
Brings it in sync with the TimelineItemProvider as it happens.
2026-08-10 13:23:17 +03:00
Mauro 9093631f8b Periphery cleanup (#5893) 2026-07-20 11:16:11 +02:00
Doug 3ef66cdd05 Rename UserProfileProxy to UserProfile. It's a pure struct and proxies nothing.
Also remove the redundant `userID` property given `id` already exists (for Identifiable conformance).
2026-07-02 13:09:34 +01:00
Stefan Ceriu 9a6f7595e5 Fix crashes during logout. 2026-06-19 12:58:28 +03:00
Mauro a520d94760 Swift 6 Migration (#5733)
* Enable Swift 6.2 with default main actor isolation for the app target

Turn on SWIFT_VERSION 6.2, SWIFT_APPROACHABLE_CONCURRENCY and SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor for the ElementX target, matching the NSE and Share Extension (which already use 6.2 without the main actor default).

# Conflicts:
#	ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

* Update the code generation templates for Swift 6

Emit nonisolated/@unchecked Sendable mocks and nonisolated string enums, and mark async mock methods @concurrent so they keep suspending like the real implementations (otherwise intermediate states are unobservable in tests). Includes the regenerated mocks and strings.

# Conflicts:
#	ElementX/Sources/Mocks/Generated/GeneratedMocks.swift

* Make the data layer and services nonisolated and Sendable

Annotate the value-type models, Rust SDK proxy wrappers, timeline item graph, settings, logging and NSE-shared types as nonisolated, and conform the service protocols to Sendable so their existentials can cross isolation boundaries. These types run off the main actor and no longer inherit the target's default main actor isolation.

* Adopt the new isolation across call sites, mocks and signatures

Update call sites, closure signatures and mock configuration helpers to match the nonisolated/Sendable data layer, including the main actor isolated mock inits and the @Sendable filter on recentlyVisitedRooms.

^ Conflicts:
^	ElementX/Sources/Services/SecureBackup/SecureBackupController.swift

* Remove redundant @MainActor annotations

With the app target defaulting to main actor isolation, the explicit @MainActor on view models, coordinators, views and their protocols is no longer required.

* Fix concurrency hotspots surfaced by the migration

Resolve the room summary main-thread deadlock by moving diff processing onto AsyncStreams, add the SDKListener.onMainActor FIFO bridge for SDK callbacks, hop KVO/timer/UIKit callbacks to the main actor via assumeIsolated, add isolated deinits, and apply the few justified nonisolated(unsafe) escapes for queue-confined Apple APIs.

* Fix the unit tests for Swift 6 concurrency

Hop the waitForConfirmation body onto the caller's actor (Swift Testing runs confirmation closures off-actor), and adjust the affected suites and async signatures.

* offload diffs on concurrent threads instead of main actor

* make room info protocols sendable

* use a task group for fetching data so that everything runs concurrently in the TextRoomTimelineView when getting the preview.

* use the generic onMainActor implementation, which already makes a stream and send the continuation on the main actor.

* small pr comments issues being addressed

* update enterprise

* Update StaticCode to 1.1.0 and specify the required Swift isolation.

* fix ElementCallServiceTests

* update enterprise

* re-generate mocks

* update enterprise

* enterprise new code conformed to swift 6

---------

Co-authored-by: Doug <douglase@element.io>
2026-06-18 17:55:31 +02:00
Doug fa67713726 Run SwiftFormat. 2026-05-27 17:11:42 +01:00
Valere Fedronic d49a6e5a5d Support for ongoing voice vs video call + joining (#5399) 2026-04-21 09:11:52 +00:00
Mauro dfee18e511 Rename Sign Out to Remove Device + Update SDK 26.03.18 (#5280)
* update the sdk

* updated preview tests

# Conflicts:
#	ElementX/Sources/Screens/Timeline/View/Style/TimelineItemSendInfoLabel.swift
#	ElementX/Sources/Screens/Timeline/View/TimelineItemViews/LiveLocationRoomTimelineView.swift

* update sdk to 26.03.18 + regenerated preview tests after sign out copy change

* updated UI tests

* pr suggestions
2026-03-18 17:34:45 +01:00
Stefan Ceriu e23685be70 Show the empty room list state when filtering by a space that has no children. 2026-02-09 15:35:18 +02:00
Stefan Ceriu 61763d9893 Bump the RustSDK to v26.02.03 (#5051)
Bump the RustSDK to v26.02.03
Fix breaking changes and add support for the new background task error reporting delegate and the new room invite latest event.
2026-02-06 12:08:44 +02:00
Stefan Ceriu 39be9c4908 Reduce the default number of room list items to 100
.. because really, that's more than enough.
2026-01-29 21:10:27 +02:00
Stefan Ceriu b4b9f6affa Space filters (#4977)
* 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
2026-01-21 20:19:39 +00:00
Stefan Ceriu 4bf3d5099c Bump the RustSDK to v25.12.17 2025-12-17 13:57:25 +02:00
Stefan Ceriu ffb42752de Bump the RustSDK to v25.12.07 2025-12-07 12:39:00 +02:00
Mauro Romito 656648fc7c drop iOS 17 and removed all #available and #unavaible checks for 17 and 18 2025-12-01 14:19:52 +01:00
Doug 62930968f8 Show the last message state in the room list. 2025-11-27 16:43:48 +00:00
Doug dc8f5ef5a9 Enable the latest event sorter. 2025-11-27 16:43:48 +00:00
Doug f2607affd2 Adopt the new latest event API. (#4779) 2025-11-25 11:52:48 +00:00
Mauro f7dd9cdcf8 Update copyright holding and dates (#4640)
* Update copyright holding and dates

* compound IDE Macros updated

* update copyright

* update copyrights done

* update templates and README
2025-10-21 14:34:56 +02:00
Doug 27f7085dc1 Even more space tweaks (#4588)
* Bring back the button to share a space on iOS 26.

* Remove the setting and disable the space tab on iOS 17.

(The tab bar is broken on iPadOS 17).
2025-10-07 14:34:10 +01:00
Doug c5fccdce5e Show space invites in the room list. (#4545) 2025-09-29 13:57:58 +01:00
Stefan Ceriu 29bddee91a Fix the latest event sorter's feature flag usage. 2025-09-24 07:45:06 +03:00
Doug c29123b99b Update the SDK and Element Call. (#4527)
* Update Element Call to RC3

* Update the SDK.

* Add feature flag for latest event sorter.
2025-09-19 18:06:48 +01:00
Doug 1be6aff281 Fix a bug where invites would be hidden when the Low Priority feature is enabled. (#4461) 2025-09-03 17:15:25 +01:00
Copilot 8c38c11146 Add a Low Priority room filter behind a feature flag. (#4394)
* Add Low Priority room filter with incompatibility rules

Co-authored-by: pixlwave <6060466+pixlwave@users.noreply.github.com>

* Add a feature flag and use the SDK filters.

* Fix filter tests and add RoomSummaryProvider tests for the default filters.

* Remove unnecessary comment.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: pixlwave <6060466+pixlwave@users.noreply.github.com>
Co-authored-by: Doug <douglase@element.io>
2025-08-20 11:56:44 +01:00
Mauro Romito 7d248187ef fix filtering of non spaces
Revert "fix filtering of non spaces"

This reverts commit a45e4726e1712e4c4d2b59157da06c3c95df1c5e.

x
2025-08-05 16:43:43 +02:00
Mauro d86d90c15a added a feature flag for share pos + updated the SDK (#4312) 2025-07-10 15:03:03 +02:00
Mauro Romito 155b47e849 tombstoned and upgraded rooms implementation
added tests

tombstoned room avatar
2025-06-06 10:49:29 +02:00
Stefan Ceriu 1f52546fc8 Adopt the new deduplicate room versions room list filter. 2025-05-30 16:40:15 +03:00
Stefan Ceriu f9b3281172 Bump the SDK to v25.05.26-2 and update the breaking changes following the RoomListItem removal 2025-05-26 18:11:24 +03:00
Stefan Ceriu 972084aaf7 Rename the TimelineProvider to TimelineItemProvider 2025-05-23 16:08:18 +03:00
Stefan Ceriu e1984ccdc0 Fix room list heroes label format
- change from `Alice, Bob and Charlie` to `Alice, Bob, Charlie and 42 others` (when applicable)
2025-05-12 19:40:14 +03:00
Stefan Ceriu 41b18cfd52 Remove now unnecessary RoomListSummary lastMessageFormattedTimestamp 2025-04-28 18:51:13 +03:00
Stefan Ceriu 899c33a5ad Remove delivered notifications for rooms that have meantime become fully read and have messages newer than what's delivered
- this is a best effort solution to cleanup outdated notifications when using multiple clients and reading them elsewhere
2025-04-28 18:51:13 +03:00
Doug 8c9773e4de Refactor SecureBackupControllerListener into SDKListener and use it everywhere. (#4030) 2025-04-16 08:36:57 +01:00
Mauro 319441d527 Use a static room summary provider to resolve room summaries through id and aliases (#3863)
* trying to debug why sometimes the value

is missing even if it appears in the room list

* static room provider implementation

* set the page size through the init

* removed reset filters on .cancel

since using the sop function is safer
2025-03-04 14:08:15 +01:00
Mauro a2242c63e2 Render Room and Message Pills (#3809)
* added a way to render the room and the message

pills, but is WIP

* permalinks now get converted into pills!

* fixed an issue where room address mentions

were not adding a URL properly but a string

* updated tests

* c

* Revert "c"

This reverts commit 5c80252fa23dba7e4d44f2a07fbf1e9500e37c82.

* updated tests

* more tests

* created APIs to get a specific RoomSummary

given the id or the alias

* small mention builder improvement

* pr suggestions
2025-02-25 13:46:01 +00:00
Doug d325adb4fc Hide the unread dot after previewing an invite. (#3800)
* Hide the unread dot when previewing an invite.

* Remove an invited room ID when accepting/rejecting.

* Remove the unread badge from knocked room cells.

* Update snapshots.

* Address PR comments.

Refactor KnockRequestType to JoinRequestType.
2025-02-18 12:22:13 +00:00
Doug bad4a8f9c8 Refactor Rust timeline identifiers into our own. (#3731)
* Refactor eventOrTransactionID.

* Refactor uniqueID.
2025-02-04 09:50:46 +00:00
manuroe 3950cac085 Dual licensing: AGPL + Element Commercial (#3657)
* New LICENSE-COMMERCIAL file

* Apply dual licenses: AGPL + Element Commercial to file headers

* Update README with dual licensing
2025-01-06 11:27:37 +01:00
Mauro 45a630dd85 Implement Knock Logic (#3573)
* WIP RequestToJoin struct

* implemented the logic to display the cells

* knock request banner accept flow

* mark all knocks as seen implemented

* details logic

* implemented accept, decline and ban in the list

* added a loader and modified the stacked view

of the banner

* pr suggestions

* updated naming and loading strings

* added the initial loading state

improved code and the tests

* updated a string that has changed

* code improvement

* tests for the room screen view model

* room details tests

and improved the knock requests tests for the room screen

* knock requests list tests

* added error state alerts with retry

* struct has been renamed on the sdk

so I renamed it also on the app side

* update SDK
2024-12-16 15:32:45 +01:00
Mauro 2511c98090 Knocked Preview implementation (#3426)
* JoinRoomScreen ui for knocking

* code improvement

* updated previews

* added knocked state with tests

* send knock request

* Apply suggestions from code review

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>

* pr comments

* update tests

* new API

* knock implementation and cancel knock

* update strings

* added a knocked cell in the home screen

* design update

* updated SDK

* simplified the invite case code

* pr comments

* updated previews

* added message as reason

* updated strings

* fixing tests

---------

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>
2024-10-24 17:23:06 +02:00
Stefan Ceriu 8f9f8cbed0 Adopt the changes introduced in matrix-org/matrix-rust-sdk/pull/4159 2024-10-23 12:15:05 +03:00
Stefan Ceriu 0651314e3e Adopt various rust side Timeline API additions (#3423)
* Adopt new reaction toggling API introduced in matrix-org/matrix-rust-sdk/pull/4127

* Adopt the changes introduced in matrix-org/matrix-rust-sdk/pull/4111: use the new `TimelineUniqueId` type instead of `String` for unique timeline identifiers.

* Bump the RustSDK to v1.0.58.

* Fix unit tests
2024-10-16 19:08:34 +03:00
Stefan Ceriu c79dbe85a0 Bump the RustSDK to v1.0.53: adopt latest record based timeline item APIs (#3356) 2024-10-01 18:50:11 +03:00
Stefan Ceriu 9b6470d1f3 Stop delaying subscriptions until after startup (#3294)
- reverts b43797f4bf
- relies on https://github.com/matrix-org/matrix-rust-sdk/pull/3981
2024-09-18 12:16:46 +02:00