Commit Graph

6730 Commits

Author SHA1 Message Date
ganfra ff8bb78f12 Fix home screen top bar consuming its own scroll events 2026-09-30 18:02:19 +02:00
Benoit Marty 7502ab16c5 Merge pull request #7824 from element-hq/feature/bma/iconPrimaryColor
Make sure the icon header use primary color
2026-09-30 16:47:49 +02:00
Jenna Vassar 0f29e8e875 Add an extension for room details sections (#7781)
* Add an extension for room details sections

Provide a no-op rendering hook for build-specific room details sections and shared room audio labels. Keep the default room details behavior unchanged.

* Cover the default room details extension

Verify that the no-op extension renders no content and leaves surrounding UI unchanged through recomposition. Cover its constructor and both generated render paths.

* Refine the room details extension and link the enterprise picker

Expose ColumnScope to contributed room details sections and use room-details string keys. Pin the enterprise submodule to the reviewed picker implementation so integrated builds include it behind the default-off flag.

* Make the room details extension a functional interface

Declare the single composable rendering contract as a fun interface to satisfy the Sonar check while preserving its named dependency injection binding.

* Update localazy strings for the audio section in room details

* Bump enterprise commit

---------

Co-authored-by: Jorge Martín <jorgem@element.io>
2026-09-30 14:18:13 +00:00
Benoit Marty 1ac63ebec5 Icon in BigIcon have a iconPrimary color according to Figma. 2026-09-30 15:44:12 +02:00
Benoit Marty 485f71c824 Merge pull request #7822 from element-hq/feature/bma/signedOutScreen
Update signed out screen
2026-09-30 15:41:21 +02:00
Jorge Martin Espinosa 8c0d23771c Enable automatic back pagination and unread indicators by default (#7800)
* Enable automatic back pagination and unread indicators by default

We want to test these in the nightlies.
2026-09-30 15:09:32 +02:00
Benoit Marty 9459e3673e Remove unused parameter 2026-09-30 14:58:32 +02:00
Benoit Marty 48b3eb7a0d Make the content of SignedOutView scrollable for small screens 2026-09-30 14:08:48 +02:00
Benoit Marty 6a7f0ea536 Update UI and wording of the SignedOut screen 2026-09-30 12:17:14 +02:00
Benoit Marty 84a6586551 Merge pull request #7337 from element-hq/renovate/androidx.compose.material3-material3-1.x
Update dependency androidx.compose.material3:material3 to v1.5.0-alpha29
2026-09-30 12:14:14 +02:00
Jorge Martin Espinosa 55b0273a4b Fix rustls failing the certification revocation checks on app start (#7817)
* Fix rustls failing the certification revocation checks on app start
* Also add dispatchers.io to `isElementProEnforced`
2026-09-30 10:10:59 +00:00
Benoit Marty f453cdf2ac Signed out screen: add account info.
Display the account which has been signed out, using the `AccountInfoCard`. The data comes
from the session database, including the stored avatar thumbnail, since there is no Matrix
client available to load the avatar. `SignedOutState.signedOutSession` is now a non-null
`MatrixUser`, defaulting to a user with only the session id.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 11:59:39 +02:00
Benoit Marty a2b2c2360a Merge pull request #7788 from element-hq/feature/bma/removeAccount
Improve the sign out screen
2026-09-30 11:53:19 +02:00
Benoit Marty d70316ea41 Merge branch 'develop' into renovate/androidx.compose.material3-material3-1.x 2026-09-30 08:02:03 +02:00
Benoit Marty f52242ebdd Fix PinKeypadTest with Compose 1.13
material3 1.5.0-alpha29 brings Compose UI/foundation 1.13.0-alpha01, where clickable
nodes cannot be focused in touch mode anymore when requested from the test. Switch to
the keyboard input mode first, like a hardware keyboard would do, so that the key gets
the focus and receives the key events.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 20:25:58 +02:00
Benoit Marty 4c4389b29a Remove unnecessary Material3 experimental opt-ins
Many Material3 APIs are now stable, so the `ExperimentalMaterial3Api` and `ExperimentalMaterial3ExpressiveApi`
opt-ins are not required anymore at those places. Also remove the propagating `@ExperimentalMaterial3Api`
marker from `TopAppBarScrollBehaviorLayout`, which does not use experimental API anymore.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 18:45:30 +02:00
Valere 01bc7dd070 Keep the app content composed when a native call starts
The overlay now draws with no controller too, so starting a call no longer resets the content's state, such as the composer draft.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 18:44:49 +02:00
Valere a2be854cf9 fix: linter LocalContext should not be cast to Activity 2026-09-29 18:44:49 +02:00
Valere e786e2d22f Draw the native call in the app
A wrapper around the logged-in content rather than an overlay, because a minimized call takes a strip of height above it while a maximized one covers it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-29 18:44:49 +02:00
Valere e35b522a9a Answer a ringing call through the call entry point
The notification's Answer action named ElementCallActivity outright, so answering always opened the WebView whatever FeatureFlags.NativeCall was set to.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-29 18:44:49 +02:00
Valere 75605f1932 Make a call with no UI actually run, and cover it with tests
Found on a device: with no UI to answer the microphone permission or unset the maximized snapshot, the call parks forever and blanks the screen through the proximity wake lock.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-29 18:44:49 +02:00
Valere 40cb43ae87 Build the native call stack on demand for each session
Keyed by session id in app scope rather than session-scoped, because answering a call notification after a cold start has no session graph to reach a session-scoped stack from.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-29 18:44:49 +02:00
Valere 43a1364671 Give the native call component its view of Matrix
The factory lives in libraries/matrix/impl because that is the only module compiled against the Rust SDK, and is app-scoped because a call is started for whichever account it belongs to rather than the one on screen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-29 18:44:49 +02:00
Valere 66d6d365d7 Route calls through an entry point the native stack can implement
Adds the seam a native MatrixRTC call stack plugs into, with nothing behind it
yet, so that the stack itself lands as a self-contained change.

`FeatureFlags.NativeCall` is off by default and unfinished.
`features/callnative/api` declares `NativeCallEntryPoint`, and
`features/callnative/impl` provides a default that logs and does nothing:
turning the flag on today gets no call and a line in the log. That is the
honest outcome, where falling back to the WebView would make the flag look
broken rather than unimplemented.

`DefaultElementCallEntryPoint` forks on the flag. The read is asynchronous
because the flag is storage-backed, and caching it in an eagerly started
StateFlow would race a call placed just after app start onto the default
value.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-29 18:44:49 +02:00
Valere 0059c72a32 Expose the write sides of the current-call and ringing state
`CurrentCallService` and `ActiveCallManager` are read by the whole app but
written only by whoever is actually running a call. Writing has so far been
reachable only from inside `features/call/impl`, because that is where both
implementations live.

Adds `CurrentCallTracker` and `RingingCallTracker` to `features/call/api`, so
that a call implementation in another module can report the call it is running
and answer a ring, without depending on `features/call/impl`.

No behaviour change: both interfaces are implemented by the existing classes,
and their methods are aliases of methods that already existed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-29 18:44:49 +02:00
Jorge Martín 6c9d501009 Merge branch 'hotfix/26.09.4' into develop 2026-09-29 18:31:14 +02:00
Benoit Marty 1664e0e15d Reorder states: new state at the end 2026-09-29 17:32:24 +02:00
Jorge Martín a30730462b Revert "Fix unread notification count in room list (#7749)"
This reverts commit b80a24e0aa.
2026-09-29 16:31:01 +02:00
Benoit Marty 83c3b646c2 Make the content of LogoutView scrollable 2026-09-29 15:57:08 +02:00
Benoit Marty 26ea6be44c Logout: do not double render the progress state and disable the cancel button during the process. 2026-09-29 15:57:07 +02:00
Benoit Marty e1ec0b3c55 Logout screen: add account info. 2026-09-29 15:57:06 +02:00
Benoit Marty 3de59bbd88 Logout screen: add Cancel button and update icon. 2026-09-29 15:57:05 +02:00
Benoit Marty d4c1bb61bb Always open the sign out screen from the settings
Remove the direct logout dialog from the settings and from the home screen, where it was never triggered.
The sign out screen will later display the account information (#7765).
The direct logout is still used in the FTUE session verification screen, so remove only the now unused `canDoDirectSignOut` field.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 15:57:04 +02:00
ganfra 397c19ecfa Merge branch 'develop' into renovate/maplibre.compose 2026-09-28 17:42:16 +02:00
Benoit Marty 74b9c85c7c Merge pull request #7760 from element-hq/feature/bma/removeHaze
Remove Haze.
2026-09-28 15:07:15 +02:00
Benoit Marty 00bfb97b92 Merge pull request #7784 from yncyrydybyl/fix/link-new-device-navigation
Fix "Link new device" opening the "Add an account" screen
2026-09-28 14:59:52 +02:00
Benoit Marty 6d717ff745 Merge pull request #7793 from element-hq/feature/bma/storeUserAvatar
Display the avatar of other accounts even if it cannot be loaded from the current account
2026-09-28 12:43:03 +02:00
Benoit Marty c2a2e16f46 Use the stored avatar thumbnail as a fallback for other accounts
Add an optional thumbnail to `MatrixUser` and `AvatarData`, filled from the session
database for the other accounts in the room list header, the settings and the account
selection screen. `ImageAvatar` renders this thumbnail instead of the initial letter while
the avatar is loading or when it fails to load, for instance when the homeserver of the
current account is not federated with the one of the other account.

Fixes #5571

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 11:38:45 +02:00
ElementBot c8c242476b Sync Strings (#7787)
* Sync Strings from Localazy

* Update screenshots

---------

Co-authored-by: bmarty <3940906+bmarty@users.noreply.github.com>
2026-09-28 11:32:40 +02:00
Benoit Marty db23023eda Store the user avatar thumbnail in the session database
Add a `userAvatarData` column to the session database, containing the base64 encoded
thumbnail of the user avatar. It will allow rendering the avatar of an account without
having to use its Matrix client, for instance on the signed out screen, or for other
accounts when the homeservers are not federated.

The thumbnail is downloaded when the user profile is retrieved or updated, and only if
the avatar URL has changed. The profile is now also persisted when received from the
own profile subscription.

Part of #5571

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 11:12:47 +02:00
Yan Minagawa 83a01eb880 Send "Link new device" to the link-new-device flow again
PreferencesFlowNode routed navigateToLinkNewDevice() to
callback.navigateToAddAccount(), so tapping "Link new device" under
Account settings opened the "Add an account" screen instead — the
opposite direction, signing an extra account into this device rather
than authorising a new one.

The correct destination was already implemented and simply unreachable:
LoggedInFlowNode handles navigateToLinkNewDevice() by pushing
NavTarget.LinkNewDevice. Call that instead.

Regression from 9b2577f1dd ("Split settings: app settings / account
settings"); the previous code called callback.navigateToLinkNewDevice().
It went unnoticed because FeatureFlags.QrCodeLogin defaults to false,
which hides the entry point on default builds.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017y1etzTCPzowrNcPyRBdjm
2026-09-26 16:48:46 +02:00
Jorge Martin Espinosa 306e1cb950 Upgrade SDK bindings to v26.09.26 (#7780)
* Bump SDK bindings to `v26.09.26`

This version contains a fix for issues in `v26.09.25` related to certificate verification.

* Fix breaking API changes in the latest bindings

* Unify `FeatureFlags.RoomThreadList` with `FeatureFlags.Threads`
2026-09-25 16:08:19 +02:00
Benoit Marty 7e5866a2b7 Merge branch 'develop' into bma/settingsIterationStep2Bis 2026-09-25 09:36:00 +02:00
Jorge Martin Espinosa b80a24e0aa Fix unread notification count in room list (#7749)
* Display the unread notification count only when needed

* Adjust `CounterAtom` and `UnreadIndicatorAtom` to use the official M3's `Badge` component, with a few tweaks to ensure single digit items are always displayed as a circle

* +99 is now 99+

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2026-09-24 18:01:12 +02:00
Benoit Marty 30e518d0a5 Remove Haze, we are not using it now that we have the floating toolbar. 2026-09-24 10:51:12 +02:00
Benoit Marty 01681e9fff Move the "Blocked users" item to the Moderation and safety screen.
The item is removed from the account section of the root settings screen and
added at the bottom of the Moderation and safety screen. As before, it is only
shown when at least one user is blocked, with the number of blocked users.

ModerationAndSafetyPresenter now computes the number of blocked users, and
ModerationAndSafetyNode exposes a Callback to navigate to the blocked users
screen. Tests are moved accordingly.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 16:17:26 +02:00
Benoit Marty c612c80b1d Merge account settings into the root preference view. 2026-09-23 16:03:15 +02:00
Benoit Marty 3cafaaec94 Update remove message confirmation dialog.
Closes #7753
2026-09-23 14:25:37 +02:00
Benoit Marty 60000bfa58 Merge pull request #7692 from element-hq/bma/fix7689
Fix blank screen at launch when the homeserver expires the sliding sync session
2026-09-23 12:32:00 +02:00
Benoit Marty 2669ac4eae Change to "produceState" 2026-09-23 11:55:03 +02:00