Commit graph

1368 commits

Author SHA1 Message Date
Jorge Martin Espinosa
5b5224eb58
When a background SDK task fails, react in the client (#6166)
- For initialization issues or errors, we just print and report them.
- For panics (unrecoverable errors) we also crash the app.
2026-02-10 12:28:24 +01:00
Benoit Marty
0311fc9f01 QRCode login: treat not found error as expired error.
Reorder some when cases.
2026-02-09 15:14:18 +01:00
renovate[bot]
4cb3b16914
Update dependency org.matrix.rustcomponents:sdk-android to v26.2.6 (#6144)
* Update dependency org.matrix.rustcomponents:sdk-android to v26.2.5

* Fix breaking API changes:
- Add temporary imlementation for `RustClientSessionDelegate.onBackgroundTaskErrorReport`, logging unrecoverable errors in background tasks of the SDK.
- Change `TimelineEventTypeFilter` to `TimelineEventFilter`.
- Support new `LatestEventValue.RemoteInvite`.

* Update the Rust SDK to `26.2.6`

* Fix API changes: `TimelineFocus.PinnedEvents` no longer takes any arguments

* Fix test fixtures: `NotificationItem` has a `rawEvent` field now

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
2026-02-06 12:40:03 +00:00
ganfra
6327641469
Merge pull request #6136 from element-hq/feature/fga/space_room_list_filter
Add Space Filters feature for Room List
2026-02-05 16:14:16 +01:00
Jorge Martin Espinosa
9ee40c4fca
When creating a DM, set room history visibility to invited (#6138) 2026-02-04 14:54:59 +00:00
Jorge Martin Espinosa
bd6bad963e
Remove JoinRule.Private from the codebase (#6129)
It shouldn't be in use, since it was never properly defined:

- The `Private` values coming from the SDK are considered to be `Invite` instead.
- Remove any existing `JoinRule.Private` usages in our code.
2026-02-03 19:27:22 +01:00
ganfra
212a8e3aa3 Add room list filter combining based on space selection 2026-02-02 21:46:33 +01:00
ganfra
a60d07eb2a Spaces : expose new SpaceServiceFilter 2026-02-02 21:02:55 +01:00
ganfra
bc9a46a821 Spaces : some cleanup on SpaceService 2026-02-02 21:02:54 +01:00
Benoit Marty
f8699fcf20
Merge pull request #6119 from element-hq/feature/bma/handleHttp429
Ensure http 429 are retried 3 times before failing.
2026-02-02 12:42:57 +01:00
ganfra
440eacc892
Merge pull request #6117 from element-hq/feature/fga/room_list_filter_rust
Refactor room list filtering to use Rust SDK
2026-02-02 10:58:21 +01:00
Benoit Marty
53e48462a4
Update comment 2026-02-02 10:45:39 +01:00
Benoit Marty
b87c847855 Ensure http 429 are retried 3 times before failing. 2026-01-30 15:43:00 +01:00
ganfra
babaa7351f Add tests and clean code after RoomList Filter rework 2026-01-30 15:33:51 +01:00
Jorge Martin Espinosa
95b6356d0b
Add special flow for leaving a space as the last owner (#6112)
* When the user is in a v12 room, use different UI to select the last owner when leaving

- Add `LeaveSpaceRoom.areCreatorsPrivileged` to detect when this is happening.
- Import new strings.
- Build the new UI.
- Attach it to a change member roles screen navigation.

* Don't display the `isLastOwner` UI if the user is the only joined one in the room

* Rename `LeaveSpaceState.isLastOwner` to `.needsOwnerChange`. This way, it's easier to understand the difference with the passed `LeaveSpaceRoom.isLastOwner` value

* Add a test for the new check of user not being the last joined member

* Fix paddings in `LeaveSpaceView`

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2026-01-30 09:10:00 +00:00
ganfra
5c3fc13052 Refactor room list filtering to use Rust SDK 2026-01-29 22:08:12 +01:00
ganfra
a85c566341 Clean up unused imports and improve code documentation 2026-01-27 18:43:38 +01:00
ganfra
e896c7604d Iterate on manage space rooms, but not happy with the reset method. 2026-01-27 18:43:38 +01:00
ganfra
5f52b38de6 Add reset method to SpaceRoomList 2026-01-27 18:43:38 +01:00
renovate[bot]
bcd707d307
Update dependency org.matrix.rustcomponents:sdk-android to v26.1.27 (#6096)
* Update dependency org.matrix.rustcomponents:sdk-android to v26.1.27

* Fix breaking API changes: `LeaveSpaceRoom.isLastAdmin` is now `LeaveSpaceRoom.isLastOwner`.

* Rename `isLastAdmin` to `isLastOwner` in our codebase too.

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
2026-01-27 15:02:55 +00:00
Jorge Martin Espinosa
62768359cb
Create a new room in a space (#6061)
* Add `SpaceService.editableSpaces` and `SpaceService.addChildToSpace`

* Add `parentSpace` to `CreateRoomConfig`

* Allow setting a parent space to a room in `ConfigureRoomPresenter`, make sure the room is added to the parent space when creating it

* `ConfigureRoomPresenter`: Load the list of possible spaces a room can be added to

* Refactor `RoomVisibilityState` to internally use `JoinRuleItem`

This gets rid of `RoomAccess` and `RoomAccessItem`, and it will allow us to map the join rule items in a cleaner way to both join rules and the UI

* Implement the UI changes:

- Display the parent space.
- Allow selecting a new one.
- Import needed strings.

* Fix existing tests

* Add `@Immutable` annotation to `SpaceRoom`, since it was detected as unstable.

Maybe because of `RoomType`?

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2026-01-26 18:23:02 +01:00
Jorge Martin Espinosa
57e0b74482
Use MediaPreviewValue.Private to check if media should be displayed in notifications (#6038)
* Use `MediaPreviewValue.Private` to check if images should be displayed in notifications

Also added `NotificationData.roomJoinRule` so we can use it to check if the room is public or not

* Add logging message for cases when we should have an image uri it turns out we don't
2026-01-23 09:01:52 +00:00
ganfra
4d73f9fb43 Add addChildToSpace method to SpaceService 2026-01-21 17:33:30 +01:00
ganfra
e6d8b07538 sdk : allow passing coroutineScope to RoomList 2026-01-21 16:48:22 +01:00
ganfra
dd68db3fc1
Merge pull request #6045 from element-hq/feature/fga/invite_people_suggestions
Add suggestions section to InvitePeopleView
2026-01-20 13:45:42 +01:00
ganfra
660265e8d8 Add suggestions section to InvitePeopleView 2026-01-20 10:09:49 +01:00
Jorge Martin Espinosa
eb2254f895
Tweak the power levels when creating a space (#6012)
* Tweak the power levels when creating a space

* Also tweak the `invite` power levels for public access rooms
2026-01-19 10:54:33 +01:00
Jorge Martin Espinosa
2e353848f9
The relatedTo field in RoomSendQueueUpdate.MediaUpload is a transaction id (#6002)
It was being incorrectly mapped to an event id.
2026-01-19 10:39:48 +01:00
Richard van der Hoff
ad622b0ac2
Display a badge for messages decrypted using shared keys (#6023)
The EXA side of element-hq/element-meta#2877: if the keys for a message have been forwarded by another user, indicate that in the UI via the text shown when tapping the event shield.
2026-01-16 17:24:18 +00:00
Jorge Martin Espinosa
a464e29570
Create AppMigration09 to remove the cached well-known config from the SDK (#6026)
This value was most likely was incorrectly cached due to a previous issue in the SDK
2026-01-16 16:03:49 +01:00
ganfra
bb082191e4 Merge branch 'develop' into feature/fga/space_manage_rooms 2026-01-14 17:54:43 +01:00
ganfra
df3fe6d6d6 Fix wrong param order for removeChildFromSpace 2026-01-14 15:27:06 +01:00
Jorge Martin Espinosa
3ef5e76e99
When a duplicate room list entry is found, report it and remove it (#6006)
* When a duplicate room list entry is found, report it and remove it

* Fix tests and fixtures

* Simplify how the updates are described in the Sentry reports
2026-01-14 10:56:45 +00:00
ganfra
b7ff884838 Add manage mode to space view for removing child rooms, wip. 2026-01-13 22:08:48 +01:00
Jorge Martin Espinosa
6d1ed5967b
Create spaces (#5982)
* Allow creating a space with `CreateRoomParameters`

* Add 'Create space' menu item in the spaces home screen. Also, imports new strings related to spaces.

* Link the 'Create space' button with the screen to create the space

* Unify room access and visibility for `ConfigureRoom`, use the updated design

* Fix `EditRoomDetails` avatar size (68dp)

* Replace `EditableAvatarView` and `UnsavedAvatar` copmonents with `AvatarPickerView`

* `AvatarDataFetcherFactory`: Make sure we use a fallback image fetcher when the URL is not an MXC one (a local one, i.e.). This removes the previous need for a separate `UnsavedAvatarView`

* Use `AvatarPickerView` in all the screens where `EditableAvatarView` was used

* Improve naming and previews

* Update strings, remove unused ones for `RoomAccessItem`

* Make `isSpace` part of the `CreateRoomConfig`

* Ensure the content fits in the screenshots for `AvatarPickerSizesPreview`

* Add `AvatarDataFetcherFactoryTest`

* Add new feature flag for creating spaces

* Fix ripple being too large for the `Pick` state

* Tweak margins and section titles a bit

* Add preview for `HomeTopBar` with the spaces case

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2026-01-13 14:35:49 +01:00
ganfra
1614bd7a20
Merge pull request #5979 from element-hq/feature/fga/space_members_access
Change Room’s Access to/from Space members
2026-01-12 10:48:44 +01:00
Jorge Martin Espinosa
1f86a4d2c4
Remove previously used id filtering from RoomSyncSubscriber (#5985)
This is done in the SDK, doing it in the client was a source of issues.
2026-01-09 17:19:35 +01:00
ganfra
0668135d0e Merge branch 'develop' into feature/fga/space_members_access 2026-01-08 13:46:02 +01:00
renovate[bot]
ff11d6e9c1
fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v26 (#5977)
* fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v26

* Fix API breaks: `ShieldStateCode` is now `TimelineEventShieldStateCode`

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
2026-01-07 17:29:18 +00:00
Jorge Martin Espinosa
06c4b9488b
Adjust metrics to the new specifications (#5937)
* Add `AnalyticsTransactions` with a set of `TransactionDefinition` items matching those in the user story

* Use that for `AnalyticsLongRunningTransactions`, make sure we send the right fields (name, operation, description)

* Add `AnalyticsSendMessageWatcher` to track how long it takes for an event to be sent and for us to get a call back for that from sync

* Add `Noop` implementation for enterprise
2026-01-05 16:23:26 +01:00
Jorge Martin Espinosa
8955fb18ae
Use VerificationState.VERIFIED as soon as it's available (#5973)
This can't be a false positive like `VerificationState.UNKNOWN` or `VerificationState.UNVERIFIED`, so it makes sense to return it as fast as possible instead of waiting for the whole encryption layer to be fully loaded.
2026-01-05 15:06:00 +00:00
Benoit Marty
b26b435e27 Ensure factorize follow the same code convention 2025-12-29 09:40:24 +01:00
ganfra
c398c62cc7 space service : expose methods from sdk 2025-12-23 20:49:41 +01:00
Jorge Martín
dbf32a1bfe RustSpaceService.joinedSpaces() now points to the FFI method SpaceService.topLevelJoinedSpaces() 2025-12-22 11:19:37 +01:00
Jorge Martín
0440f760ed Instantiate the now suspending innerClient.spaceService() RustMatrixClient with runBlocking for now 2025-12-22 11:19:37 +01:00
Jorge Martín
a8ffe46d99 Transform MessageEventType and StateEventType into sealed interfaces to handle the Custom variant, also add missing variants 2025-12-22 11:19:37 +01:00
Jorge Martín
0ed40c562d Replace some usages of TimelineEventType in EventType with TimelineEventContent 2025-12-22 11:19:37 +01:00
Jorge Martin Espinosa
4f1fd33b47
Fix unverified account after account creation (#5914)
* Fix unverified account after account creation:

When we create an account either using OIDC or by importing a login and password one, we need to wait until the verification state is known (either verified or unverified).

The problem is the verification service will return incorrect values until the E2EE tasks are initialized in the SDK, even if we add the state listeners after doing so.

So what we can do is initialize the E2EE setup, discard any invalid verification state received while it's not initialized, and take only those received after it's initialized.

* Actually restore the `Client` in `RustMatrixAuthenticationService.importCreatedSession` so we don't need to use `clear` and have the navigation restore the client later:

This standarizes the way the login/registration flow works, always restoring/reusing the existing client instance
2025-12-19 12:55:34 +01:00
Jorge Martin Espinosa
105bab1758
Add threadInfo field to message like timeline events (#5930)
* Add `threadInfo` field to message like timeline events:
- Polls
- Stickers
- UTDs

* Add missing cases for `EventTimeline.threadInfo()`
2025-12-19 09:43:40 +00:00
Benoit Marty
3ea10c2c62
Merge pull request #5909 from element-hq/feature/bma/qrCodeLogin
Link new device using QrCode - First version
2025-12-18 16:08:21 +01:00