Commit Graph

6302 Commits

Author SHA1 Message Date
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
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 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
ganfra ea3788abd1 Sync Strings from Localazy 2026-07-28 14:51:37 +02: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
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
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 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
bmarty 892b384f07 Sync Strings from Localazy 2026-07-27 01:07:51 +00: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
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
ganfra 29d9e7c1ba Merge branch 'develop' into feature/valere/timeline_active_call_rendering
# Conflicts:
#	tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components.customreaction_EmojiItemWithPopup_Night_0_en.png
2026-07-23 16:24:11 +02:00
ganfra 9d427077f0 Refactor SearchBarResultState.Initial and NoResultsFound to data objects 2026-07-23 16:15:02 +02:00
Jorge Martin Espinosa 72c47f7c41 Add warning to the 'Scan QR code' screen (#7264)
* Add warning to the 'Scan QR code' screen

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2026-07-23 15:38:33 +02:00
ganfra 907579d59f Merge pull request #7232 from element-hq/feature/fga/display_user_status
WIP : display user status
2026-07-23 15:10:19 +02:00
ganfra b83996d70d Merge pull request #7257 from element-hq/feature/fga/user-status-emoji-picker
Plug emoji picker for custom user status
2026-07-23 14:39:55 +02:00
ganfra 93786cdcbb Use roomMember.getBestName() in SuggestionPickerView 2026-07-23 14:23:05 +02:00
Valere f22e4b3314 Merge branch 'develop' into feature/valere/timeline_active_call_rendering 2026-07-23 13:40:38 +02:00
Valere 19aabd4211 review cleanup 2026-07-23 13:40:08 +02:00
ganfra 14feeca2a5 Add some comments after PR review 2026-07-23 11:25:40 +02:00
ganfra b9831734a0 Take DisplayedStatus directly in DisplayNameWithStatus and always show emoji 2026-07-22 17:28:30 +02:00
ganfra 3fdd6be832 Extract dmUserStatus helper for DM user status resolution 2026-07-22 17:28:30 +02:00
ganfra 2152552daa Add displayedStatus parameter to test fixtures for user status 2026-07-22 17:28:30 +02:00
ganfra 2a86c69b9d Sync user status strings with Localazy and tidy formatting
# Conflicts:
#	libraries/ui-strings/src/main/res/values/temporary.xml
2026-07-22 17:28:29 +02:00
ganfra 06a903718b Display user status next to display names across rooms and profiles 2026-07-22 17:27:21 +02:00
Jorge Martin Espinosa 18034e02a2 Fix banned mime type errors in DefaultContentScannerService (#7255)
The content scanner allows disabling certain mime types for files in the set up HS, but it turns out for the scan operation instead of returning an `"is_valid": false` result in that case, it returns an error with a `MCS_MIME_TYPE_FORBIDDEN` reason. We need to handle that case as if it had returned the false `isValid` value.
2026-07-22 16:48:44 +02:00
ganfra 19c38f7e7f Fix lint, detekt and konsist checks 2026-07-22 16:46:58 +02:00
ganfra 4dadb3c8c8 Wire the emoji picker into the user-status feature 2026-07-22 15:48:55 +02:00
ganfra 89deff8a53 Add libraries/emoji/test module with picker fakes 2026-07-22 15:48:54 +02:00
ganfra 93d6d5c84c Migrate EmojiPickerPresenter to assisted-factory pattern with EmptyGetRecentEmojis 2026-07-22 15:48:54 +02:00
ganfra 5d8290b240 Extract EmojiPicker into libraries/emoji with Renderer/Presenter pattern 2026-07-22 15:48:54 +02:00
ganfra e492f06386 Migrate libraries/recentemojis into libraries/emoji 2026-07-22 15:48:54 +02:00
Jorge Martin Espinosa 05917bd65f Fix padding for captions of media in 'not found' state (#7247)
* Fix padding for captions of media in 'not found' state

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2026-07-22 13:36:21 +02:00
Jorge Martin Espinosa 925376b6af Allow adding extra elements to the developer settings from external modules (#7230)
* Add `ExtraDeveloperOptionsRenderer` to display extra UI components in the developer settings screen. It defaults to not displaying anything, using `NoopExtraDeveloperOptionsRenderer`

* Add `EnterpriseService.overriddenElementWellKnown` method to fetch the current overridden element well known value, if any

* Modify the well known retrievers to use the overridden value if it's there. Also extract the JSON parsing to its own `ElementWellKnownParser` component.

* Bump enterprise repo reference.
2026-07-21 10:18:56 +02:00
Jürgen Wischer 3cef8c2796 Announce expanded/collapsed state on the timeline group header (#7226)
* Announce expanded/collapsed state on the timeline group header

GroupHeaderView (the accordion-style header used for grouped state
events in the timeline) uses toggleable() combined with
clearAndSetSemantics { contentDescription = text }. The
clearAndSetSemantics block discards the state information that
toggleable() would otherwise expose, so TalkBack never announces
whether the group is currently expanded or collapsed.

Add an explicit stateDescription (two new a11y_state_expanded /
a11y_state_collapsed strings in temporary.xml) alongside the existing
contentDescription so the expanded/collapsed state is communicated to
assistive technology.

Internal note: this single-file/single-root-cause fix addresses three
separate BITV findings raised in the same accessibility audit against
this component's toggle semantics.

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2026-07-20 08:50:51 +02:00
Valere e9fa6435fb Merge branch 'develop' into feature/valere/timeline_active_call_rendering 2026-07-17 15:33:33 +02:00
Valere 8109290650 code review 2026-07-17 15:33:28 +02:00
Jorge Martin Espinosa 2705efad15 Add content scanner support to media gallery and viewer (Element Pro) (#7233)
* Add content scanner support to media gallery and viewer

* Improve UI and previews

* Remove default content validation state in media content views

* Disable click for invalid media items in the gallery events

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2026-07-17 15:26:13 +02:00
Thirumani Vihaan f005693874 Fix #7181: Remove back arrow from device verified screen and use 'Done' text (#7222)
* Fix #7181: Remove back arrow from device verified screen and use 'Done' text

* Update screenshots

* Fix failing Maestro test by tapping 'Done' instead of 'Continue'

---------

Co-authored-by: ElementBot <android@element.io>
Co-authored-by: thirumani-vihaan <your-github-email@example.com>
2026-07-16 16:50:58 +02:00
Benoit Marty 2ed7cfe79c Merge pull request #7225 from unclejay80/a11y/role-button-login-onboarding
Add a button role to clickable icons and text on the login/onboarding screens
2026-07-16 12:37:02 +02:00
Benoit Marty bf54701577 Merge pull request #7228 from element-hq/mxandreas/no-hs-check-qr
Fix logging via QR code when using MDM-configured homeserver
2026-07-16 11:14:48 +02:00
Valere 25c9f9706f Merge branch 'develop' into feature/valere/timeline_active_call_rendering 2026-07-16 10:51:34 +02:00
Benoit Marty 3854caa8f1 Fix test compilation issue. 2026-07-16 10:27:20 +02:00
Jorge Martin Espinosa 0d03472c60 Content scanner (Element Pro): scan timeline events for unsafe content (#7159)
* Simplify how event content with captions are displayed

The caption component will now be added in `TimelineItemEventContentView` instead of separately in each `TimelineItem__View` component

* Make sure `CoilMediaFetcher` methods to fetch media throw errors

We need to catch them later to check if the content scanner marked some thumbnails or medias as invalid/unsafe in `AsyncImage` instances

* Add a `ContentScannerService` that allows us to manually scan a list of medias in an event and then update and store the results

The results take the form of `ContentValidationValue`, stored in a `ContentValidationState` instance tied to the event

* Create `EventContentValidationCache` to keep the `ContentValidationStates` for events in a room

* Expose `EventContentValidationCache` to Compose using `LocalEventContentValidationState`

Also add a couple of helper functions to avoid having to manually remember the states

* Use the new components to display invalid content in the timeline items

* Add `blurhash` to most media items so we can use it while validating the thumbnails/medias

* Fix custom layout issues with screenshot and UI tests

* Also check the validation state for replied-to events in the composer

* Fix and add tests

* Handle unrecoverable content validation errors too: display a 'not found' UI

* Improve the performance of `EqualWidthColumn` for the single item case

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2026-07-16 07:59:51 +00:00
mxandreas 16bfca1e16 Remove unused code. 2026-07-16 08:34:07 +01:00
ganfra 56cf00560e Merge pull request #7184 from element-hq/feature/fga/lls_fix_timeout
Live location sharing timeout
2026-07-16 09:33:02 +02:00