Commit Graph

4161 Commits

Author SHA1 Message Date
Benoit Marty 2ee4b4fdcb Move AvatarRow to designsystem module, because it will be used by spaces. 2025-08-20 15:56:46 +02:00
Benoit Marty d31ada947e Add UI component OrganizationHeader
Ref: https://www.figma.com/design/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?node-id=3643-2048&m=dev
2025-08-20 15:41:22 +02:00
Benoit Marty 3391cfb7ef Add UI component EditableOrgAvatar
Ref: https://www.figma.com/design/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?node-id=3643-2678&m=dev
2025-08-20 15:17:53 +02:00
Jorge Martin Espinosa 9bc2c4a776 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 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 cc10ba41fd Merge pull request #5185 from element-hq/feature/bma/invitePoepleUi
Iterate on invite people UI
2025-08-19 11:12:45 +02:00
Benoit Marty 5dfcd23e01 Create common SelectedItem composable. 2025-08-19 10:19:12 +02:00
Benoit Marty 3c68dd8f75 Improve accessibility. 2025-08-19 10:02:53 +02:00
Benoit Marty e857bd7709 Rename val to improve code readability 2025-08-19 09:58:31 +02:00
Benoit Marty 3c3cef0614 Improve preview of SelectedRoom and SelectedUser. 2025-08-19 09:54:22 +02:00
Benoit Marty 2a5c3990e6 Improve preview of SelectedRoom. 2025-08-19 09:48:04 +02:00
Jorge Martin Espinosa 85b0f11ab6 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 a323189373 Update text colors when the state is disabled. 2025-08-18 17:16:46 +02:00
Benoit Marty 320a1132ed [UI] Iterate on user invite view. 2025-08-18 17:16:28 +02:00
Benoit Marty 5f9ffed8f8 [UI] Iterate on selected room rendering. 2025-08-18 17:16:07 +02:00
Benoit Marty 57ee4e61ce [UI] Iterate on selected user rendering. 2025-08-18 17:16:04 +02:00
renovate[bot] 90ad9616c0 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 7c40c87d9a 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 de16268674 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 476a2b9007 Avoid using runBlocking in Node resolve function. 2025-08-14 16:53:35 +02:00
Benoit Marty e1095c0688 Merge pull request #5117 from element-hq/renovate/showkase
Update showkase to v1.0.5
2025-08-13 17:01:11 +02:00
Benoit Marty 6989e10c19 Add string to Localazy 2025-08-13 16:59:12 +02:00
Jorge Martín cb486e93d7 Remove libs.showkase entry in composeDependencies
Add it only to the needed library modules.
2025-08-13 11:43:57 +02:00
Benoit Marty d2253300db Inject a StringProvider instead of the context, and update tests.
Also remove the other StringProvider we had, it was not used anymore
2025-08-13 11:07:28 +02:00
ganfra b4a8b17391 refactor (start chat) : create invite people module and start branching them 2025-08-13 11:06:43 +02:00
Benoit Marty 58ce545d98 Merge pull request #5160 from element-hq/feature/bma/cleanupFeatureFlags
Remove old feature flags
2025-08-12 18:21:44 +02:00
Benoit Marty de73412d4f Remove unused import 2025-08-12 17:49:31 +02:00
Jorge Martin Espinosa 516c3cfda3 Provide calculated server names when opening a room from another (#5155)
* Provide calculated server names when opening a room from another, based on the most frequently used domain names in the user ids for the users in the room.

This helps when following permalinks or navigating to the successor room of a tombstoned one. Previously, the `/summary` endpoint was failing because no server names were used in the `via` parameters.
2025-08-12 15:17:46 +00:00
Benoit Marty f99b6f30c4 Revert "Remove FeatureFlag.SyncOnPush"
This reverts commit b394688d5a.
2025-08-12 17:16:49 +02:00
Benoit Marty 076bb1ab98 Remove useless preview 2025-08-12 16:48:02 +02:00
Benoit Marty d3d192b5ff Remove FeatureFlag.SharePos 2025-08-12 16:08:48 +02:00
Benoit Marty b394688d5a Remove FeatureFlag.SyncOnPush 2025-08-12 16:08:47 +02:00
Benoit Marty d04434e20e Remove FeatureFlag.MediaUploadOnSendQueue 2025-08-12 16:08:46 +02:00
Benoit Marty 34efd2c3fa Remove FeatureFlag.MediaCaptionCreation and FeatureFlag.MediaCaptionWarning 2025-08-12 16:08:45 +02:00
Benoit Marty dcb6055783 Remove FeatureFlag.MediaGallery 2025-08-12 16:08:45 +02:00
Benoit Marty 4f0535714e Remove FeatureFlag.PinnedEvents 2025-08-12 16:08:44 +02:00
Benoit Marty be9861bea9 Remove FeatureFlag.QrCodeLogin 2025-08-12 16:08:43 +02:00
Benoit Marty 1268f74420 Remove FeatureFlag.MarkAsUnread 2025-08-12 16:08:42 +02:00
Benoit Marty 0ba783cd93 Remove FeatureFlag.VoiceMessages 2025-08-12 16:08:41 +02:00
Benoit Marty 82c86a2b4d Remove FeatureFlag.NotificationSettings and FeatureFlag.PinUnlock 2025-08-12 16:08:40 +02:00
Benoit Marty 7fb70fabed Remove FeatureFlag.LocationSharing and FeatureFlag.Polls 2025-08-12 16:08:38 +02:00
Benoit Marty f6a17ba42b Replace FeatureFlag.LocationSharing by FeatureFlag.Space in unit test. 2025-08-12 15:52:07 +02:00
Benoit Marty 3e73496c85 Remove FeatureFlag.IncomingShare 2025-08-12 15:52:05 +02:00
Jorge Martin Espinosa e0bc4843a2 Fix leaving the room not always dismissing the room screen (#5089)
* Fix leaving the room not always dismissing the room screen

Use the existing `RoomInfo` membership check to dismiss the room instead of using `RoomMembershipObserver`.

* Restore `membershipObserver`, check Maestro still works

* Improve the logic for the local membership change check

* Remove redundant room id check
2025-08-12 10:37:31 +00:00
Benoit Marty 216ba060b4 Merge branch 'develop' into feature/bma/rageshakeConfigStep2 2025-08-11 17:35:06 +02:00
Jorge Martin Espinosa adc61b3826 Add media file limit size warning and media quality selection (#5131)
* Add `VideoCompressorPreset` enum

This represents the different compression presets used for processing videos before uploading them

* Add `VideoCompressorHelper` util class to calculate the scaled output size of the video given an input size and its optimal bitrate

Also add `MediaOptimizationConfig` which will be used to decide how to apply compression in `MediaPreProcessor`

* Add `RustMatrixClient.getMaxFileUploadSize()` function and `MaxUploadSizeProvider` so we can import only this functionality into other components

* Try preloading the max file upload size the first time we get network connectivity - it's a best effort

This should help ensure we'll have this value available later, even if we still need to load it asynchronously.

* Split the `compressMedia` preference into `compressImages` and `compressMediaPreset`

* Modify the media processing parts to use the new classes and utils

* Add `MediaOptimizationSelectorPresenter`, which will retrieve the compression values and the max file upload size, also estimating the compressed video file sizes if needed.

* Add a feature flag to allow selecting the media upload quality per upload

* Integrate the previous changes with the attachments preview screen

Add strings from localazy too.

* Adapt the rest of the app calls to upload media to using the media optimization configs

* Allow modifying the default compression values in advanced settings, based on the feature flag value

* Pass the `fileSize` in `MediaUploadInfo` too, to be able to check it against the `maxUploadSize`

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
2025-08-11 17:22:46 +02:00
Benoit Marty 84130da367 Code cleanup 2025-08-11 14:53:40 +02:00
ElementBot 4b12c3f805 Sync Strings (#5146)
* Sync Strings from Localazy

* Remove unused WelcomeView.

* Remove unused WelcomeView.

---------

Co-authored-by: bmarty <3940906+bmarty@users.noreply.github.com>
Co-authored-by: Benoit Marty <benoit@matrix.org>
2025-08-11 12:49:29 +00:00
Benoit Marty e35eebf084 Add unit test on DefaultSessionWellknownRetriever 2025-08-11 12:13:21 +02:00
Benoit Marty bac59f6caa Merge 2 mapCatchingExceptions into a single one. 2025-08-11 10:55:42 +02:00