Commit graph

63 commits

Author SHA1 Message Date
Benoit Marty
05fc76822a 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
5e0d6a6e8a Extract voice message player to its own module 2024-12-13 15:44:58 +01:00
ganfra
e001fee649 knock requests : branch banner in room 2024-12-06 16:31:24 +01:00
Benoit Marty
2a35edb14a Hide the join call button if the user is already in the call.
This is at the account level so if the user has joined the call on another device, the join button will be hidden.

Extract room call state presenter to its own module and update RoomCallState model.
Let RoomDetailsPresenter use the new RoomCallStatePresenter
2024-11-06 09:14:47 +01:00
Jorge Martin Espinosa
2efdb3ae45 Centralise the DI code generation logic (#3562)
* Create Anvil extension helper

* Use the helper everywhere
2024-09-30 12:20:28 +00:00
ganfra
e1f88a9232 Pinned messages analytics : introduce LocalAnalyticsService so we can easily inject it in views 2024-09-20 18:28:25 +02:00
Benoit Marty
2b016227e9 Migrate license to AGPL.
Run script `uv run license-editor --repository ../element-x-android`
2024-09-06 17:19:19 +02:00
SpiritCroc
00e26f0c6b Big emoji-only messages
Adapted from SpiritCroc's SchildNext implementation from
7eba87f02e

Fixes: https://github.com/element-hq/element-x-android/issues/1438
Signed-off-by: Tobias Büttner <dev@spiritcroc.de>
Signed-off-by: Joe Groocock <me@frebib.net>
2024-08-23 13:46:19 +00:00
ganfra
9985526137 Pinned events : start branching sdk data in the banner. 2024-08-01 18:34:52 +02:00
Jorge Martin Espinosa
950e502ca6 Improve screenshot testing with ComposablePreviewScanner (#3125)
* Use ComposablePreviewScanner to rework how screenshot testing works
* Add test sharding
* Update screenshots
* Fixes for Element Gallery

---------

Co-authored-by: ElementBot <benoitm+elementbot@element.io>
Co-authored-by: Benoit Marty <benoit@matrix.org>
2024-07-03 13:05:06 +02:00
Jorge Martin Espinosa
6f8de0b2c6 Element Call ringing notifications (#2978)
- Add `ActiveCallManager` to handle incoming and ongoing calls.
- Add ringing call notifications with full screen intents and missed call ones as part of the 'conversation' notifications.

---------

Co-authored-by: ElementBot <benoitm+elementbot@element.io>
2024-06-10 11:51:19 +02:00
Benoit Marty
92bc614af3 Cleanup dependencies about junit. 2024-05-21 18:14:32 +02:00
Jorge Martin Espinosa
a7093bae8b Add legacy call invite state events and notifications (#2552)
* Add state timeline events and notifications for legacy call invites

* Update screenshots

---------

Co-authored-by: ElementBot <benoitm+elementbot@element.io>
2024-03-14 16:29:06 +01:00
Benoit Marty
f9599a6a6f Add tests on MessagesView 2024-02-07 23:02:32 +01:00
Benoit Marty
28f26b1aae Add test for TimelineItemPollView 2024-02-06 18:30:27 +01:00
Benoit Marty
b377da22ad Remove empty test module 2024-01-09 10:45:36 +01:00
Jorge Martín
770668589b Add build script for the RTE library 2023-12-28 12:03:23 +01:00
Benoit Marty
aa077baacd Merge pull request #1975 from element-hq/feature/bma/extractForward
Extract RoomList select to its own module
2023-12-19 13:32:41 +01:00
ganfra
3ceb2599d8 Merge branch 'develop' into julioromano/poll_history_entry_point 2023-12-14 15:17:13 +01:00
Jorge Martin Espinosa
ab58cc2ed5 Use RTE TextView for timeline text messages, add mention pills to messages (#1990)
* Add `formattedBody` to `TimelineItemTextBasedContent`.

This is pre-computed when timeline events are being mapped from the Rust SDK.

* Update `HtmlConverterProvider` styles.

* Improve `MentionSpan` to add missing `@` or `#` if needed

* Replace `HtmlDocument` with the `TextView` based component

* Improve extra padding calculation for timestamp by rounding the float offset result instead of truncating it.

* Remove composer line height workaround

* Use `ElementRichTextEditorStyle` instead of `RichTextEditorDefaults` for the theming

* Use slightly different styles for composer and messages (top/bottom line height discrepancies, mostly).

* Add `formattedBody` to notice and emote events.

---------

Co-authored-by: ElementBot <benoitm+elementbot@element.io>
2023-12-13 18:09:53 +01:00
ganfra
055eb43708 Poll history : add tests and fix others 2023-12-13 16:20:01 +01:00
Benoit Marty
0b438b5b5c Extract RoomList select to its own module 2023-12-07 18:36:15 +01:00
Jorge Martin Espinosa
bbc4d18a9d Open room member avatar in a media viewer (#1911)
* Open room member avatar in viewer.

The `MediaViewer` was extracted to its own library module.

* Update screenshots

* Restore KSP processor in `:libraries:mediaviewer:api`, this should generate Showkase components again.

---------

Co-authored-by: ElementBot <benoitm+elementbot@element.io>
2023-11-28 17:39:41 +00:00
Marco Romano
c33c0f583c Merge TimelineItemEventRow's textForInReplyTo and attachmentThumbnailInfoForInReplyTo functions (#1859)
The flow is somewhat misleading so its logic has been merged into `InReplyToDetails.metadata()`.
2023-11-27 22:13:19 +00:00
Benoit Marty
3e0971f189 Read receipt: model and UI. 2023-11-16 14:05:00 +01:00
jonnyandrew
e376feba22 Add analytics for voice messages (#1706) 2023-11-02 09:32:22 +00:00
Marco Romano
eb223deba1 Move MediaPlayer from messages module to new dedicated library module (#1654) 2023-10-27 09:58:17 +02:00
David Langley
5a646a8362 Remove WaveformProgressIndicator and waveform library and lint.
-Remove WaveformProgressIndicator - Remove waveform library
- lint.
2023-10-26 08:58:03 +01:00
Marco Romano
3b20120705 Receive and play a voice message (#1503)
## Type of change

- [x] Feature
- [ ] Bugfix
- [ ] Technical
- [ ] Other :

## Content

This PR consists of several macro-blocks separated by path/package:
- `messages.impl.mediaplayer` : Global (room-wide) media player, now used only for voice messages but could be used for all media within EX in the future. It is backed by media3's exoplayer. Currently not unit-tested because mocking exoplayer is not trivial.
- `messages.impl.voicemessages.play` : Business logic of a timeline voice message. This is all the logic that manages the voice message bubble.
- `messages.impl.timeline.model` & `messages.impl.timeline.factories`: Timeline code that takes care of creating the `content` object for voice messages.
-  `messages.impl.timeline.components` : The actual View composable that shows the UI inside a voice message bubble.

All the rest is just small related changes that must be done here and there in existing code.

From a high level perspective this is how it works:
- Voice messages are unlike other message bubbles because they carry state (i.e. playing, downloading...) so they have a Presenter managing this state.
- Media content (i.e. the ogg file) of a voice message is downloaded from the rust SDK on first play then stored in a voice messages cache (see the `VoiceMessageCache` class, it is just a subdirectory in the app's cacheDir which is indexed by the matrix content uri). All further play attempts are done from the cache without hitting the rust SDK anymore.
- Playback of the ogg file is handled with the `VoiceMessagePlayer` class which is basically a "view" of the global `MediaPlayer` that allow the voice message to only see the media player state belonging to its media content. 
- Drawing of the waveform is done with an OSS library wrapped in the `WaveformProgressIndicator` composable.

Known issues:
 - The waveform has no position slider.
 - The waveform (and together with it the whole message bubble) is taller than the actual Figma design.
 - Swipe to reply for voice messages is disabled to avoid conflict with the audio scrubbing gesture (to reply to a voice message you have to use the long press menu).
 - The loading indicator is always shown (there is no delay).
 - Voice messages don't stop playing when redacted.

## Motivation and context

https://github.com/vector-im/element-meta/issues/2083

## Screenshots / GIFs

Provided by Screenshot tests in the PR itself.
2023-10-24 21:47:51 +00:00
jonnyandrew
5c582bba1b Record and send voice messages (#1596)
---------

Co-authored-by: ElementBot <benoitm+elementbot@element.io>
2023-10-23 17:28:00 +00:00
Jorge Martin Espinosa
5e547269e7 Integrate Element Call with widget API (#1581)
* Integrate Element Call with widget API.

- Add `appconfig` module and extract constants that can be overridden in forks there.
- Add an Element Call feature flag, disabled by default.
- Refactor the whole `ElementCallActivity`, move most logic out of it.
- Integrate with the Rust Widget Driver API (note the Rust SDK version used in this PR lacks some needed changes to make the calls actually work).
- Handle calls differently based on `CallType`.
- Add UI to create/join a call.

---------

Co-authored-by: ElementBot <benoitm+elementbot@element.io>
2023-10-19 15:38:43 +00:00
Benoit Marty
6f49e670fb Remove not used dependencies to some accompanist libraries. 2023-10-10 13:48:10 +02:00
Benoit Marty
c2bc3a7828 Request Camera permission before launching the external Camera app - when sending attachment to a room (#1395) 2023-09-21 12:48:03 +02:00
Benoit Marty
f55e8a6ad8 Remove feature flag RichTextEditor, it's replaced by an advanced settings. 2023-09-14 19:47:41 +02:00
jonnyandrew
11c1fca92e [Rich text editor] Integrate rich text editor library (#1172)
* Integrate rich text editor

* Also increase swapfile size in test CI

Fixes issue where screenshot tests are terminated due to lack of CI
resources.

See https://github.com/actions/runner-images/discussions/7188#discussioncomment-6750749

---------

Co-authored-by: ElementBot <benoitm+elementbot@element.io>
2023-09-07 15:21:29 +00:00
David Langley
59d7947cc0 Merge branch 'develop' of https://github.com/vector-im/element-x-android into feature/dla/emojibase_integration 2023-08-28 17:03:00 +01:00
David Langley
685d684359 Integrate emojibase
- Integrate emojibase datasource
- Use element category translations
- Use Material emoji category logos
2023-08-28 16:45:42 +01:00
Benoit Marty
bcede44407 Move module features.analytics.test to services.analytics.test. FakeAnalyticsService was not implemented at the correct location. 2023-08-28 14:31:36 +02:00
Florian Renaud
f2d1658ffa "View only" polls in the timeline (#1031)
* Handle poll events from the sdk

* Render started poll event in the timeline

* Create poll module

* Check poll kind before revealing the results

* Check if user has voted before revealing the results

* Add active poll previews

* Minor cleanup

* Update todos

* Fix CI

* Remove hardcoded string

* Update preview

* changelog file

* Update screenshots

* Use CommonPlurals

* Set poll root view as selectableGroup

* Improve poll result rendering

* Update screenshots

* Add missing showkase processor

* Update screenshots

---------

Co-authored-by: ElementBot <benoitm+elementbot@element.io>
2023-08-16 14:19:12 +00:00
ganfra
e453b984ef RoomList: use same logic than Timeline for caching built items. (#1013)
* RoomList: use same logic than Timeline for caching built items. Extract into reusable components.

* RoomList: fix tests

* Fix `DiffCacheUpdater` docs

---------

Co-authored-by: ganfra <francoisg@element.io>
Co-authored-by: Jorge Martín <jorgem@element.io>
2023-08-01 08:53:41 +00:00
Benoit Marty
ac1d355f65 Cleanup: there are no androidTest on those modules. 2023-07-24 12:41:02 +02:00
jonnyandrew
e39cc9555c Fix multi-line reactions blocking message content (#785)
Fixes vector-im/element-x-android#753

---------

Co-authored-by: ElementBot <benoitm+elementbot@element.io>
2023-07-06 12:44:37 +00:00
Marco Romano
0858cfb272 Send pin-drop location (#636)
Share pindrop location

This feature allows the user to share any location by just selecting it from the map.

Closes: https://github.com/vector-im/element-x-android/issues/690
2023-06-29 22:07:47 +00:00
Yoan Pintas
c7fd9d7a4e Add Composer posthog event (#697) 2023-06-28 14:48:39 +00:00
Yoan Pintas
f599335572 Add ViewRoom posthog event (#669) 2023-06-27 21:44:54 +00:00
Jorge Martin Espinosa
e591a588b3 [Message Actions] Add emoji reactions option (#568)
* Add logic to send message reactions

* Add emoji library, create EmojiPicker component

* Fix bottom sheet behaviors

---------

Co-authored-by: ElementBot <benoitm+elementbot@element.io>
2023-06-09 16:56:40 +02:00
ganfra
1ce0324570 Merge branch 'develop' into feature/fga/image_loading 2023-05-26 11:39:34 +02:00
Benoit Marty
bbe4b7d26a Process state event in timeline - WIP 2023-05-25 14:16:23 +02:00
ganfra
d36bc58e60 Media: use telephoto library 2023-05-17 16:20:12 +02:00
ganfra
9318d27ba1 Merge branch 'develop' into feature/fga/image_loading 2023-05-15 20:07:00 +02:00