Commit Graph

336 Commits

Author SHA1 Message Date
jmartinesp dfccde93c6 Sync Strings from Localazy 2026-09-02 10:07:17 +00:00
Benoit Marty d3ab1ce43c Merge pull request #7562 from hayaksi1/fix/1548-dm-preview-sender
Drop the sender's name from the room list preview of two-person rooms
2026-08-27 11:19:32 +02:00
Benoit Marty c9da3ab490 Merge pull request #7520 from element-hq/feature/bma/updateFonts
Update fonts on the headings
2026-08-26 09:51:50 +02:00
hayaksi1 65c2cd8a79 Drop the sender's name from the room list preview of two-person rooms
The room list preview prefixes the sender's name unless the room is a
direct message. A room that was created as a group and later converted to
a direct message is not marked as one by the server, so its preview kept
naming the only other person in it on every message, while iOS did not.

The prefix now depends on how many people are actually in the room rather
than on the direct message flag, which is the behaviour asked for in the
issue: no name while only two people can be talking, the name back as
soon as a third joins.

Part of #1548
2026-08-25 20:55:38 +03:00
Benoit Marty 0634cadc9c Ensure translation of "Chats" does not render in big font when displayed on 2 lines. They can add the end be displayed on one line using the small font. 2026-08-25 11:54:15 +02:00
Benoit Marty 0a9a25d940 Update Konsist test and fix existing issue. 2026-08-25 11:21:10 +02:00
Benoit Marty 217ccb75ed BatteryOptimizationEvents -> BatteryOptimizationEvent 2026-08-25 10:32:34 +02:00
Benoit Marty cb8c462bad FullScreenIntentPermissionsEvents -> FullScreenIntentPermissionsEvent 2026-08-25 10:31:51 +02:00
Benoit Marty 47f4e136dd Use fontHeadingMdBold for empty space title. 2026-08-25 10:22:31 +02:00
Benoit Marty 91aa9ce24f AcceptDeclineInviteEvents -> AcceptDeclineInviteEvent 2026-08-25 09:54:32 +02:00
Benoit Marty fe57cfa991 HomeSpacesEvents -> HomeSpacesEvent 2026-08-25 09:53:54 +02:00
Benoit Marty 9586478039 Updates to text sizes in Chats header and Space hero
Closes #7476
2026-08-24 18:58:54 +02:00
Benoit Marty a3a0fdd0e9 Merge branch 'develop' into fix/4657-preview-param-suffix 2026-08-24 14:08:52 +02:00
Benoit Marty 7d70bd32e2 Add missing annotation 2026-08-24 12:00:32 +02:00
Benoit Marty e6116d5840 Move all binding containers to a di package and normalize their method names
Every @BindingContainer now lives in a di subpackage, in a file named after
it. Containers that were declared inside a shared file (SimplePlayer.kt,
LockScreenConfig.kt, VoiceMessagePresenter.kt, TimelineItemPresenterFactories.kt,
MediaItemPresenterFactories.kt) are extracted into their own file.

Method names are made consistent too:
- @Binds functions are named bind<ConcreteParameterType>, fixing three that
  named something else (notably RoomAliasResolverBindingContainer, whose
  provider was still called providesJoinRoomPresenterFactory).
- @Provides functions are named after what they provide, and all use the
  provides prefix rather than a mix of provide and provides.

ANDROID_KEYSTORE moves back to the cryptography impl package, next to
KeyStoreSecretKeyRepository which uses it; it is not DI specific and would
otherwise be unreachable from there.

No behaviour change: Metro discovers containers via @ContributesTo and does
not care about method names, so the only call site to follow was in
DefaultVoiceRecorderTest.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-24 11:38:11 +02:00
Benoit Marty 1018d26211 Rename all @BindingContainer types with a BindingContainer suffix
Metro's @BindingContainer replaced Dagger's @Module, but the declarations
kept the old Module suffix. Rename them (and their dedicated files) so the
type name matches the annotation, matching UserStatusBindingContainer which
already followed this convention.

