1
0
mirror of https://github.com/element-hq/element-x-android.git synced 2026-10-23 18:49:00 +03:00

6878 Commits

Author SHA1 Message Date
Benoit Marty
cd3fb0ddca Merge pull request #7989 from element-hq/feature/bma/classic-avatar-size
Fix crash on the login screen when the Element Classic avatar is very large
2026-10-23 12:33:18 +02:00
Benoit Marty
967cee86da Guard the userId read when receiving the Element Classic avatar
Before Android 13, the first access to a Bundle received over IPC
unparcels all its entries, including the avatar bitmap. Guard the
userId read so that a failure to unparcel the avatar does not escape
the handler.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-23 11:07:23 +02:00
Jorge Martin Espinosa
111731b09f Pass media captions as HTML to the media viewer (#7970)
* Pass media captions as HTML to the media viewer

`MediaInfo` and `GalleryInfo` carried the formatted caption as a `CharSequence`, which isn't a good fit for `Parcelable` classes. Some producers also passed the raw HTML body in that field, so the caption was rendered with its tags, and gallery messages didn't pass a formatted caption at all.

Replace `formattedCaption` with `htmlCaption: String?` and convert it to styled text in `MediaViewerPresenter`, using the same `HtmlConverterProvider` as the timeline. The converted captions are cached by HTML so page data equality stays stable across list updates.

* Pillify media captions in the media viewer

Move the `TextPillificationHelper` interface to `:features:messages:api` so the media viewer can use it, keeping `DefaultTextPillificationHelper` in the impl module. The fake moves to `:features:messages:test`.

`MediaViewerPresenter` now pillifies converted HTML captions before linkifying them, matching how captions are rendered in the timeline.

* Rename `TextPillificationHelper` to `TextPillificator`, also fix copyright notice.

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 10:14:03 +02:00
Benoit Marty
5d2778a194 Downscale the avatar received from Element Classic
Element Classic can send the user avatar at its original resolution
(e.g. 6765x6765, ~183MB as ARGB_8888), which makes the login screen
crash with "Canvas: trying to draw too large bitmap".
Downscale the avatar to at most 512px on its longest side when it is
received, and fall back to no avatar if it cannot be read.

Fixes #7986

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-23 09:41:07 +02:00
ganfra
a21ee3b9c4 Merge pull request #7978 from element-hq/feature/fga/multi-select-forward-fixes
Fixes few issues on timeline multi select and forwarding
2026-10-22 16:44:13 +02:00
ganfra
1d5ca7a55c Show a confirmation indicator after forwarding to multiple rooms 2026-10-21 20:45:08 +02:00
ganfra
7e70ab9793 Limit forwarding to 5 rooms 2026-10-21 20:18:32 +02:00
ganfra
bd0aeaef15 Center the selection indicator on the bubble with ConstraintLayout 2026-10-21 20:09:57 +02:00
ganfra
f01d8c91bb Resolve the timeline selection slide in the layout phase 2026-10-21 20:08:36 +02:00
Jorge Martin Espinosa
041d2474e6 Add pillification to the new timeline renderer (#7761)
* Add pillification to AnnotatedStrings too. Improve the regex matching too in `MatrixPatterns`

* Add a click action to mention pills
2026-10-21 17:12:14 +02:00
ganfra
85b63e571a Merge pull request #7963 from element-hq/renovate/maplibre.compose
Update maplibre.compose to v0.20.0
2026-10-20 18:16:29 +02:00
Benoit Marty
463adaac20 Merge pull request #7964 from element-hq/sync-localazy
Sync Strings
2026-10-20 15:32:02 +02:00
ganfra
239e523d3b Adapt location feature to maplibre.compose 0.20.0 API 2026-10-20 14:31:43 +02:00
ganfra
d39249e241 Merge pull request #7961 from element-hq/feature/fga/multi-account-user-status
Render user status of other accounts in settings
2026-10-20 13:53:57 +02:00
bmarty
bfde1cc8a6 Sync Strings from Localazy 2026-10-20 09:46:25 +00:00
Benoit Marty
b3c05db9a1 Merge pull request #7941 from element-hq/feature/bma/iterateNotificationSettings
Iterate on the Notification settings screen to match the design
2026-10-20 11:11:14 +02:00
Benoit Marty
ecfeba8fb9 Merge pull request #7952 from element-hq/feature/bma/duplicateSignIn
Iterate wording on duplicate sign in
2026-10-20 11:07:31 +02:00
ganfra
288c9df8a7 Render user status of other accounts in settings 2026-10-20 11:05:25 +02:00
ganfra
9326b0f0e6 Merge pull request #7951 from element-hq/feature/fga/select-room-suggestions
Add room suggestions when forwarding content
2026-10-16 17:40:18 +02:00
Benoit Marty
b63bdb3515 Ensure previews are rendered in Android Studio. 2026-10-16 16:16:50 +02:00
Benoit Marty
96ce057f48 Update wording of already signed in error. 2026-10-16 16:16:04 +02:00
ganfra
05a587f3a4 Merge pull request #7925 from element-hq/feature/fga/timeline-multi-forward-keep-selection
Keep timeline selection when forwarding is cancelled
2026-10-16 16:05:25 +02:00
ganfra
c08074f632 Add room suggestions when forwarding content 2026-10-16 16:01:32 +02:00
Valere
54f0e03c46 Update element-call-android to 0.1.0-rc.8 and the Rust SDK to 26.10.15
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 22:25:54 +02:00
Valere
555dca38f5 Native call: always ask the core to ring, and ring a DM only once its member has joined
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 22:21:20 +02:00
Benoit Marty
ce9c5765b3 Use parameterized tests for NotificationSettingsView toggles
Replace the pairs of true / false toggle tests and their private helpers by
single tests taking a @TestParameter initialState.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 17:21:04 +02:00
Benoit Marty
764078c6f0 Add missing NotificationSettingsView preview states and rework factories
Add previews for the uninitialized state, the activity / invite / @room switches,
other room notification modes, the message sound dialog with a custom sound and a
single failing push distributor. Group the preview states by screen section.

Each factory now takes exactly the parameters of the object it builds
(aNotificationSettingsState, aValidMatrixSettings, anInvalidMatrixSettings,
anAppSettings, aSoundChannelUiState), and the default message sound display name
matches the default sound.

Fix the push provider test, which needs 2 distributors for the advanced settings
to be displayed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 17:10:09 +02:00
Benoit Marty
4aa9f82761 Improve preview of NotificationSettingsView 2026-10-15 16:59:09 +02:00
ElementBot
4ebcf960ce Update Matrix Rust SDK to 26.10.14-nightly (#7930)
* Update Matrix Rust SDK to 26.10.14-nightly

* `withSearchIndexStore` now uses `key` instead of passphrase

* Fix `RustMatrixClient` now returning `searchIndex` size too

---------

Co-authored-by: Jorge Martín <jorgem@element.io>
2026-10-15 16:47:56 +02:00
Benoit Marty
487787425f Use PreviewWithExtraLargeHeight 2026-10-15 16:27:52 +02:00
Benoit Marty
8b25f88409 Create composable functions to clarify the code. 2026-10-15 16:08:24 +02:00
ganfra
8689961f0d Merge pull request #7936 from element-hq/feature/fga/fix-pill-rendering
Fix mention pill overflowing the end of the line when too wide
2026-10-15 15:16:57 +02:00
Benoit Marty
bfd67862d8 Iterate on Notification settings view to match Figma https://www.figma.com/design/pDlJZGBsri47FNTXMnEdXB/Compound-Android-Templates?node-id=4294-54110
Closes #7870
2026-10-15 15:15:26 +02:00
ganfra
c27bbaa1f6 Fix mention pill overflowing the end of the line when too wide 2026-10-15 12:54:25 +02:00
Benoit Marty
f62f5be16c Merge pull request #7922 from element-hq/feature/bma/otherAccountUnreadCount
Show the unread count of the other accounts in the multi-account section
2026-10-14 21:30:36 +02:00
Benoit Marty
a3fa7aeedd Merge branch 'develop' into feature/bma/otherAccountUnreadCount
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-14 20:15:02 +02:00
ganfra
7fe10b32b0 Merge pull request #7905 from element-hq/feature/fga/timeline-multi-forward-ay11
Improve accessibility of timeline selection mode
2026-10-14 18:56:38 +02:00
ganfra
47f95a422c Remove unused imports in MessagesFlowNode 2026-10-14 18:09:00 +02:00
ganfra
7fb62cd49f Keep timeline selection when forwarding is cancelled 2026-10-14 18:09:00 +02:00
Benoit Marty
9efe0db570 Dismiss the swipe avatar announcement in the app coroutine scope
HomeView sends HomeEvent.DismissSwipeAvatarAnnouncement right before switching account. Switching
account replaces the LoggedInFlow root node, which destroys HomePresenter and cancels its
composition coroutine scope, so the dismissal could be cancelled before the announcement status
was stored. Use the app coroutine scope instead, which survives the account switch.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-14 18:00:56 +02:00
Benoit Marty
e186e62a0e Move RoomListBanner to its own file
The test source set also has a RoomListState.kt file in the same package, so its RoomListStateKt
class was shadowing the one of the main source set, and the toRoomListBanner() functions were
not found when running the tests (NoSuchMethodError).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-14 17:41:07 +02:00
Benoit Marty
56623b8a7f Merge branch 'develop' into feature/bma/swipeAvatarAnnouncement
Account switching is now handled by RootFlowNode, through the onSwitchToAccount callback, instead
of HomeEvent.SwitchToAccount. To keep dismissing the swipe avatar announcement when the user
switches account by swiping their avatar, HomeView now also sends the new
HomeEvent.DismissSwipeAvatarAnnouncement.

Also opt in to ExperimentalCoroutinesApi in the HomePresenter tests using advanceTimeBy.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-14 17:39:24 +02:00
Benoit Marty
2a048a5ee5 Merge pull request #7918 from element-hq/feature/bma/iterateOnAddAccountUi
Add a back button to the server screen and iterate on the identity confirmation screen
2026-10-14 17:16:35 +02:00
Benoit Marty
5a5d631a8d Animate all the banner changes of the room list in a single slot
Replace DismissibleBanner, which used one AnimatedVisibility per banner, by RoomListBannerSlot,
which renders the banner to display with a single AnimatedContent. All the changes are now
animated: dismissing a banner, replacing a banner by the next one, and displaying a new banner.
Previously, when a banner was dismissed, the next banner was displayed without animation.
The dismiss event is now sent immediately, AnimatedContent keeps rendering the dismissed banner
while it animates out.

The banner slot of the LazyColumn now has a min height of 1px. When it was 0px high, the
LazyColumn was considering it as not visible and moved the first visible item to the first room,
so a new banner was added above the visible area of the list.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-14 17:04:32 +02:00
Benoit Marty
c19dfd1db6 Merge pull request #7901 from element-hq/feature/bma/mainThreadBlocking
Avoid blocking the main thread in several places
2026-10-14 16:39:14 +02:00
Benoit Marty
faa7956b93 Fix flaky NotificationSettingsPresenterTest after loading distributors off the main thread
The distributors are now loaded on the IO dispatcher, which was a StandardTestDispatcher in the test, so the initial state could be read before they were loaded. Use an unconfined test dispatcher so that they are loaded deterministically.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-14 14:46:15 +02:00
Benoit Marty
095fda3d9e Add MatrixClient.totalUnreadCountFlow() extension
Extract the logic to observe the total unread count of a MatrixClient, refreshed on each sync
heartbeat, to a shared extension and use it in HomePresenter and PreferencesRootPresenter.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-14 14:31:31 +02:00
Benoit Marty
0e6bc91e9d Merge pull request #7917 from element-hq/feature/bma/switchSessionInRootFlowNode
Handle account switch in RootFlowNode instead of in presenters
2026-10-14 14:19:58 +02:00
Benoit Marty
b37f1d5b71 Show the unread count of the other accounts in the multi-account section
In the settings screen, when the other accounts section is expanded, display a counter with the
total number of unread notifications for each non-active account. The count is read from the
account's MatrixClient (if in memory) and refreshed on its sync heartbeat.

Part of #7769

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-14 12:33:14 +02:00
Benoit Marty
933fc54e12 Iterate on add account onboarding UI. 2026-10-14 12:03:14 +02:00