Commit Graph

16248 Commits

Author SHA1 Message Date
Benoit Marty 3c212ae9a3 Move SessionGraphFactory back to the appnav module
The share feature does not need it anymore, so there is no reason to expose it
in the matrix api module.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 15:50:09 +02:00
Benoit Marty 72e3a7d92b Introduce ShareDataSender so that SharePresenter is not session scoped
Instead of creating a SharePresenter from the graph of another session, the
SharePresenter now gets the client of the selected session from the
MatrixClientProvider and uses an AppScope ShareDataSender to send the data.

To be able to send media from AppScope, MediaSenderRoomFactory is now bound in
AppScope and takes the MatrixClient as a parameter, and a new
MediaOptimizationConfigProviderFactory provides the media optimization config
of any session.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 15:50:08 +02:00
Benoit Marty ed2a553736 Fix flaky test. 2026-10-07 15:50:07 +02:00
ElementBot 15f7afc7c5 Update screenshots 2026-10-07 15:50:07 +02:00
Benoit Marty 792e0adde3 Let the user switch account from the room select screen when sharing
When several accounts are signed in, sharing into the app no longer goes through the account selection screen. The room select screen (Share mode) now displays the selected account and an account switch on top of the room list, with a design similar to the multi account section of the settings.

Selecting another account displays the rooms of this account in place, scrolled to the top, without recreating the screen. The content is then shared from the room select screen using the selected account, with the same progress and error dialogs as when sharing with the current account. The current account is switched only once the share has succeeded, then the room is opened if the content has been shared to a single room.

Implementation:
- RoomSelectNode is now in the AppScope and uses MatrixClientProvider to get the room list of the selected session.
- ShareNode gets the SharePresenter of the selected session from its session graph, using the new ShareBindings.
- SessionGraphFactory is moved to the matrix api module so that it can be used by features.

