Commit Graph

4675 Commits

Author SHA1 Message Date
Jorge Martín
2907cef47e Some cleanup:
- Remove unnecessary `GlobalScope`.
- Rename `Component` to `Graph`, `DaggerComponentOwner` to `DependencyInjectionGraphOwner`.
- Rename component builders to factories, where necessary.
2025-09-04 16:49:21 +02:00
Jorge Martín
298fda8bcf Fix push notification bindings 2025-09-04 16:49:21 +02:00
Jorge Martín
dca1c5b516 Remove dagger and anvil dependencies, try to simplify gradle build scripts a bit 2025-09-04 16:49:21 +02:00
Jorge Martín
e06bacbff3 Redo DI gradle setup code 2025-09-04 16:49:20 +02:00
Jorge Martín
fc3153bd26 Fix lint issues and restore commented out code 2025-09-04 16:49:18 +02:00
Jorge Martín
92a4b8b66b Start migrating Anvil KSP to Metro 2025-09-04 16:48:34 +02:00
Jorge Martin Espinosa
2eacce47c0 Reload member list after moderation actions (#5268)
* Reload member list after moderation actions

The previous `runActionAndWaitForMembershipChange` logic wasn't really doing anything, as the modified flow was never used.

* Make sure we always set the value in the member list state flow, even if the underlying coroutine scope is no longer there.

With `emit`, the `Ready` state was not emitted if the member list was loaded way too fast.
2025-09-04 12:56:46 +00:00
Benoit Marty
9daadb384e Do not let default enterprise impl module be implemented for enterprise build. 2025-09-04 13:33:37 +02:00
renovate[bot]
b3e7e7b2c3 Update dependency io.element.android:emojibase-bindings to v1.4.3 (#5250)
* Update dependency io.element.android:emojibase-bindings to v1.4.3

* Fix breaks in API

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
2025-09-02 09:20:21 +02:00
Benoit Marty
280f9570ec Refactor: Move InMemorySessionStore to test module (#5252)
* Refactor: Move InMemorySessionStore to test module

- Delete `libraries/session-storage/impl-memory` module
- Move `InMemorySessionStore.kt` to `libraries/session-storage/test`

* Cleanup tests.

* Fix error.
2025-09-01 17:29:43 +02:00
Jorge Martin Espinosa
f5b5bb39ba [a11y] Add click action to the message bottom sheet handle (#5228) 2025-09-01 15:27:40 +02:00
Benoit Marty
a00623e490 Cleanup tests. 2025-09-01 15:03:41 +02:00
Benoit Marty
5f223f3c89 Refactor: Move InMemorySessionStore to test module
- Delete `libraries/session-storage/impl-memory` module
- Move `InMemorySessionStore.kt` to `libraries/session-storage/test`
2025-09-01 14:47:42 +02:00
ElementBot
a43b907275 Sync Strings from Localazy (#5249)
Co-authored-by: bmarty <3940906+bmarty@users.noreply.github.com>
2025-09-01 12:44:49 +02:00
Jorge Martin Espinosa
ace078f12e [a11y] Add content descriptions to room list item indicators (#5236)
* [a11y] Add content descriptions to room list item indicators. These can now be read aloud as 'ongoing call', 'new messages', 'new mentions'.

* Add `contentDescription` to `UnreadIndicatorAtom` as an optional value

* Make the 'ongoing call', 'new messages', etc. indicators be read aloud before the latest event of the room summary

---------

Co-authored-by: ElementBot <android@element.io>
2025-08-27 17:14:59 +02:00
Benoit Marty
516ba08f9c Remove LoginUserStory.
No that we do not have the WaitList screen anymore, this interface and implementation are useless.
2025-08-27 15:20:20 +02:00
Benoit Marty
299e1c2c6d Rename test. 2025-08-26 10:24:48 +02:00
Benoit Marty
62ef4db2e8 Add unit test on DefaultOnBoardingLogoResIdProvider 2025-08-26 09:41:10 +02:00
Benoit Marty
dbc511ba1b Rename custom_logo to onboarding_logo 2025-08-26 09:36:26 +02:00
Jorge Martin Espinosa
d9dde270b2 Add extra logs for sending media (#5218)
* Add extra logs for sending media

We have some issues with stuck media uploads that could use some logs to understand where the process gets stuck.

* Fix mocks for test
2025-08-26 07:02:15 +00:00
Benoit Marty
20979b9824 Merge pull request #5217 from element-hq/bma/customSplash
Custom logo on on boarding screen.
2025-08-25 18:01:37 +02:00
Benoit Marty
ce20a01ac0 Add a way to customize the on boarding logo. 2025-08-25 14:47:41 +02:00
Benoit Marty
61e2ae2606 Merge pull request #5214 from element-hq/feature/bma/a11yScreenshotTest
Introduce a11y screenshot test
2025-08-25 12:23:02 +02:00
Benoit Marty
14ff83b5bb Merge pull request #5215 from element-hq/feature/bma/cleanupInject
AnalyticsOptInStateProvider does not need to have an injected constructor
2025-08-25 12:19:07 +02:00
Benoit Marty
0e09617a8d AnalyticsOptInStateProvider does not need to have an injected constructor. 2025-08-25 12:08:15 +02:00
Benoit Marty
2b42271615 Split module deeplink to api and impl. 2025-08-25 11:36:42 +02:00
Benoit Marty
ef230e3bda Remove dependency to Anvil from modules that do not use it. 2025-08-25 11:36:42 +02:00
ElementBot
2ec3053d77 Sync Strings from Localazy (#5211)
Co-authored-by: bmarty <3940906+bmarty@users.noreply.github.com>
2025-08-25 11:15:38 +02:00
Benoit Marty
c13d9a935b Test previews with a11y details and add a first example with HomeViewA11yPreview. 2025-08-25 11:10:23 +02:00
Benoit Marty
4653164572 Merge pull request #5207 from element-hq/feature/bma/spaceInfoUi
Add UI components for spaces.
2025-08-23 16:16:39 +02:00
Benoit Marty
ec53561de0 Let JoinRule and AllowRule be Immutable. 2025-08-22 16:13:55 +02:00
Jorge Martin Espinosa
e9f065c479 Allow replying to any remote message in a thread (#5201)
* Allow replying to any remote message in a thread.

This will open the thread screen based on the selected event:

- If it was already part of a thread, it will open that thread.
- Otherwise, it'll open the thread timeline screen so you can start a thread from the event.

* Add the feature flag to decide which action to perform. Also, rename the feature flag to something easier to understand.

* Display the reply in thread action based on the feature flag too

---------

Co-authored-by: ElementBot <android@element.io>
2025-08-22 16:07:13 +02:00
Jorge Martin Espinosa
2f2e886e9f Handle preference stores corruption by clearing them (#5086)
* Handle preference stores corruption by clearing them:
    - Use the centralised `PreferenceDataStoreFactory` instead of `preferences by`.
    - Add `DefaultPreferencesCorruptionHandlerFactory.replaceWithEmpty` to its `create(name)` method so all preference stores are cleared if they're corrupted.

* Add detekt rule to make sure we use `PreferenceDataStoreFactory` instead of `by preferencesDataStore`

* Remove `@SingleIn` annotations as the annotated class no longer have to be singletons
2025-08-22 06:59:06 +00:00
Benoit Marty
20e2cd0251 Rename RoomPreviewMembersCountMolecule to MembersCountMolecule 2025-08-20 17:13:42 +02:00
Benoit Marty
333b1c8a48 Move AvatarRow to designsystem module, because it will be used by spaces. 2025-08-20 15:56:46 +02:00
Jorge Martin Espinosa
59a8aaebff Add shortcut suggestions for rooms, remove then when leaving (#5180)
* Report shortcut usage for outgoing messages

This patch adds support for creating and pushing dynamic
long-lived shortcuts for outgoing messages. This together
with an existing reference to the roomId used by the
shortcuts as an identifer allows conversations to be
prioritized.

See https://developer.android.com/training/sharing/direct-share-targets#report-usage-outgoing

* Simplify how to get the other user in a DM room

* Add initial avatar icons to shortcuts

* Remove room shortcuts when they're no longer joined

* Try using API 33 for the new tests. They worked locally with API 30, so it's weird the CI asks for a higher API version.

* Add observers for the pin code and session logout states. With this we can prevent new shortcuts from being created and remove existing ones when needed.

* Wrap all calls to `ShortcutManagerCompat` with `runCatchingExceptions` to avoid crashes

* Make `DefaultNotificationConversationService` a singleton.

---------

Co-authored-by: networkException <git@nwex.de>
Co-authored-by: ElementBot <android@element.io>
2025-08-19 16:02:51 +02:00
Jorge Martin Espinosa
285066c206 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
8675bf5215 Merge pull request #5185 from element-hq/feature/bma/invitePoepleUi
Iterate on invite people UI
2025-08-19 11:12:45 +02:00
Jorge Martin Espinosa
5feb7a99a9 Fix bitrate value used for video transcoding (#5183)
* Fix bitrate value used for video transcoding:

It should be 1000 times what it is now. The video size estimation was wrong since the retrieved duration value was in milliseconds, not seconds.

* Use `Duration` as the result type for `getDuration`
2025-08-18 21:12:11 +00:00
Benoit Marty
725b1a8443 [UI] Iterate on user invite view. 2025-08-18 17:16:06 +02:00
renovate[bot]
aac9642159 Update dependency org.matrix.rustcomponents:sdk-android to v25.8.18 (#5182)
* Update dependency org.matrix.rustcomponents:sdk-android to v25.8.18

* Fix broken API changes:
- The send queue usage is now mandatory.
- The media upload progress now comes back in the send queue state (this still hasn't been applied to the UI in the timeline).

* Update screenshots
---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
Co-authored-by: ElementBot <android@element.io>
2025-08-18 16:41:14 +02:00
ElementBot
a4cee52815 Sync Strings from Localazy (#5178)
Co-authored-by: bmarty <3940906+bmarty@users.noreply.github.com>
2025-08-18 11:09:27 +02:00
Benoit Marty
8e37d16f9f Merge pull request #5166 from element-hq/feature/fga/create_room_flow_rework
Create room flow rework
2025-08-18 09:38:28 +02:00
Benoit Marty
16acfa28d7 Avoid using runBlocking in Node resolve function. 2025-08-14 16:53:35 +02:00
Benoit Marty
7559385439 Revert "Provide default value for modifier."
This reverts commit ff93a82b06.
2025-08-14 16:05:50 +02:00
Benoit Marty
e31f6cb0b6 Use SessionCoroutineScope here. 2025-08-14 14:41:51 +02:00
Benoit Marty
ff93a82b06 Provide default value for modifier. 2025-08-14 14:39:00 +02:00
Benoit Marty
0be9e4cd66 Use string from Localazy. 2025-08-14 11:46:28 +02:00
Benoit Marty
ae00c28c0d iterate on the isSelected value. Let the UI decide how to render. 2025-08-14 11:46:26 +02:00
Benoit Marty
e74fcde43e Remove default values for InvitableUser's constructor 2025-08-14 09:10:22 +02:00