Commit graph

110 commits

Author SHA1 Message Date
Benoit Marty
1e546335df
Multi accounts - experimental first implementation (#5285)
* Multi account - Do not reset analytics store on sign out.

Else when 1 of many accounts is removed, the analytics opt in screen is displayed again.

* Multi accounts - first implementation.

* Multi accounts - Prevent user from logging twice with the same account

* Multi accounts - ignore automatic GoBack in case of error.

* Multi accounts - update first view when adding an account.

* Rename method storeData to addSession.

* Multi accounts - handle account switch when coming from a notification

* Multi accounts - handle login link when there is already an account.

* Multi accounts - handle click on push history for not current account.

* Multi accounts - improve layout and add preview.

* Add accountselect modules

* Multi accounts - incoming share with account selection

* Multi accounts - check the feature flag before allowing login using login link.

* Multi accounts - swipe on account icon

* Cleanup

* Multi accounts - fix other implementation of SessionStore

* Multi accounts - fix PreferencesRootPresenterTest

* Multi accounts - Add test on AccountSelectPresenter

* Multi accounts - Fix test on HomePresenter - WIP

* Update database to be able to sort accounts by creation date.

* Add unit test on takeCurrentUserWithNeighbors

* Fix test and improve code.

* Add exception

* Multi accounts - handle permalink

* Code quality

* Multi accounts - localization

* Fix issue after rebase on develop

* Fix issue after rebase on develop

* Fix tests

* Fix tests

* Fix tests

* Fix tests

* Update Multi accounts flag details.

* Add missing test on DatabaseSessionStore

* Add missing preview on LoginModeView

* Remove dead code.

* Add missing preview on PushHistoryView

* Document API.

* Rename API and update test.

* Remove MatrixAuthenticationService.loggedInStateFlow()

* Update screenshots

* Remove unused import

* Add exception

* Fix compilation issue after rebase on develop.

* Update screenshots

* Fix test

* Avoid calling getLatestSession() twice

* Rename `matrixUserAndNeighbors` to `currentUserAndNeighbors`

* Extract code to its own class.

* Add comment to clarify the code.

* Init current user profile with what we now have in the database.

It allows having the cached data (user display name and avatar) when starting the application when no network is available.

* Let the RustMatrixClient update the profile in the session database

* Fix test.

* When logging out from Pin code screen, logout from all the sessions.

tom

* Make PushData.clientSecret mandatory.
Also do not restore the last session as a fallback, it can lead to error in a multi account context, or even when a ghost pusher send a Push.

* Change test in RustMatrixAuthenticationServiceTest

* Do not use MatrixAuthenticationService in RootFlowNode, only use SessionStore

* Remove MatrixAuthenticationService.getLatestSessionId()

* Fix compilation issue after merging develop

* Add test on DefaultAccountSelectEntryPoint

* Fix compilation issue after merging develop

* Introduce LoggedInAccountSwitcherNode, to improve animation when switching between accounts.

* Rename Node to follow naming convention.

* Fix navigation issue after login.

* Remove unused import

* Revert "Fix navigation issue after login."

This reverts commit e409630856d7a7e741548016d7afe174ff1b40f7.

* Revert "Rename Node to follow naming convention."

This reverts commit 883b1f37c7207512d9f6605749977ad9045846a1.

* Revert "Introduce LoggedInAccountSwitcherNode, to improve animation when switching between accounts."

This reverts commit 9c698ff8152aceb5fd2b8b5ab5f609d28de64d24.

* Metro now have `@AssistedInject`.

* Update screenshots

* Introduce DelegateTransitionHandler and use it in RootFlowNode

---------

Co-authored-by: ElementBot <android@element.io>
Co-authored-by: ganfra <francoisg@element.io>
2025-09-26 15:45:06 +02:00
Benoit Marty
cbe2f0684b Add Konsist test. 2025-09-16 10:50:34 +02:00
Richard van der Hoff
120c30e076
Show progress dialog while we are sending invites in a room (#5342)
* Add `InvitePeopleState.sendInvitesAction`

Keep track of the progress on sending invites with a new state property.

* Keep `RoomInviteMembersView` open until invites are sent

* Sync strings from localazy

* extend `ProgressDialog` to support custom content

For my current design, a simple text element is insufficient. I extend
`ProgressDialog` to give more flexibility over the content of the dialog.

* Show progress dialog while invites are being sent

* Add new ProgressDialog previews to the naming exceptions list

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
Co-authored-by: Jorge Martín <jorgem@element.io>
2025-09-12 10:35:37 +00:00
Benoit Marty
cbb55fe1ae Fix typo in annotation name. 2025-08-25 11:58:32 +02:00
Benoit Marty
1d7e7e19d9 Test previews with a11y details and add a first example with HomeViewA11yPreview. 2025-08-25 11:10:23 +02:00
Benoit Marty
f11a32a96f Fix test. 2025-08-20 17:51:58 +02:00
Jorge Martin Espinosa
35928e3630
Threads - first iteration (#5165)
* Initial threads support: parse `ThreadSummary`.

Replace several `isThreaded` values with `EventThreadInfo`, which contains the info about the event either being the root of a thread or part of it.

* Add `Threaded` timeline mode

* Add a `liveTimeline` parameter to `TimelineController`'s  constructor. This way we can customise which timeline will be used as the 'live' one. Also add `@LiveTimeline` DI qualifier for the actual live timeline of the room.

* Create `ThreadedMessagesNode`. Allow opening a thread in a separate screen.

* Add the callbacks for the list menu actions - even if they're the wrong ones and will send the data to the room instead

* Send attachments and location in threads

* Fix polls in threads, add support for sending voice messages in threads

* Display thread summaries only when the feature flag is enabled

* Use 'Reply' instead of 'Reply in thread' when in threaded timeline mode

* Remove incorrect usage of `Timeline` in `MessageComposerPresenter`. This led to replies to threaded events not appearing as actual replies.

---------

Co-authored-by: ElementBot <android@element.io>
2025-08-19 13:35:48 +00:00
Benoit Marty
9d8c573365 Allow preview function name to end with RtlPreview 2025-08-18 17:16:48 +02:00
Benoit Marty
84130da367 Code cleanup 2025-08-11 14:53:40 +02:00
Benoit Marty
3be08fdb0c Add Konsist test to check that files do not have double license header.
It seems that sometimes Android Studio is doing this mistake.
2025-08-11 10:36:40 +02:00
Jorge Martin Espinosa
1a335698c0
Force last owner of a room to pass ownership when leaving (#5094)
* Move `ChangeRoles*` classes to their own module so they can be shared

* Hook the change roles screen to the leave room action, add confirmation dialogs

* Use enum instead of sealed interface for `ChangeRoomMemberRolesListType`

* Try to improve communications between nodes

* refactor (leave room) : makes sure to expose only necessary code from api module

* Add `:libraries:previewutils` module to share some test fixtures used for UI previews

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
Co-authored-by: ganfra <francoisg@matrix.org>
2025-08-05 17:24:14 +02:00
Benoit Marty
b547b6a735 Cleanup 2025-07-11 16:19:11 +02:00
Benoit Marty
4c42b3c013 Add preview for mentions in the context of the timeline. 2025-07-08 18:49:22 +02:00
Benoit Marty
4688b15c06 Fix issue after rebase. 2025-07-07 17:24:58 +02:00
Benoit Marty
1782e6d30b Apply gradient to focused Event. 2025-07-07 15:03:30 +02:00
Benoit Marty
b3af5509c7 Improve Konsist test. 2025-07-07 14:49:09 +02:00
Benoit Marty
2b8c4ba079 Remove bloom effect and replace by linear gradient
Use semantic colors.
2025-07-07 14:49:07 +02:00
Benoit Marty
f3eb0e69cc Fix wrong TopAppBar usage 2025-07-04 09:43:30 +02:00
Benoit Marty
390e5cf20d
Rename classes overriding classes from the FFI layer. (#4817)
* Rename classes overriding classes from the FFI layer.

* For other Konsist test.
2025-06-04 16:13:57 +02:00
Benoit Marty
a230b83e99
Remember flows (#4533)
* Add Konsist test to ensure that the result of a function returning a flow is remembered.

* Remember flows before they are collected by state.

* Fix compilation issue

* Make isOnline a val.

* Make selectedUsers() a val.

* Make flow() a val.

* Make getUserConsent(), didAskUserConsent() and getAnalyticsId() some val.

* Remove Timeline.paginationStatus() and replace by direct access to the underlined flow.

* Simplify test

* userConsentFlow must be initialized before because it's used in observeUserConsent

* Fix test compilation
2025-04-04 16:50:43 +02:00
Benoit Marty
670af86e8b
Replace OutlinedTextField by our TextField (#4521)
* Let TextFieldListItem take the entire width.

* Add unit test to detect usage of OutlinedTextField.

* Use TextField instead of OutlinedTextField

* Remove unnecessary opt in to ExperimentalFoundationApi

* Use TextField instead of OutlinedTextField

* Fix compilation issue.

* Update screenshots

* ListDialog: add space between items.

* Update screenshots

* Set applyPaddingToContents to true by default.

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2025-04-02 14:04:07 +00:00
Benoit Marty
1fdb590ece
Improve TextFieldDialog (#4512)
* Extract TextFieldDialog to its own file (no other change).

* Add TextFieldDialogPreview

Enhance TextFieldDialog

* Let RoomMembersModerationView use TextFieldDialog

* Update screenshots

* Konsist.

* Add modifier parameter.

---------

Co-authored-by: ElementBot <android@element.io>
2025-04-02 10:05:56 +02:00
Jorge Martin Espinosa
b9e286d9d6
Add 'unencrypted room' badges and labels (#4445)
* Add 'unencrypted room' icon and label to composer

* Modify colors for room details screen info labels

* Add exception to Konsist's preview check

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2025-03-25 11:26:25 +00:00
Jorge Martin Espinosa
a06619780c
Make verification screens scrollable and emoji labels multiline (#4449)
* Make self verification screens scrollable

* Remove unused fields from `VerificationEmoji`

* Make only the header and content scroll in `HeaderFooterPage`.

* Use the right 'emoji' icon in both flows (`ReactionSolid`)

---------

Co-authored-by: ElementBot <android@element.io>
2025-03-21 12:18:38 +01:00
Benoit Marty
74b7e7f4b6 Fix issues reported by Konsist. 2025-03-18 11:35:11 +01:00
Jorge Martin Espinosa
fd50ce4daf
Add user verification and verification state violation badges (#4392)
* Move `observeRoomMemberIdentityStateChange` and associated classes to `libs:matrixui` module so they can be reused

* Add `EncryptionService.getUserIdentity` method to retrieve not only if the user is verified or not, but in which state they are

* Fix `IdentityChangePresenter` after the previous changes

* Fix `withFakeLifecycleOwner` and add `testWithLifecycleOwner` helper

* Display verified badge in DM top app bar when possible

* Display a verification violation warning icon next to the 'People' item in room details screen

* Display either a verified badge or a verification violation warning icon next to the room members in the room member list screen

* Display either a verified badge or a verification violation warning and withdraw verification button in the room member profile.

Generic user profiles won't display verification state anymore since we can't easily track changes in it.

* Add preview for room member details screen with verification violation identity state

* Add verified and violation badge to the `Profile` list item in room details screen

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2025-03-12 12:22:53 +01:00
Benoit Marty
37fc68c6ab Add Konsist exception for FocusedEventPreview 2025-03-07 18:48:04 +01:00
Benoit Marty
0f888ae018 Avoid test from failing when the enterprise modules are not present. 2025-02-24 09:32:40 +01:00
Benoit Marty
e7de056d47 Fix Konsist test.
New enterprise module was not correctly detected.
Also ensure that the files are correctly found.
2025-02-20 18:41:11 +01:00
Benoit Marty
822efe8baa Cleanup 2025-01-28 11:33:20 +01:00
Benoit Marty
6c904a403c Add exception for Konsist 2025-01-22 16:24:28 +01:00
Benoit Marty
97f3be3dc5 Apply dual licenses: AGPL + Element Commercial to file headers.
2 replace all actions have been performed:
- "SPDX-License-Identifier: AGPL-3.0-only" to "SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial"
- "Please see LICENSE in the repository root for full details." to "Please see LICENSE files in the repository root for full details."
2025-01-07 10:05:04 +01:00
Benoit Marty
c048cd4ec5 Fix quality checks 2025-01-02 08:16:06 +01:00
Benoit Marty
75e8ec6e7c Add inline voice player to the files gallery 2024-12-16 11:03:44 +01:00
Benoit Marty
a84ca7ee8e Fix API break in Sealed interface used in Composable MUST be Immutable or Stable 2024-11-26 11:39:33 +01:00
Benoit Marty
e261f6f36e Fix API break in Fake classes must be named using Fake and the interface it fakes
It seems that the workaround is not necessary anymore.
2024-11-26 11:09:38 +01:00
Benoit Marty
878bd29b67 Ensure Fake classes must be named using Fake and the interface it fakes is detecting error by adding failing cases. 2024-11-26 10:48:01 +01:00
Benoit Marty
c433bab0a8 Ensure Sealed interface used in Composable MUST be Immutable or Stable is detecting error by adding a failing case. 2024-11-26 10:24:03 +01:00
Benoit Marty
81d2e0d750
Merge pull request #3906 from element-hq/feature/bma/minSizeForHiddenMedia
Min size for hidden media
2024-11-21 21:06:19 +01:00
Benoit Marty
aa1948ac44 Fix test and rename class to follow naming convention for PreviewParameterProvider. 2024-11-21 15:18:56 +01:00
Benoit Marty
4a5259f1d9 Fix tests 2024-11-21 09:45:27 +01:00
Benoit Marty
0dbfab99d1 Fix Konsist test failing 2024-11-07 20:40:19 +01:00
Benoit Marty
223eae9602 Send caption with media 2024-11-04 14:24:39 +01:00
Valere
9fb68fc58e
Bump rust-sdk version to rust-sdk 0.2.57 (#3735)
* Bump rust-sdk version to rust-sdk 0.2.57

* rust sdk update: Support persisted WedgeQueueError

* Trust & Decoration | Support new expected UTD causes

* Room Subscribtion settings not needed anymore (see https://github.com/matrix-org/matrix-rust-sdk/pull/4159)

* File/Attachement upload: update to support `storeInCache`

* feat(knock): update API to use reason and serverNames

* Add another `Konsist` exception

* Update screenshots

---------

Co-authored-by: Jorge Martín <jorgem@element.io>
Co-authored-by: ElementBot <android@element.io>
Co-authored-by: Benoit Marty <benoit@matrix.org>
2024-10-24 16:45:16 +02:00
Benoit Marty
95d95d4f89
Merge pull request #3718 from element-hq/feature/bma/verifiedUserBadge
Verified user badge
2024-10-23 14:20:23 +02:00
Benoit Marty
daaaf92a87 Let IconTitleSubtitleMolecule use BigIcon. 2024-10-22 11:53:30 +02:00
Benoit Marty
77b87af52a Move RoomBadge to atomic package and rename to MatrixBadge 2024-10-22 10:18:42 +02:00
Benoit Marty
576658988f Improve test Classes extending 'PreviewParameterProvider' name MUST end with 'Provider' and MUST contain provided class name 2024-10-16 11:17:45 +02:00
Benoit Marty
8c018c4fda Fix konsist test. 2024-10-08 11:13:56 +02:00
Benoit Marty
ac481a59de Konsist: Ensure that Presenter do not depend on other presenters. 2024-10-07 17:45:16 +02:00