Commit Graph

15138 Commits

Author SHA1 Message Date
Jorge Martin Espinosa 52d146a59d CI: split unit tests, screenshots and coverage in tests.yml (#7296)
* Check if splitting the steps for testing and generating the reports improves performance and keeps the coverage stats

* Exclude Konsist tests and include `:app` ones

* Remove the extra dependency of `koverVerifyAll` on `:app:koverVerify{variant}`
2026-07-30 11:51:18 +02:00
hayyaksi e6d4472c0c Index messages locally in an encrypted on-device store so encrypted rooms can be searched at all (#7249)
* Add a message search abstraction over the Rust SDK's local index

Wraps the SDK's search service so the rest of the app never sees MatrixRustSDK
types, following the existing convention in libraries/matrix.

- MessageSearch, MessageSearchService, MessageSearchResult and
  MessageSearchPaginationState describe the surface in the api module.
- RustMessageSearch and RustMessageSearchService implement it, with
  MessageSearchResultMapper and MessageSearchResultsProcessor turning SDK results
  into Kotlin data classes.
- TantivyQueryEscaper escapes the query so a user typing ":)" or "AND" searches
  for that literal text rather than tripping the tantivy parser, and joins every
  word as a Must clause.
- Fakes and unit tests cover the mapping, the processor and the escaper, the last
  checked against a real tantivy 0.26.1 parser.

* Attach the encrypted search index behind a disabled feature flag

Gives the client an on-device tantivy index encrypted with the session's client
secret, so encrypted rooms can be searched at all.

- The index store is attached at ClientBuilder time via withSearchIndexStore, in
  a search-index directory alongside the session, keyed on the client secret. A
  session without one gets no index.
- MatrixClient exposes isMessageSearchAvailable so callers gate on the real
  indexing capability rather than on the raw flag, and getCacheSize() counts the
  index directory so it stays visible in the settings figures.
- FeatureFlags.MessageSearch (feature.message_search) is off by default and
  isFinished = false. It is read once at ClientBuilder time, so develop stays
  releasable and nothing reaches a user.

* Simplify search index wiring following review

Tie search availability to the MessageSearch feature flag alone and let
the index be created without a client secret, encrypting it only when
the session has one, matching the SDK's SQLite stores. Make
getBaseClientBuilder take the flag as a required parameter and return
ClientBuilder directly again, dropping the BaseClientBuilder wrapper
and the mid-restore snapshot parameter. Check the flag through
FeatureFlagService in RustMatrixAuthenticationService instead of
caching it in a field, and revert the extra matrix_sdk_search tracing
target, which belongs in the SDK's defaults.
2026-07-30 11:17:40 +02:00
Jorge Martin Espinosa af9db20f4f Add extra vertical padding to ReplyToInvalidContent and ReplyToNotFoundContent (#7288)
* Add extra vertical padding to `ReplyToInvalidContent` and `ReplyToNotFoundContent`

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2026-07-30 10:30:22 +02:00
Jorge Martin Espinosa 9ab679566d Don't check enterprise previews in KonsistPreviewTest (#7297)
Don't check enterprise previews in `KonsistPreviewTest`
2026-07-30 10:29:43 +02:00
renovate[bot] bac77b7645 Update dependency io.sentry:sentry-android to v8.50.0 (#7298)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-30 09:43:45 +02:00
renovate[bot] e46d36ec64 Update android.gradle.plugin to v9.3.0 (#7248)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-30 09:40:09 +02:00
ganfra 2a1fd60ad7 Merge pull request #7291 from element-hq/renovate/org.maplibre.compose-maplibre-compose-0.x
Update dependency org.maplibre.compose:maplibre-compose to v0.13.1
2026-07-29 19:56:34 +02:00
ganfra 67b5bddf4e Changelog for version 26.08.0 2026-07-29 18:31:11 +02:00
ganfra a598ff263f Merge branch 'release/26.08.0'
# Conflicts:
#	tools/manifest/gplay/release/aaptDump.txt
2026-07-29 17:46:31 +02:00
ganfra 0770ff04c7 Adding fastlane file for version 26.08.0 2026-07-29 17:44:30 +02:00
ganfra ae74546ee4 Setting version for the release 26.08.0 2026-07-29 17:44:12 +02:00
ganfra 2e480f93ed Merge pull request #7293 from element-hq/ci/run-konsist-tests-sequentially
Run `Konsist` tests sequentially
2026-07-29 13:58:09 +02:00
Jorge Martín d711922325 Remove test for detecting m prefix for fields
I'm not sure anyone will actually use `m` prefixes on Kotlin anymore
2026-07-29 13:28:57 +02:00
Jorge Martín ddc972a365 Run Konsist tests sequentially
It's sadly faster that way:

Every time we run a test class in parallel a new JVM is started, and the `KoScope` contents can't be shared between them.
This scope can take a few minutes to load, so having several instances of this happening at the same time is a terrible idea.
It's actually faster to run the tests sequentially, at least locally.
2026-07-29 13:28:22 +02:00
Jorge Martin Espinosa 49692794f9 Allow adding a path suffix to the OAuth client URI (#7286)
* Allow adding a path suffix to the OAuth client URI
2026-07-29 09:29:44 +00:00
Jorge Martin Espinosa 674354b1a6 Enforce HS disabling E2EE in DM creation too (Element Pro) (#7292)
This part was missing from the implementation of this Element Pro feature, which incorrectly only applied to rooms.
2026-07-29 09:17:41 +00:00
renovate[bot] eb18770378 Update dependency org.maplibre.compose:maplibre-compose to v0.13.1 2026-07-29 07:55:56 +00:00
renovate[bot] 00dcf48f28 Update dependency org.maplibre.gl:android-sdk to v13.4.0 (#7290)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-29 09:53:27 +02:00
ganfra cc75e9386c Merge pull request #7287 from element-hq/renovate/org.matrix.rustcomponents-sdk-android-26.x
Update dependency org.matrix.rustcomponents:sdk-android to v26.07.28
2026-07-29 02:03:53 +02:00
ganfra 8b970fb2f1 Fix license header on FakeFfiContinuationMessageSender 2026-07-29 01:21:05 +02:00
ganfra 3fc8972464 Fix unit test compilation for new continuationSender param on WaitingForAuth 2026-07-28 18:08:10 +02:00
ganfra 3933d5ab8c Merge pull request #7277 from element-hq/sync-localazy
Sync Strings
2026-07-28 16:44:21 +02:00
ganfra bd4d0cb02b Fix compilation for QR login continuation error variants added in SDK 26.07.28 2026-07-28 16:44:07 +02:00
renovate[bot] 154d79d4b5 Update dependency org.matrix.rustcomponents:sdk-android to v26.07.28 2026-07-28 13:45:07 +00:00
Jenna Vassar c2e8676773 Update keyboard visibility to track hasFocus (#7284) 2026-07-28 15:35:27 +02:00
ElementBot f5b0195852 Update screenshots 2026-07-28 13:17:45 +00:00
ganfra ea3788abd1 Sync Strings from Localazy 2026-07-28 14:51:37 +02:00
Jenna Vassar fe24aeb2ce Add a password strength estimator wrapping the SDK zxcvbn API (#7186)
* Add a password strength estimator wrapping the SDK zxcvbn API

* Add tests for the password strength estimator SDK mapping

---------

Co-authored-by: ElementBot <android@element.io>
2026-07-28 10:30:06 +00:00
Jorge Martin Espinosa 0cd163a680 Import Compound tokens from v10.2.3 (#7272)
* Import Compound tokens from `v10.2.3`

* Remove manually added `bgSubtleTertiary` semantic color: it's in Compound now

* Bump enterprise module to a compatible commit
2026-07-28 09:07:24 +00:00
Jorge Martin Espinosa adc1b50492 Fix insets in several screens (#7285)
* Fix insets in several screens

UI components in the room list, room member list, etc. now have better insets based on `WindowInsets.safeDrawing`

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2026-07-28 10:29:42 +02:00
ganfra c685c356ce Merge pull request #7282 from element-hq/renovate/actions-checkout-7.x
Update actions/checkout action to v7.0.1
2026-07-28 10:02:56 +02:00
Matt Van Horn 9042b4be4f Make settings section separators visible in black theme (#7039)
* Make settings section separators visible in black theme

In the Black (OLED) theme the canvas is forced to pure black while the
section-separator divider keeps its standard-dark colour (outlineVariant,
~10% alpha white), leaving dividers in Settings and related screens almost
invisible. Add an OLED-aware listSectionDivider alias that lightens the
divider only when the black theme is active, and use it for the
ListSectionHeader divider. Light and standard-dark themes are unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>

* Set separatorSecondary for Black theme instead of a custom divider alias

Following review feedback: now that the global HorizontalDivider uses
separatorSecondary (#7054), give the Black/OLED theme a visible
separatorSecondary value in ElementTheme instead of carrying a bespoke
listSectionDivider alias. This fixes all separators on pure black, not
just section headers. The exact color is pending design confirmation.

* chore(theme): remove in-code design discussion comment

Move design discussion out of the code per review; the divider color
decision lives in the PR thread.

* Update screenshots

Signed-off-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>

---------

Signed-off-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: ElementBot <android@element.io>
Co-authored-by: Jorge Martin Espinosa <jorgem@element.io>
2026-07-28 09:51:15 +02:00
Jorge Martin Espinosa cc3c68411e Try making HeaderFooterView more robust (#7267)
* Try making `HeaderFooterView` more robust

Create `HeaderFooterLayout` to properly calculate the content size when the component is scrollable so it's at least the size of the available space.

* Make `DesktopNoticeView` scrollable

For this, `NumberedListOrganism` can't be a `LazyColumn`, since that's a lazy layout with no intrinsic height and Compose doesn't know how to size it.

* Fix the case where no header or content composables are supplied

* Fix insets in non-scrollable UI

* Remove `movableContentOf`, suppress the warning instead since the `isScrollable` parameter should never toggle this behavior

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2026-07-28 09:38:56 +02:00
renovate[bot] 03639caa75 Update actions/checkout action to v7.0.1 2026-07-27 16:18:01 +00:00
Jorge Martin Espinosa 77edfec61a Use the right insets in the home screen UI (#7271)
* Use the right insets in the home screen UI

That's `WindowInsets.statusBar` for the `Scaffold` component, then `WindowInsets.navigationBar` for the `LazyColum.contentPadding`

* Apply it to other screens with long lists of items too

* Apply the insets to `PreferencePage` too

* Apply inset changes to other screens with scrollable content

* Add helper insets/padding values based on review suggestions.

* Use the newly added insets/padding values in several scaffold and scrollable columns

---------

Co-authored-by: ElementBot <android@element.io>
2026-07-27 18:17:14 +02:00
Jorge Martin Espinosa 0442fbd307 Fix media viewer for medias not related to events displaying invalid state (#7280)
* When no URL is provided to `ContentValidationState.collectMediaState`, assume it's valid

That way we can do:

`if (validationState.isValid() && state.collectMediaState(possiblyNullUrl).isValid()) ...`

* Remove the `eventId` param from `ContentScannerService.scan`

It's not really used, since we then provide a state that can be mutated, and fetching that is what the previous parameter was used for

* Make sure to always validate the medias in the viewer, both the actual media and the thumbnail

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2026-07-27 18:16:35 +02:00
Jorge Martin Espinosa d8b01cf3e7 Fix ContentErrorView not calculating its text size synchronously (#7281)
It was using a `LaunchedEffect` instead of relying on the `Text(onTextLayout)` parameter.
2026-07-27 18:15:33 +02:00
Jorge Martin Espinosa bbb83c2ff0 Localazy: improve search, parallelize checks (#7261)
* Remove no longer temporary string

These are now in localazy and the sync strings CI flow was failing because we have 2 conflicting values in `temporary.xml` and `localazy.xml`

* Use the right placeholder value in `screen_local_network_opt_in_subtitle`

* Localazy: improve search, parallelize checks

The search for XML files has been narrowed down and it's several times faster now, and processing the files is now done in parallel

* Improve script to also find and delete previous files

Also add the option of having a `-v|--verbose` flag to print which files we're modifying

* Use `LocalBuildMeta` to get the app name inside `LocalNetworkPermissionDialogView`

* Allow finding all the forbidden terms in the strings and translations and then return an error exit code instead of a success one

---------

Co-authored-by: ElementBot <android@element.io>
2026-07-27 15:12:53 +02:00
renovate[bot] 0e3d479490 Update roborazzi to v1.70.0 (#7274)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-27 10:56:30 +02:00
renovate[bot] 4d9bbd67c3 Update actions/setup-python action to v7 (#7278)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-27 10:56:07 +02:00
renovate[bot] 91ec818522 Update dependency org.jetbrains.kotlinx:kover-gradle-plugin to v0.9.9 (#7273)
* Update dependency org.jetbrains.kotlinx:kover-gradle-plugin to v0.9.9

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: ElementBot <android@element.io>
2026-07-27 09:23:13 +02:00
bmarty 892b384f07 Sync Strings from Localazy 2026-07-27 01:07:51 +00:00
ganfra 66f6852f8a Merge pull request #7268 from element-hq/renovate/actions-setup-java-5.x
Update actions/setup-java action to v5.6.0
2026-07-24 18:25:09 +02:00
ganfra e798eed816 Merge pull request #7051 from element-hq/feature/valere/timeline_active_call_rendering
feat(call): Active call timeline rendering
2026-07-24 13:43:43 +02:00
ganfra bfb2cc4678 Fix CallNotifyContent constructor call in EventItemFactoryTest 2026-07-24 11:35:34 +02:00
ganfra 1e2085260c Merge branch 'develop' into renovate/actions-setup-java-5.x 2026-07-24 11:05:18 +02:00
Jorge Martin Espinosa 1595830541 Remove no longer temporary strings (#7260)
* Remove no longer temporary string

These are now in localazy and the sync strings CI flow was failing because we have 2 conflicting values in `temporary.xml` and `localazy.xml`

* Use the right placeholder value in `screen_local_network_opt_in_subtitle`

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2026-07-24 09:00:45 +00:00
ganfra 61ea9cf2b3 Merge pull request #7266 from element-hq/feature/fga/searchbar-result-state-refactor
Refactor SearchBarResultState.Initial/NoResultsFound to data objects
2026-07-24 09:58:15 +02:00
renovate[bot] 5ee8bc2fa7 Update dependencyAnalysis to v3.17.0 (#7265)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-24 09:04:48 +02:00
renovate[bot] bce559dc1b Update actions/setup-java action to v5.6.0 2026-07-23 16:52:37 +00:00