No behaviour change: Metro discovers containers via @ContributesTo, so there
were only two call sites to update, both in tests.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-24 10:08:54 +02:00
hayaksi1 23005317cf Merge develop into the PreviewParam rename
The 174 commits develop gained since this branch was cut touch preview data
in three ways, and each is resolved so the flipped konsist rule still holds
across the merged tree.

Two screens the branch had renamed were deleted upstream by "Remove the
account provider search screen and homeserver resolver": the
changeaccountprovider and searchaccountprovider packages. Their deletion
wins, so ChangeAccountProviderStatePreviewParam, SearchAccountProviderStatePreviewParam
and the two views that used them go with them rather than coming back
under the new name.

Two preview classes develop added still carried the old suffix and are
renamed here, along with the `@PreviewParameter` reference in each view:
GlobalSearchStateProvider -> GlobalSearchStatePreviewParam and
SendFailureDialogStateProvider -> SendFailureDialogStatePreviewParam.

Everything else merged textually. No production class extending
PreviewParameterProvider is left with a `Provider` name, and no reference
to any of the 194 renamed names survives outside the CHANGES.md entry that
records a past pull request title.
2026-08-24 10:55:40 +03:00
Jorge Martín b52ed580b1 Add more tests 2026-08-21 16:19:36 +02:00
Jorge Martín e3b72446cc Fix displaying the 'ready to search' state for message search after deleting the query 2026-08-21 16:10:44 +02:00
Jorge Martín 0a624c1550 Fix empty state for room search 2026-08-21 15:51:39 +02:00
Benoit Marty 9935f91bc7 Fix wrong binding 2026-08-21 15:42:20 +02:00
Jorge Martín c392737765 Try fixing the empty state for the room list search in global search 2026-08-21 15:16:26 +02:00
Jorge Martín 679d97cf4f Fix konsist issue about presenters not depending in other concrete presenter implementations 2026-08-21 15:15:48 +02:00
Jorge Martín e4891abf45 GlobalSearchPresenter doesn't need @ContributesBinding 2026-08-21 14:36:10 +02:00
Jorge Martín 76b6e5857f Fix lint issues 2026-08-21 13:03:21 +02:00
Jorge Martín b29a4c06d7 Improve previews 2026-08-21 12:43:09 +02:00
Jorge Martín 3a946475f7 Fix search results never displaying an empty state
Use the pagination state to understand when a search finished with no results
2026-08-21 12:37:47 +02:00
Jorge Martín 9a2d23c8a1 Remove unnecessary GlobalSearchPresenter.Factory 2026-08-21 12:07:38 +02:00
Jorge Martín 8bdce7cfd6 Add tests 2026-08-20 14:18:06 +02:00
Jorge Martín 3ca5081f33 Integrate the new screen with the existing home screen, display it only when the search feature flag is enabled 2026-08-20 13:56:29 +02:00
Jorge Martín be2909bca2 Add a global search screen, which reads from both the RoomListSearchDataSource for the rooms search and MessageSearchService for the message search
Note the designs and texts of this screen are temporary.
2026-08-20 13:55:45 +02:00
hayyaksi 6bd841d838 Close the invite screen once the invite has been declined (#7440)
Declining an invite from the full screen invite left the user on that
same screen, so they had to press back themselves to get to the room
list. Both decline paths are affected: the plain decline handled by
AcceptDeclineInviteView, and the decline and block sub screen, which
navigated up into the join room flow instead of out of it.

Navigate up from the join room flow on a successful decline, and give
DeclineInviteAndBlockEntryPoint a callback so the sub screen can report
a successful decline separately from a back press. The room list flow
supplies the same callback, popping the sub screen once the invite has
been declined.
2026-08-19 12:52:11 +02:00
hayaksi1 03c330ee07 Rename PreviewParameterProvider subclasses to the PreviewParam suffix
The `Provider` suffix reads as a dependency provider rather than as preview
data, and it collides with the real providers in the codebase — `StringProvider`,
`PickerProvider`, the login feature's `AccountProvider` — so the name says
nothing about which of the two a class is. `PreviewParam` says it.

195 classes are renamed, along with the 185 files named after them, the konsist
rule that enforces the convention, the presentation-class file templates and the
onboarding documentation.

This cannot be split. `Konsist.scopeFromProduction()` scans the whole project, so
flipping the assertion before every class has moved leaves the rule red, and a
rule that accepted either suffix during a transition would be exactly the kind of
compatibility layer this convention change is meant to remove.

Two judgement calls in the rule itself. The `name.endsWith("PreviewProvider")`
exclusion is dropped: its only job was to reject a redundant `Preview` before
`Provider`, and the new suffix already contains it; no class currently ends with
`PreviewProvider`, so removing it changes nothing today. And
`EditableAvatarViewUriProvider` is renamed rather than deleted from the exclusion
list even though no such class exists in this repository, since it presumably
comes from the modules overlaid for the enterprise build.

Nothing keyed off the old suffix: no snapshot filename contains a provider class
name, so no Paparazzi image changes, and the Kover variants match on `*Presenter`,
`*State` and `*ViewKt`, so coverage bounds are unaffected.
2026-08-17 17:40:33 +03:00
Benoit Marty a740423343 Sync strings. 2026-08-17 11:34:52 +02:00
Benoit Marty 9116b8a776 Merge pull request #7342 from hayaksi1/fix/5383-incompatible-room-list-filters
Ignore a room list filter that is incompatible with an already selected one
2026-08-11 16:21:51 +02:00
ganfra 6d6ca97899 Merge pull request #7328 from element-hq/feature/fga/user_status_last_pieces
User status last pieces
2026-08-11 11:11:12 +02:00
bmarty 17c5d7db59 Sync Strings from Localazy 2026-08-11 09:27:29 +02:00
hayaksi1 8943c4e724 Drop the comments from the filter selection guard
Review feedback: the guard and the test name already say what the check
is for, so the narration was redundant.
2026-08-09 14:46:13 +03:00
hayaksi1 e8ca16b74f Ignore a room list filter that is incompatible with an already selected one
Some room list filters are mutually exclusive, and the UI expresses that
by hiding the incompatible chips rather than disabling them. Nothing
enforced the rule on the write path, so two chips tapped in the same
frame, before the list could recompose, both applied. The room list then
matched nothing while the offending chip was hidden, leaving no way to
see or undo what was filtering the rooms.

DefaultFilterSelectionStrategy.select() now ignores a filter that is
incompatible with one already selected, so the same table buildFilters()
uses to hide chips also governs the selection itself. The currently
applied filters win and the late tap is dropped, which matches the
existing design where an incompatible chip is already on its way out of
the UI when it is tapped.

toggle(), deselect(), clear() and the FilterSelectionStrategy interface
are unchanged.

Relates to https://github.com/element-hq/element-x-android/issues/5383
2026-08-09 01:59:25 +03:00
ganfra 14c0944d22 Merge branch 'develop' into feature/fga/user_status_last_pieces 2026-08-07 11:35:19 +02:00
ganfra 8d2686d1a9 Merge branch 'develop' into feature/fga/user_status_last_pieces 2026-08-07 10:12:32 +02:00
Benoit Marty d1cf1aa09f Fix deprecation warning on androidx.compose.material3.ListItem 2026-08-06 18:35:17 +02:00
Benoit Marty 7adaeca7c7 Fix overlap issue.
Fixes #7327
2026-08-06 16:17:17 +02:00
ganfra 93ca5374d6 Add status emoji badge to current user avatar in home top bar 2026-08-05 16:14:59 +02: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
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