Commit Graph

5087 Commits

Author SHA1 Message Date
Gianluca Iavicoli
5f0d026225 Fix voice recording being interrupted by notifications sounds (#6438) 2026-03-24 13:53:42 +01:00
Benoit Marty
b30a770f9b Merge pull request #6453 from element-hq/feature/bma/increaseIconSize
Increase icon size of audio and files in the timeline
2026-03-24 11:59:17 +01:00
Jorge Martin Espinosa
a512f7ff21 Restore custom user certificate provider (#6451)
It was removed because we temporarily lost this functionality in the Rust SDK
2026-03-24 10:58:08 +00:00
renovate[bot]
e8a2f97cf5 fix(deps): update dependency androidx.compose.material3:material3 to v1.5.0-alpha15 (#6306)
* fix(deps): update dependency androidx.compose.material3:material3 to v1.5.0-alpha15

* Fix deprecations

* Add bottom sheet workaround

* Fix new lint issues

* Fix and ignore broken tests

* Update screenshots

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
Co-authored-by: ElementBot <android@element.io>
2026-03-24 11:24:07 +01:00
renovate[bot]
5c1e40b724 fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v26.03.23 (#6444)
* fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v26.03.23

* Fix `RoomInfo` test fixture

* Add `activeCallIntentConsensus` to `RoomInfo`

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
2026-03-24 11:22:32 +01:00
Benoit Marty
8dab306acd Fix reply content icon for attachment.
See https://www.figma.com/design/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?node-id=2019-6286
2026-03-24 11:01:09 +01:00
Benoit Marty
a90761875a Update Mic icon in the composer bar. Closes #6443 2026-03-24 10:00:08 +01:00
ElementBot
b5df58fcec Sync Strings (#6435)
* Sync Strings from Localazy

* Sync strings.

---------

Co-authored-by: bmarty <3940906+bmarty@users.noreply.github.com>
Co-authored-by: Benoit Marty <benoit@matrix.org>
2026-03-23 18:05:26 +00:00
Jorge Martin Espinosa
a2d9f241dd Fix long messages not being clickable (#6356)
* Fix long messages not being clickable

As @bmarty found out, `clip = true` causes the click event to be ignored in some cases. Since we have the shape we want to draw and we're using a custom `onDraw` modifier anyway to cut-out part of the path, we can just draw everything using the modifier and avoid using `clip = true`.

This seems to fix the issue.

* Fix clipping of images or other items that cover the bubble

* Fix borders being displayed for contents

* Extract the layer drawing logic into `drawInLayer` to simplify the inlined code. Remove redundant code, those changes are now in the `drawInLayer` block

* Workaround for lint issue: it seems like detekt can't properly detect usages in content receivers

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2026-03-23 18:11:55 +01:00
Jorge Martin Espinosa
13bbd24df1 Fix wakelock not stopping early when notifications are disabled (#6424)
If notifications for a device are disabled when there is no connection with the HS, the push registration will still exist, so the device can still receive push notifications.

In that cases, we were running into an issue where the wakelock for push notifications was started immediately after receiving a push but was never stopped and it ran for 3 minutes until its timeout, keeping the device awake for no reason.

This patch changes `DefaultPushHandler` so if we don't need the wakelock it returns `false` and we can stop the wakelock early.
2026-03-23 18:07:25 +01:00
Jorge Martin Espinosa
78c9076281 Fix TransactionTooLargeExceptions caused by Appyx (#6410)
* Fix `TransactionTooLargeExceptions` caused by Appyx

After a long debugging session, we discovered the code Appyx uses to clear the saved state of nodes that have been removed is not working because of a race condition, causing this saved state to grow indefinitely.

To fix it, we need to wait until the node has been disposed, which will call `SaveableStateHolder.removeState` once, removing the associated `SaveableStateRegistry`, and *then* call `removeState` again when we detect the node has been removed from the navigation graph.

Since these classes and APIs are private in Appyx, we had to copy and modify and use these copies.

* Remove ktlint checks on `SafeChildrenTransitionScope.kt`

* Don't count the new code for coverage
2026-03-23 18:07:00 +01:00
bxdxnn
a261156c7c Fix media seeking flicker (#6434) 2026-03-23 16:03:50 +01:00
Jorge Martin Espinosa
9074692189 Fix crash when starting a DM (#6419)
`AnchoredDraggable.requireOffset` was called before it was populated when displaying  `CreateDmConfirmationBottomSheet`, because the keyboard and the bottom sheet were causing conflicting animations related to the insets.

Hiding the keyboard before displaying the bottom sheet seems to fix the issue, and `skipPartiallyExpanded` results in a better UX (and also worked around the issue by itself).
2026-03-23 16:00:04 +01:00
Gianluca Iavicoli
a30aed6a21 Fix keyboard not auto-opening when editing a message (#6412)
* fix: auto-open keyboard when editing a message

* fix: show keyboard on focused editor view instead of root view
2026-03-23 10:54:59 +01:00
renovate[bot]
643d1e957d fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v26.03.19 (#6411)
* fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v26.03.18

* Fix API breaks

* Add compatibility with rustls (#6367)

A new `rustls-platform-verifier-android` library has to be added to the project, it'll be called from Rust to get access to the certificates on Android.

Originally, this was supposed to be added as a local maven repo pointing to the rust crate that publishes the AAR, but that's just plain terrible (more details [here](https://github.com/rustls/rustls-platform-verifier#android).

Instead, what we can do is use a script that uses `cargo-download` to download the latest crate or a specified version, unzip it and add the `aar` file to the `:libraries:matrix:impl` module.

* Try fixing Sonar with local AAR files

* Remove `UserCertificatesProvider`: this is no longer needed after integrating rustls

* Added some docs for rustls and its `platform-verifier` library

* Upgrade SDK to `26.03.19`: this version contains a workaround that allows the app to use the same TLS verifier as before, fixing the Let's Encrypt issues we saw with some homeservers (like element.io)

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
2026-03-20 16:20:37 +01:00
Benoit Marty
e5f50a901c Map ClientBuildException.WellKnownDeserializationException to AuthenticationException.InvalidServerName, so that the error displayed to the user is more explicit. Closes #6368 2026-03-17 18:05:23 +01:00
Jorge Martin Espinosa
96e2f882a2 Add a foreground service with a wakelock for fetching push notifications (#6321)
* Create `PushHandlingWakeLock` to start a foreground service:

When receiving a push and scheduling the notification fetching, several problems can happen:

1. Some async operation is waiting for a timeout and it takes way longer than that to finish (i.e. timeout of 10s but it took 30s to advance).
2. The same, but when starting new coroutines. I've seen the time between scheduling a coroutine and it running sometimes take up to 1 minute.
3. Notification fetching can be scheduled immediately, but it can take a while to actually run because the OS understands the app is now in Doze.

Having a wakelock that runs as soon as the push handling starts fixes these: it continues the previous wakelock held by either Firebase or the UnifiedPush distributor.

* Acquire the wakelock as soon as we received the pushes in both receivers

* Also release the wakelock ahead of time if possible
2026-03-17 14:24:26 +01:00
Benoit Marty
993250f1ea Merge pull request #6352 from element-hq/sync-localazy
Sync Strings - iterate on wording about crypto identity
2026-03-16 16:06:54 +01:00
Jorge Martin Espinosa
949a12f3d2 Improve Kover setup by using only convention plugins (#6213)
* Improve Kover setup using convention plugins.
* Add a new JVM library convention plugin with Kover support
2026-03-16 14:41:07 +00:00
Benoit Marty
0fbed400eb Sync string again. 2026-03-16 14:54:06 +01:00
renovate[bot]
7cdf1a264b fix(deps): update activity to v1.13.0 (#6327)
* fix(deps): update activity to v1.13.0

* Remove usages of deprecated  `bundleOf`

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
2026-03-16 08:50:43 +00:00
bmarty
3a0e01b63d Sync Strings from Localazy 2026-03-16 00:42:32 +00:00
Benoit Marty
953af00fa2 It seems that SqlDelight v2.3.1 does not like unnecessary file 2026-03-13 18:53:08 +01:00
Benoit Marty
b6321209ed Iterate on the send button colors. Fixes #6312 2026-03-10 17:10:15 +01:00
Andy Balaam
612b56f067 Call the new recoverAndFixBackup method to fix key storage if it's broken 2026-03-10 14:49:34 +00:00
Jorge Martin Espinosa
f77098ed47 Add network constraints for fetching notifications with WorkManager (#6305)
* Add `isNetworkBlocked` and `isInAirGappedEnvironment` to `NetworkMonitor`.

* Improve the DI of `SyncPendingNotificationsRequestBuilder` to simplify its usage.

* Only update `isInAirGappedEnvironment` in `DefaultNetworkManager` if the current build is an enterprise one.

* Add network constraints to `DefaultSyncPendingNotificationsRequestBuilder` based on the air-gapped status.

* Add a feature flag to disable the new check, in case it doesn't work as expected.
2026-03-10 12:44:31 +00:00
Benoit Marty
de7f2990ae Merge pull request #6307 from element-hq/renovate/org.matrix.rustcomponents-sdk-android-26.x
fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v26.03.09
2026-03-10 12:11:45 +01:00
Jorge Martin Espinosa
28c9bed632 Try fixing index OOB issues in Editable.checkSuggestionNeeded (#6303)
- Fix the case where the order for `start` and `end` is reversed.
- Fix the case where `start` or `end` may be outside the editable's range (`0..length`).
2026-03-10 08:20:02 +01:00
Benoit Marty
0e670e4059 Fix API break. 2026-03-09 21:27:28 +01:00
Valere Fedronic
477c482810 Merge branch 'develop' into valere/rtc/voice_call 2026-03-09 17:18:55 +01:00
ElementBot
2ad55f4bc6 Sync Strings (#6302)
Co-authored-by: bmarty <3940906+bmarty@users.noreply.github.com>
2026-03-09 10:38:07 +01:00
Benoit Marty
9d8aa82177 Merge pull request #6292 from element-hq/renovate/org.matrix.rustcomponents-sdk-android-26.x
Update dependency org.matrix.rustcomponents:sdk-android to v26.03.6
2026-03-06 16:38:30 +01:00
Jorge Martin Espinosa
ef9e2e3960 Fix read receipts not appearing in threaded timelines (#6297) 2026-03-06 15:13:13 +00:00
Jorge Martin Espinosa
2d3e59912a Add code to help debugging the saved nav state graph (#6295)
* Add code to help debugging the saved nav state graph: this would help us diagnose the `TransactionTooLargeException` reports we've been seeing for months.
2026-03-06 14:44:30 +00:00
Benoit Marty
83bf9dfd0e Add missing case for LiveLocation sharing. 2026-03-06 14:45:52 +01:00
Valere
0e12f7f265 Merge branch 'develop' into valere/rtc/voice_call 2026-03-06 12:22:28 +01:00
Valere
ea12fe436b review: consistency use isAudioCall everywhere (instead of voiceOnly) 2026-03-06 12:19:05 +01:00
Benoit Marty
c7464c708d Merge pull request #6284 from timurgilfanov/fix-6232
Fix typed text becoming invisible when composing long messages
2026-03-05 17:31:04 +01:00
Valere
902b7937c3 fix tests 2026-03-05 12:14:42 +01:00
Timur Gilfanov
84c5b16ee0 Merge branch 'develop' into fix-6232 2026-03-05 13:34:09 +04:00
Valere
b51a1a7c82 fix test for voice call button 2026-03-05 10:09:10 +01:00
Timur Gilfanov
f1058365cc Fix Markdown text input losing scroll position while typing 2026-03-05 10:43:31 +04:00
Valere
b26728309a fix tests 2026-03-04 19:07:53 +01:00
Benoit Marty
1682ae88e7 Rename our classes too. 2026-03-04 17:41:44 +01:00
Benoit Marty
576b8d8484 Fix API break. 2026-03-04 17:12:25 +01:00
Valere
04a9c677fb Merge branch 'develop' into valere/rtc/voice_call 2026-03-04 13:46:54 +01:00
Valere
d37e32834b rename voiceIntent to isAudioCall 2026-03-04 11:10:40 +01:00
Valere
a3dd2c78b3 Support incoming audio only calls 2026-03-04 08:56:33 +01:00
Jorge Martin Espinosa
721add707c Simplify push notification flow by using locally stored values for pending pushes (#6258)
* Create `PushRequest` in push history DB: this will be used to store requests for push notifications, either pending or completed ones.

* Rename `WorkManagerRequest` to `WorkManagerRequestBuilder`: make its `build` method return a list of `WorkManagerRequestWrapper`, which can be used to enqueue normal or unique workers.

* Rename `PerformDatabaseVacuumRequestBuilder` and adapt it to the new API.

* Adjust other components using `WorkManagerRequest`.

* Replace `SyncNotificationWorkManagerRequestBuilder` with `SyncPendingNotificationsRequestBuilder` and `FetchNotificationsWorker` with `FetchPendingNotificationsWorker`: this new pair of request builder and worker allow enqueuing requests for a session id and, once the worker runs, retrieve all the pending request data and use it to fetch the associated events. This simplifies quite a bit how this data had to be passed or grouped, since it's no longer necessary to do so

* Add new methods to `PushHistoryService` to modify the `PushDatabase`:

- insertOrUpdatePushRequest
- insertOrUpdatePushRequests
- getPendingPushRequests
- removeOldPushRequests

* Make `PushHandler` just handle incoming pushes: those will be inserted into the pending push request table in DB, then handled by the new worker. Once the process finished, a new `NotificationResultProcessor` will handle the results and what needs to be done with them (call ringing, displaying notifications, etc.)

* Add `requestType` optional parameter to `WorkManagerScheduler.cancel` so we can decide to only cancel some kinds of requests.

* Add migration to remove existing work manager requests for fetching notifications, since the previous worker class no longer exists.
2026-03-03 15:14:36 +00:00
Benoit Marty
a8c66381f2 Sync compound tokens https://github.com/element-hq/compound-design-tokens/releases/tag/v6.10.1 (#6273)
* Import compound token v6.10.1

./tools/compound/import_tokens.sh -b v6.10.1

* Use stop icon from Compound.

* Fix compilation issue.

* Use gradient color in ComposerAlertMolecule. Fixes #6192

* Update screenshots

* Remove ComposerAlertLevel.Default (not in the design).

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2026-03-03 14:42:27 +01:00