Commit Graph

6762 Commits

Author SHA1 Message Date
ganfra 7ef93b51e4 Use the Element Creations license header on the new selection files 2026-10-05 20:47:57 +02:00
ganfra 5ab9860e89 Merge branch 'develop' into feature/fga/timeline-multi-forward 2026-10-05 17:54:00 +02:00
Benoit Marty 56f8925ff3 Update Chat icon and text font for Empty room list.
Closes #7739
2026-10-05 16:03:55 +02:00
Benoit Marty b9ed090400 Use only ClipboardHelper to copy to the clipboard, and do not render feedback on Android 13+
Since Android 13, the system displays its own confirmation when content
is copied to the clipboard, so the application does not render its own
Toast or Snackbar anymore on those versions.

Context.copyToClipboard, CopyToClipboardUseCase and the direct
ClipboardManager usage in EventDebugInfoView are removed.
ClipboardHelper.copyPlainText(text, isSensitive, onSuccessOnOldDevice)
is now the only entry point, and AndroidClipboardHelper is the only
class using ClipboardManager.

Copy actions from the views are moved to their Presenter through new
events, or to the Node when there is no Presenter. A ToastHelper is
introduced so that Toasts are kept where they were used before.
Snackbars are kept where they were already used.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-05 11:40:08 +02:00
Benoit Marty 38e74ff43d Merge PR #7849: Mark the recovery key as sensitive when copying it to the clipboard 2026-10-05 10:44:39 +02:00
Bardi Harborow 48d6b5cadf Improve the reset identity password field (#7850)
Use the password keyboard type, mark the field as a password for
autofill, and submit the reset with the IME "Done" action, matching
the login password field.
2026-10-05 09:38:32 +02:00
Bardi Harborow f59f5da64c Mark the recovery key as sensitive when copying it to the clipboard
The recovery key was copied without EXTRA_IS_SENSITIVE, so Android 13+
showed it in the clipboard preview and keyboards could store it in
their clipboard history.

Add an isSensitive option to CopyToClipboardUseCase and
Context.copyToClipboard, and set it when copying the recovery key.
2026-10-04 20:26:48 +11:00
ganfra e99861a5c1 Keep selection mode active until explicitly exited 2026-10-02 20:41:04 +02:00
Benoit Marty a6d9d27c68 Merge pull request #7827 from element-hq/feature/bma/multiAccountIncomingUserVerification
Multi account incoming user verification
2026-10-02 18:56:58 +02:00
Jorge Martin Espinosa 7fd8e5b721 Fix unread indicator for messages (#7841)
* The expected logic for unread messages is displaying just a dot

The count might not be accurate, so we keep the dot for now.

* Fix tests
2026-10-02 16:36:22 +02:00
Benoit Marty 4602e1f32d Show the account receiving the incoming user verification request 2026-10-02 08:11:57 +02:00
Benoit Marty 5ed880d539 Merge pull request #7823 from element-hq/feature/bma/multiAccountIncomingVerification
Multi account incoming device verification
2026-10-02 08:10:19 +02:00
Jorge Martin Espinosa 2dd0a47eb4 Allow displaying only unread notifications (#7803)
* Allow displaying only unread notifications

Add `FeatureFlags.ShowAllActivityInRoomList` (enabled by default, to match the current behavior) that, when disabled, will display the unread messages of a room instead of unread notifications if no unread notifications are found

* Restore UI changes to the badges, `RoomSummaryRow` and `HorizontalFloatingToolbar`

* Fix `NavigationBarIcon`: use `BadgeBox` component.

* Adjust padding in `RoomSummaryRow` to 6.dp

* Fix other indicators not displaying a dot anymore

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2026-10-01 19:46:01 +02:00
Jorge Martin Espinosa 6cde0706be Add remove item and clear history buttons to search history (#7816)
* Add remove and clear history buttons to search

* Rename `SearchHistoryResultItem` to `SearchHistoryListItem` and `MessagesSearchResultItem` to `MessageSearchListItem`

Also, add some docs.

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2026-10-01 18:17:18 +02:00
ganfra 3847922895 Merge pull request #7826 from element-hq/feature/fga/user-status-update
Update user status UI
2026-10-01 17:33:33 +02:00
ganfra 2d30dc6cf0 Merge branch 'develop' into feature/fga/timeline-multi-forward 2026-10-01 15:23:42 +02:00
ganfra 2fb82c5e81 Make the whole avatar row clickable, with ripple on the avatar 2026-10-01 15:21:25 +02:00
ganfra ff8bb78f12 Fix home screen top bar consuming its own scroll events 2026-09-30 18:02:19 +02:00
ganfra e50e6e599e Display the user status emoji beside the avatar 2026-09-30 17:58:03 +02:00
Benoit Marty e6750dd301 Show the account receiving the device verification request
Replace SessionDetailsView by AccountInfoCard with the DeviceVerification mode
on the incoming device verification screen, so that the account concerned by
the request is clearly indicated, with its avatar and Matrix ID.

The current user is built from the SessionStore, including the locally stored
avatar thumbnail, used as a fallback when the avatar cannot be loaded, for
instance for an account which is not the current one.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 17:01:14 +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
ganfra ae409aa8d2 Add preview for messages view in selection mode 2026-09-30 11:49:26 +02:00
ganfra bb64983832 Move TimelineItemSelectionData to model package 2026-09-30 11:48:31 +02:00
Benoit Marty d70316ea41 Merge branch 'develop' into renovate/androidx.compose.material3-material3-1.x 2026-09-30 08:02:03 +02:00
ganfra 4563a30795 Merge branch 'develop' into feature/fga/timeline-multi-forward 2026-09-29 20:57:37 +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
ganfra 193a5b1dbc Merge branch 'develop' into feature/fga/timeline-multi-forward 2026-09-29 17:15:40 +02:00