Commit Graph

6857 Commits

Author SHA1 Message Date
Benoit Marty ba2e2a02d1 Merge branch 'develop' into bma/fixLeak 2026-09-16 09:42:36 +02:00
Benoit Marty 3e861cc646 Do not report detekt LargeClass issues on test classes (#7713)
detekt's default configuration excludes test source sets from
`TooManyFunctions` and `StringLiteralDuplication`, but not from
`LargeClass`, so large test classes were reported and had to carry a
`@Suppress("LargeClass")` annotation.

Add the same kind of exclusion to the `LargeClass` rule in
`tools/detekt/detekt.yml` and remove the 24 now-redundant suppressions
from test files. The two remaining suppressions are in production code,
where the rule still applies.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-15 13:56:33 +02:00
Benoit Marty c512e3f299 Introduce an EmptyState, so that screenshot filename stays consistent. 2026-09-15 10:52:45 +02:00
Benoit Marty bcf136025a Merge pull request #7703 from element-hq/bma/accountProviderIteration
Iteration on Acount provider
2026-09-15 09:58:16 +02:00
Benoit Marty 5b0d7bf5a7 Log errors and fix quality issues 2026-09-14 18:30:29 +02:00
Benoit Marty ed250320b3 Close the threaded timelines created by ShareLocationPresenter and DefaultMediaSender
Both created a dedicated timeline for each operation performed in a thread, and
never closed it, leaking SDK resources. Apply the same treatment as PollRepository:
replace getTimeline() with a scoped withTimeline() helper, which closes the created
timeline once the operation completes, whether it succeeds, fails or gets cancelled.

In DefaultMediaSender.sendGallery(), waiting for the upload handler is now done
inside the block, so that the timeline stays open until the upload completes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-14 15:21:14 +02:00
Jorge Martin Espinosa 3d198d8065 Fix flaky test in TimelinePresenterTest (#7702)
The problem seemed to be sometimes the background work to switch from live timeline to a focused event timeline wasn't finished in time and an assertion failed from time to time.

By providing the coroutine to run this on we can pass a `TestScope` and force it to reliably run immediately instead in unit tests.
2026-09-14 15:19:14 +02:00
Benoit Marty e2fb2962f6 Close the threaded timeline created by PollRepository
PollRepository created a dedicated timeline for each operation performed in a
thread, and never closed it, leaking SDK resources. Replace getTimelineProvider()
with a scoped withTimeline() helper, so that the created timeline is closed once
the operation completes, whether it succeeds, fails or gets cancelled.

The live timeline is left untouched, since it is owned by its room.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-14 15:17:24 +02:00
Benoit Marty 6887092ce4 Replace String by AccountProvider to be able to get baseUrl and serverName. 2026-09-14 09:56:16 +02:00
bmarty 5102f6b0fa Sync Strings from Localazy 2026-09-14 00:54:38 +00:00
Jorge Martin Espinosa 8cd3750cde Make global search use a Joined filter for room results (#7695)
Before this, global search returned also invites, which wasn't planned.
2026-09-11 17:36:38 +02:00
Benoit Marty 58b0f2ebc3 Merge pull request #7591 from element-hq/bma/iterateOnClientCreation
Iterate on client creation
2026-09-11 13:22:42 +02:00
Benoit Marty 562e439447 Show a loading indicator on the placeholders which can stay on screen forever
emptyNode() renders nothing at all, which is fine for a placeholder that is left
within a few frames, but makes the application look frozen when the wait can
last, or never end.

Add a delayBeforeShowingContent parameter to emptyNode(): when it is finite, a
progress indicator and a "Loading…" label fade in after that delay, reusing the
existing DelayedVisibility helper. It defaults to Duration.INFINITE, so the
splash screen keeps rendering an empty canvas.

Use a one second delay on the two placeholders which are not guaranteed to be
left: the FTUE one, rendered while waiting for the session verified status, and
the LoggedInFlowNode one, rendered while the FTUE state is unknown.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-11 12:48:44 +02:00
Benoit Marty a7ff96c1c3 Update wording of the remove message confirmation dialog.
And get strings from Localazy
2026-09-09 16:26:51 +02:00
Benoit Marty 50ec5f7dec Merge pull request #7538 from hayaksi1/fix/1612-redaction-reason
Let the user give a reason when removing a message
2026-09-09 16:11:33 +02:00
Benoit Marty 1ee156f480 Remove Showkase from the project. 2026-09-09 15:56:25 +02:00
Benoit Marty a817b6f219 Rename methods and update documentation. 2026-09-08 17:06:53 +02:00
Benoit Marty 1f18a18917 Iterate on hooks implementation 2026-09-08 16:47:57 +02:00
ganfra 9a4beb4278 Fix stability on UserLocationState 2026-09-08 10:15:03 +02:00
ganfra 6c01ad1364 Fix formating 2026-09-07 19:04:13 +02:00
ganfra 7773ead79b Prevent location bottomsheet from being hidden 2026-09-07 18:56:25 +02:00
ganfra f72e1ad2cc Support Google Play Services fused location backend 2026-09-07 18:11:38 +02:00
ganfra 3754258d88 Adapt location feature to updated maplibre-compose API 2026-09-07 15:25:39 +02:00
ganfra 7507475afd Use vulkan runtime 2026-09-07 15:25:39 +02:00
ElementBot aced1ea64d Sync Strings (#7657)
* Sync Strings from Localazy

* Update screenshots

---------

Co-authored-by: jmartinesp <480955+jmartinesp@users.noreply.github.com>
2026-09-07 14:19:38 +02:00
Jorge Martin Espinosa 79f4e2e06f Stop clearing the remote config when clearing the cache (#7662) 2026-09-07 13:05:15 +02:00
Benoit Marty 66c502853c Merge pull request #7647 from element-hq/feature/bma/cleaupProguardFiles
Clean up ProGuard keep rules files
2026-09-04 17:37:53 +02:00
Benoit Marty 0e12d4e119 Revert "Say so when this session has no secrets to verify another one with" (#7644) 2026-09-04 14:39:50 +02:00
Benoit Marty 5c0c330bbd Import string from Localazy. (#7645) 2026-09-04 14:38:37 +02:00
Benoit Marty 55bfcac6ff Remove empty (or comment only) proguard files. 2026-09-04 11:51:59 +02:00
Jorge Martin Espinosa dcd0bc782f Make sure enforce_element_pro is taken into account in FOSS (#7631)
* Make sure `enforce_element_pro` is taken into account in FOSS

* Make sure we crate `RustTemporaryMatrixClient` instances with a proper `serverName` value
2026-09-03 10:05:40 +02:00
hayaksi1 dbf18e688d Merge branch 'develop' into fix/1612-redaction-reason 2026-09-03 03:02:35 +03:00
hayyaksi d2f540ae79 Expose the timeline item long press and swipe to reply as TalkBack actions (#7458)
* Expose the timeline item gestures as TalkBack actions

Long pressing a timeline item opens the action list, and swiping it
starts a reply. Neither gesture is reachable with a screen reader
enabled, so those two actions were unavailable to TalkBack users.

Publish them as accessibility custom actions on the event row, reusing
the existing "Message actions" and "Reply" strings. The reply action is
only offered when the user is allowed to reply, matching the swipe.

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2026-09-02 16:58:26 +02:00
Benoit Marty 94bfcc41a6 Merge pull request #7628 from element-hq/sync-localazy
Let's merge before we get a conflict.
2026-09-02 15:03:21 +02:00
Benoit Marty 992da95e4c Merge pull request #7551 from hayaksi1/fix/5344-verification-unavailable
Say so when this session has no secrets to verify another one with
2026-09-02 14:56:51 +02:00
jmartinesp dfccde93c6 Sync Strings from Localazy 2026-09-02 10:07:17 +00:00
Benoit Marty 7a2f3952cb Move Gallery and Knock feature flags to Labs. 2026-09-02 10:59:51 +02:00
Jorge Martin Espinosa e5065d9baa Fix invalid placeholders in translations (#7612)
* Add logic to find invalid string placeholders in `checkForbiddenTerms.py`

* Fix found invalid placeholder in Chinese translations
2026-09-01 12:40:05 +02:00
Benoit Marty 52fcc797b7 Merge pull request #7523 from hayaksi1/fix/1874-empty-formatted-body
Fall back to the message body when the formatted body has nothing to render
2026-09-01 11:37:59 +02:00
Benoit Marty 012c5a1f81 Do some renaming now that user can select multiple answers per poll 2026-08-31 15:45:14 +02:00
Benoit Marty 0ad3ab1d9d Merge pull request #6477 from bxdxnn/feat/polls-max-selections
Support multi-select polls
2026-08-31 15:26:35 +02:00
hayyaksi c6fe9786a9 Stop rescanning message bodies for emoji only on every recomposition (#7531)
Deciding whether a text message is emoji only compares the formatted body to
the plain one and runs a grapheme scan over the whole message. Nothing was
remembered, so both ran again on every recomposition of every visible message.

Remember the decision against the body and the formatted body. The preview
branch moves into the same computation, so the composable wrapper around
containsOnlyEmojis, which had a single caller and existed only to read
LocalInspectionMode, is no longer needed.
2026-08-31 12:23:01 +02:00
Benoit Marty 9855224e50 Merge pull request #7600 from toger5/toger5/fix-crash-on-circular-obj-logging
Fix crash due to JSON.stringify on a cirular structure in injectes js.
2026-08-31 12:19:23 +02:00
Timo K. dc2d05f9da also add try catch block 2026-08-30 13:12:57 +02:00
Timo K. 7e8efebe4d Fix crash due to JSON.stringify on a cirular structure in injectes js. 2026-08-30 12:38:04 +02:00
hayaksi1 b15125289b Merge branch 'develop' into fix/1874-empty-formatted-body 2026-08-30 02:04:57 +03:00
Benoit Marty c47446bfb9 Merge pull request #7588 from element-hq/feature/bma/avoidNullableCallback
Limit usage of nullable callback.
2026-08-28 22:09:29 +02:00
Benoit Marty c4606e59ef Fix test compilation issue. 2026-08-28 19:02:43 +02:00
Benoit Marty c204d867a2 Merge pull request #7585 from element-hq/rav/app_startup_hook
Implement a hook allowing enterprise modules to perform actions on startup
2026-08-28 16:06:25 +02:00
Benoit Marty cca60ebc3a Limit usage of nullable callback. 2026-08-28 11:01:54 +02:00