The account selection screen is still used for permalinks.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 15:50:06 +02:00
Benoit Marty dc031dd0e6 Move SessionData.toMatrixUser() extension to a common place, then use it across the codebase. 2026-10-07 15:50:05 +02:00
Benoit Marty def8f7f348 Merge pull request #7877 from element-hq/bugfix/bma/sessionDelegatePerClient
Fix the wrong account being signed out when the session of another account is revoked
2026-10-07 15:29:35 +02:00
Jorge Martin Espinosa a9d7e7e5ab Fix multi-line split inline code background drawing (#7875)
In the new timeline renderer, the line end position is sometimes incorrectly returned when you pass the offset of the last character in the line, returning `0.0f`.

This caused the shape to draw for the line to be reversed, where the start was `0.0f` and the end was the actual start.

When we detect a `0.0f` returned value for this,  just get the coordinates for the end of the line instead.
2026-10-07 15:10:19 +02:00
Benoit Marty 6e810f2ffd Use one RustClientSessionDelegate per client, so that an auth error only affects the session it belongs to
The RustMatrixClientFactory was using a single RustClientSessionDelegate for
all the clients. The delegate keeps a reference to the last bound client only,
and didReceiveAuthError does not tell which session is concerned. With several
accounts, when the session of one account was revoked, the session of the last
restored account was invalidated and its local data deleted instead, while the
revoked session kept on syncing with an invalid token. Also the isLoggingOut
flag was never reset, so any later auth error was ignored.

The clients which are not associated to a stored session (temporary clients
and clients used to perform a login) now use a NoOpClientSessionDelegate.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 14:26:47 +02:00
Jorge Martin Espinosa 3fe0e09e3c Add global search backfill worker (#7860)
* Add search backfill worker

This will run on background at most once an hour while the device has internet connectivity and the device is charging and start back-paginating through the user's rooms to make sure the search results are populated.

It'll run for the maximum time the default workers allow, 10 minutes.

* Create `RustMatrixClient.Factory` AssistedFactory to help with DI and add `SearchBackfillService`

* Start search backfill when entering the search screen, just once. This should help getting initial search results if none or few are found at first
2026-10-07 10:41:19 +00:00
ElementBot 9805422a8a Update Matrix Rust SDK to 26.10.05-nightly (#7844)
* Update Matrix Rust SDK to 26.10.01-nightly

* Add ivy repository for nightly SDK binding versions

* Fix API breaks

* Make sure we can't release a version with a `-nightly` SDK version

* Fix typo

Co-authored-by: Benoit Marty <benoitm@element.io>

* Update Matrix Rust SDK to 26.10.05-nightly

---------

Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
Co-authored-by: Benoit Marty <benoitm@element.io>
2026-10-07 11:13:36 +02:00
Jorge Martin Espinosa 3944cb3bfc Fix toggling 'show all activity in room list' not working (#7871)
Toggling this value had no effect because the feature was marked as finished so it wouldn't be displayed in the developer settings, which makes our code ignore any user-set value for it.

Instead, just create a `Feature` outside the `FeatureFlags` enum.
2026-10-07 10:09:25 +02:00
renovate[bot] 03ea0ecc27 Update dependency com.google.guava:guava to v33.7.2-android (#7873)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-10-07 08:47:00 +02:00
ganfra f10d0caad3 Merge pull request #7804 from element-hq/renovate/com.github.matrix-org-matrix-analytics-events-0.x
Update dependency com.github.matrix-org:matrix-analytics-events to v0.38.0
2026-10-06 18:35:36 +02:00
ganfra 7a6aef11ad Merge branch 'develop' into renovate/com.github.matrix-org-matrix-analytics-events-0.x 2026-10-06 17:34:34 +02:00
ganfra 47d9791a81 Merge pull request #7833 from element-hq/renovate/androidx.webkit-webkit-1.x
Update dependency androidx.webkit:webkit to v1.17.1
2026-10-06 17:30:32 +02:00
ganfra c7f5024729 Merge pull request #7868 from element-hq/renovate/gradle-actions-6.x
Update gradle/actions action to v6.4.0
2026-10-06 17:29:18 +02:00
ganfra 996e778222 Merge pull request #7845 from element-hq/renovate/maplibre.compose
Update maplibre.compose to v0.18.0
2026-10-06 16:23:45 +02:00
ganfra 604c5438c6 Adapt location feature to maplibre.compose 0.18.0 API 2026-10-06 15:45:40 +02:00
ganfra 2cda8a0315 Merge pull request #7851 from element-hq/sync-localazy
Sync Strings
2026-10-06 13:30:00 +02:00
Benoit Marty ac2b76de61 Merge pull request #7859 from element-hq/feature/bma/fixPackageNames2
Fix remaining package names and namespaces not matching their module
2026-10-06 13:13:39 +02:00
Benoit Marty 08a0885cfc Merge pull request #7821 from element-hq/bma/removeUnusedDependencies
Remove unused Gradle dependencies
2026-10-06 12:23:32 +02:00
Benoit Marty e86b20d3c5 Merge pull request #7861 from element-hq/feature/bma/maestroCleanup
End all the remaining sessions of the Maestro account after the tests
2026-10-06 12:20:08 +02:00
Benoit Marty 1833eefaf0 Move FakeCreateRoomEntryPoint to the features.createroom.test package
It was in `features.createroom.api`, while it is in the `createroom/test` module.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 12:10:54 +02:00
Benoit Marty 422dcb19b0 Move FakeAnnouncementService to the features.announcement.test package
It was in `features.rageshake.test.logs`, probably a copy-paste leftover.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 12:10:53 +02:00
Benoit Marty caac447672 Move FullScreenIntentPermissionsPresenterTest to the libraries.fullscreenintent.impl package
The test was in `libraries.fullscreenintent.test`, while the presenter is in `libraries.fullscreenintent.impl`.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 12:10:22 +02:00
Benoit Marty c64aa67e56 Move voicerecorder/impl test fakes next to the interfaces they fake
The fakes were in `libraries.voicerecorder.test`, the package of the `voicerecorder/test` module. Move them to `libraries.voicerecorder.impl.audio` and `libraries.voicerecorder.impl.file`.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 12:10:21 +02:00
Benoit Marty 845a193500 Move viewfolder/impl tests to the features.viewfolder.impl package
The tests and fakes were in `features.viewfolder.test.*`, which looks like a package of a test module, while they are in the `impl` module and test code from `features.viewfolder.impl.*`.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 12:10:20 +02:00
Benoit Marty bbaa83c8b8 Move PickerTypeTest to the libraries.mediapickers.api package
The test was in `libraries.mediapickers`, while `PickerType` is in
`libraries.mediapickers.api`.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 12:10:20 +02:00
Benoit Marty 0cf1d82281 Move StartChatNavigator to the features.startchat.impl package
It was the only file of the `startchat/impl` module in the
`features.startchat` package.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 12:10:19 +02:00
Benoit Marty abad21218d Move call/impl tests to the features.call.impl package
Some test sources were in `features.call`, `features.call.ui`,
`features.call.utils` and `features.call.notifications`, while the code
they test is in the corresponding `features.call.impl.*` packages.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 12:10:18 +02:00
Benoit Marty de6f820401 Fix usersearch/test namespace
The namespace was `libraries.usersearch`, without the `.test` suffix, while
the sources are in `libraries.usersearch.test`.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 12:10:17 +02:00
Benoit Marty a88a5cf698 Fix pushstore/impl namespace
The namespace was `libraries.push.pushstore.impl`, while the sources are in
`libraries.pushstore.impl`. Also update the `adb uninstall` hint of the
instrumentation test accordingly.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 12:10:16 +02:00
Benoit Marty fe8b3764e5 Move matrixmedia sources to the libraries.matrixmedia.* packages
The matrixmedia modules were using the `libraries.matrix.ui.media` package
(shared with the matrixui module) and `libraries.matrix.ui.media.*`
namespaces. Use `libraries.matrixmedia.api`, `libraries.matrixmedia.impl`
and `libraries.matrixmedia.test` instead, matching the module paths.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 12:10:14 +02:00
Benoit Marty 9cb68844da Merge pull request #7865 from element-hq/feature/bma/multiAccountBottomSheetAnnouncement
Announce multi-account support
2026-10-06 12:09:38 +02:00
Benoit Marty 6be1242ef0 Merge pull request #7867 from bardiharborow/feature/full-screen-intent-banner-refresh
Hide full screen intent banner as soon as the permission is granted
2026-10-06 11:46:15 +02:00
Benoit Marty 902631362e Merge pull request #7858 from element-hq/feature/bma/fixPackageNames
Fix wrong package names and namespaces in several modules
2026-10-06 10:58:25 +02:00
Benoit Marty b1f4178100 Replace AppMigration11 by a dismissal when entering the login flow
AppMigration11 was run once, in the first release containing it, whatever
the state of the MultiAccount feature flag. Users installing the app
while the feature flag was disabled were considered as new users and
would never see the announcement once the feature flag got enabled.

The multi-account announcement is now pending by default (NeverShown),
and is marked as shown when the user enters the login flow while the
feature is enabled, either for the first time or to add another account.
Users who were already logged in before the feature became available
will see the announcement.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 10:30:21 +02:00
Benoit Marty ddcd01a2bf Follow naming convention 2026-10-06 09:46:28 +02:00
Benoit Marty 72f4c4f897 Fix multi-account announcement never being displayed 2026-10-06 09:41:53 +02:00
ElementBot 86e72ac11e Update screenshots 2026-10-06 07:38:09 +00:00
Benoit Marty d91c22d1b2 Move new states at the end of the sequence 2026-10-06 09:10:47 +02:00
Benoit Marty 4d183ffeaf Add consign when AI adds new states for screenshot. 2026-10-06 09:05:28 +02:00
Benoit Marty 4e25ecd34c Dismiss the multi-account announcement when the user has several accounts
If the announcement was queued at upgrade while the user had a single
account, and the user then added another account without seeing it, the
announcement stayed pending and was shown later if the user removed an
account. Mark it as dismissed as soon as several accounts are detected.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 09:05:28 +02:00
Benoit Marty c654bf0947 Announce multi-account support
Show a one-time bottom sheet on the home screen to announce that several
accounts can now be added (element-hq/element-meta#3349).

- Add `Announcement.MultiAccount`, which is never shown by default.
- AppMigration11 queues the announcement on application upgrade only,
  and marks it as shown if the user already has several accounts.
- HomePresenter shows the bottom sheet only when the announcement is
  pending, the MultiAccount feature flag is enabled and the user has a
  single account.
- The "Add account" button hides the sheet, marks the announcement as
  dismissed and starts the add account flow through the new
  `HomeEntryPoint.Callback.navigateToAddAccount()`.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 09:05:28 +02:00
Benoit Marty 2de0d78ced Import multi-account announcement strings from Localazy
Add the `screen.multi_account_announcement.*` keys to the home module
Localazy configuration and import the latest strings.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 09:05:27 +02:00
renovate[bot] 7be369a5da Update gradle/actions action to v6.4.0 2026-10-06 06:37:04 +00:00
renovate[bot] f1723efa32 Update dependency com.google.testparameterinjector:test-parameter-injector to v1.24 (#7863)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-10-06 08:33:44 +02:00
Bardi Harborow 90806a1c85 Hide full screen intent banner as soon as the permission is granted
The permission is granted from the system settings, outside of the app,
so nothing triggered a recomposition of FullScreenIntentPermissionsPresenter
when the user came back. The "Enhance your call experience" banner kept
being displayed until something else caused a recomposition.

Check the permission again with LifecycleResumeEffect, as done in
BatteryOptimizationPresenter, and add a test for this case.
2026-10-06 09:40:56 +11:00
Jorge Martin Espinosa b76548f9a2 Dismiss notifications for rooms fully read in other devices (#7846)
* Dismiss notifications for rooms fully read in other devices
2026-10-05 17:56:16 +02:00