Commit Graph

2407 Commits

Author SHA1 Message Date
ganfra 3933d5ab8c Merge pull request #7277 from element-hq/sync-localazy
Sync Strings
2026-07-28 16:44:21 +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 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
bmarty 892b384f07 Sync Strings from Localazy 2026-07-27 01:07:51 +00: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 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 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 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 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
ganfra 19c38f7e7f Fix lint, detekt and konsist checks 2026-07-22 16:46:58 +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
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
Valere 25c9f9706f Merge branch 'develop' into feature/valere/timeline_active_call_rendering 2026-07-16 10:51:34 +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
Valere 5ab3ed1f09 fix test compilation 2026-07-16 09:30:51 +02:00
Valere f3746d3394 Merge branch 'develop' into feature/valere/timeline_active_call_rendering 2026-07-13 15:59:48 +02:00
Jorge Martin Espinosa f9112cc583 Collapse runs of deleted messages in the timeline (#7195)
* Collapse runs of deleted messages in the timeline (#7111)

* Collapse runs of deleted messages in the timeline

Collapse a run of three or more consecutive deleted messages into a single
expandable group, reusing the existing state-change grouping (the same way
element-web does it) instead of showing one "Message removed" placeholder per
deletion. The header shows the count only ("N deleted messages"); the Rust SDK
does not expose who performed the redaction, so we don't attribute it.

On by default. Runs shorter than three are left as individual placeholders, and
day dividers and read receipts are preserved (a run is broken by any
non-redacted item, so a day is never emptied).

Run the collapse as the final step of TimelineItemGrouper.group() instead of
a separate pass in the presenter, as suggested in review. Kept as its own
finalization step rather than via canBeGrouped() so the group stays all
redacted and the count-only header is preserved.
The group id is resolved through the grouper's existing id registry, like the
other groups, so it stays stable however the run grows and the user's
expand/collapse state is kept across timeline updates.

* Replace temporary strings with final ones

* Update screenshots

---------

Co-authored-by: Hi Dude! <klarkmonty@tuta.io>
Co-authored-by: manfrommedan <manfrommedan@users.noreply.github.com>
Co-authored-by: ElementBot <android@element.io>
2026-07-13 15:57:55 +02:00
Valere e9b090a552 Merge branch 'develop' into feature/valere/timeline_active_call_rendering 2026-07-13 14:54:16 +02:00
Valere 33f1eb9cf8 fix detekt errors 2026-07-13 14:38:08 +02:00
Valere cf21bb1045 update sdk to 26.07.13 2026-07-13 14:25:10 +02:00
ElementBot 03304b3ece Sync Strings (#7192)
* Sync Strings from Localazy

* Update screenshots

---------

Co-authored-by: jmartinesp <480955+jmartinesp@users.noreply.github.com>
2026-07-13 12:21:55 +02:00
Valere bdf4c56b96 Merge branch 'develop' into feature/valere/timeline_active_call_rendering 2026-07-08 17:59:59 +02:00
Valere 17bcf8c55c Reflect new design updates 2026-07-08 17:58:06 +02:00
Benoit Marty d7a2366a60 Merge pull request #7090 from manfrommedan/fix/keep-edit-when-attaching-media
Fix the message edit being lost when attaching media
2026-07-08 17:39:58 +02:00
manfrommedan 55f3a1acfb Keep the in-progress edit when attaching media
Picking an attachment reset the composer to Normal, which dropped an
in-progress edit: the attachment went out as a new message and the
leftover edit text then created another one instead of editing the
original.

Route every attach path through a single resetComposerModeAfterAttaching()
helper that clears Reply/Normal but keeps an edit pending, so the typed
text still edits the original on the next send. This also covers the
multi-item gallery picker added in #6519, which reset the mode
unconditionally.

Reply is still cleared (the attachment becomes the reply).

Fixes #7083.
2026-07-08 15:32:01 +03:00
Benoit Marty a5d8b6eb2a Merge branch 'develop' into feat/skin-tone-picker 2026-07-07 15:21:27 +02:00
Benoit Marty 243acf1ee0 Add more screenshots 2026-07-07 15:19:18 +02:00
Benoit Marty 3ec7aa2a55 Remove default parameter values and make them not nullable. 2026-07-07 14:34:14 +02:00
Benoit Marty 387022a9af Use color from theme and improve preview of EmojiItem 2026-07-07 14:24:52 +02:00
Benoit Marty 9672950512 Merge pull request #7138 from element-hq/fix/a11y-reading-order
Fix timeline reading order distorted when TalkBack is active
2026-07-07 09:42:00 +02:00
Benoit Marty 1ddb32645c Merge pull request #7007 from element-hq/renovate/androidx.compose.material3-material3-1.x
Update dependency androidx.compose.material3:material3 to v1.5.0-alpha21
2026-07-06 18:31:45 +02:00
Benoit Marty 5c7bac58ce Merge branch 'develop' into feature/bma/scroll-to-unread-messages 2026-07-06 13:36:28 +02:00
Benoit Marty e346f68fc8 Merge pull request #7044 from bxdxnn/fix/thread-list-avatar
Fix wrong avatar shown in the thread list's top bar
2026-07-06 11:34:14 +02:00
Benoit Marty e3a2e98068 Fix compilation issue 2026-07-06 10:50:17 +02:00
Benoit Marty ac1be8c87a Merge branch 'develop' into feature/bma/scroll-to-unread-messages 2026-07-03 14:30:14 +02:00
Benoit Marty 8840e2f96b Merge pull request #7112 from element-hq/feature/bma/galleryMessages
Support gallery messages
2026-07-03 14:09:20 +02:00