Commit Graph

805 Commits

Author SHA1 Message Date
ganfra
b8ce848a0c PIN : fix quality 2023-10-26 15:25:40 +02:00
ganfra
fae051ef82 Merge branch 'develop' into feature/fga/pin_settings 2023-10-26 11:13:52 +02:00
Marco Romano
e2a40c8bd1 Voice message bubble design improvements (#1637)
- Fixes color and size of both text and icons.
2023-10-25 17:33:50 +02:00
ganfra
f105455bd6 PIN: branch SignOut 2023-10-25 11:15:15 +02: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
98b75424a8 Allow deleting a recorded voice message (#1635)
---------

Co-authored-by: ElementBot <benoitm+elementbot@element.io>
2023-10-24 21:02:19 +00:00
Benoit Marty
fa6d13426e Test coverage: Add missing preview for MessagesView. 2023-10-24 17:17:15 +02:00
Benoit Marty
5f7ae9598e Test coverage: extract EmojiItem to improve coverage. 2023-10-24 17:17:15 +02:00
jonnyandrew
d07b7e0d87 Update package of voice message composer (#1633) 2023-10-24 14:48:35 +00:00
jonnyandrew
9046ac4c8a Add voice message recording duration indicator and limit (#1628)
---------

Co-authored-by: ElementBot <benoitm+elementbot@element.io>
2023-10-24 11:44:53 +00:00
jonnyandrew
bdc52332bb Add progress indicator for sending voice messages (#1618)
---------

Co-authored-by: ElementBot <benoitm+elementbot@element.io>
2023-10-24 08:36:42 +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
David Langley
da345f9afa Merge pull request #1625 from vector-im/langleyd/fix_emoji_shortcut_values
Fix emoji shortcut values
2023-10-23 16:49:56 +01:00
ganfra
40f677192a Merge pull request #1624 from vector-im/feature/fga/pin_auth_ui
PIN : unlock screen ui
2023-10-23 16:35:22 +02:00
David Langley
a0c192266f Update thumbs up emoji in the state provider. 2023-10-23 15:25:28 +01:00
David Langley
3763593a66 Fix emoji shortcut values 2023-10-23 12:06:52 +01:00
Benoit Marty
577527902f Konsist: add test to ensure that functions with @PreviewsDayNight contain ElementTheme composable, and fix existing issues. 2023-10-23 12:23:27 +02:00
jonnyandrew
3a39e747fd Fix issue where text is cleared when cancelling a reply (#1617) 2023-10-23 08:31:32 +00:00
ElementBot
46bfbc06fa Sync Strings (#1623)
* Sync Strings from Localazy

* Fix strings

* Update screenshots

---------

Co-authored-by: bmarty <bmarty@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
2023-10-23 08:20:49 +00:00
renovate[bot]
7c5fab732b Update dependency org.matrix.rustcomponents:sdk-android to v0.1.63 (#1619)
* Update dependency org.matrix.rustcomponents:sdk-android to v0.1.63

* Update Element Call integrated APIs

* Take into account the new `MessageType.Other` from the SDK

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
Co-authored-by: Benoit Marty <benoit@matrix.org>
2023-10-20 22:32:59 +02: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
Marco Romano
cf3039c6f3 TimelineItemPresenterFactories (#1609)
DI infrastructure to allow injection of presenters into the timeline.
Add an `@AssistedFactory` of type `TimelineItemPresenterFactory` to a `Presenter` class and bind this factory into the TimelineItemPresenterFactory map multi binding using:

```
@Binds
@IntoMap
@TimelineItemEventContentKey(MyTimelineItemContent::class)
```

A map multibinding of such factories will be available in the `LocalTimelineItemPresenterFactories` composition local for further use down the UI tree.
2023-10-19 15:57:34 +02:00
Marco Romano
80870adfe3 Extract more content from audio messages. (#1607)
`TimelineItemAudioContent`:
- Use `java.time.Duration` instead of milliseconds. This will ease up things in the future because currently milliseconds are sent over the wire but in the future seconds will be sent (as per the stable MSC). Using `Duration` will allow our downstream code to be independent of what's passed over the wire.
- Rename `audioSource` property to `mediaSource` to better match its type.

`AudioMessageType`:
- Add and populate new fields `details` and `isVoiceMessage` to be used by voice messages.
2023-10-19 13:32:43 +02:00
Jorge Martin Espinosa
643fe1a5e5 Hide keyboard when exiting the room screen (#1593) 2023-10-19 10:49:11 +02:00
bmarty
379139a88f Sync Strings from Localazy 2023-10-16 00:09:47 +00:00
Benoit Marty
5f56961fd0 Merge pull request #1556 from vector-im/feature/bma/videoLock
Ensure screen does not turn off when playing a video (#1519)
2023-10-13 14:05:30 +02:00
Benoit Marty
e8fcf7b950 Fix issue detected by Konsist. 2023-10-12 18:46:14 +02:00
jonnyandrew
ffa6c43503 [Voice messages] Add voice recording UI (#1546)
---------

Co-authored-by: ElementBot <benoitm+elementbot@element.io>
2023-10-12 15:17:18 +00:00
Benoit Marty
a71fb431d3 Ensure screen does not turn off when playing a video (#1519) 2023-10-12 15:53:05 +02:00
Benoit Marty
07a2643bd2 Merge pull request #1549 from vector-im/feature/bma/unknownMsgtype
Render unknown msgtype
2023-10-12 10:56:35 +02:00
Benoit Marty
427aae9fc1 Merge pull request #1526 from vector-im/feature/bma/konsist
Konsist
2023-10-11 16:40:22 +02:00
Benoit Marty
2e8be3a3d1 Render body for m.room.message if msgtype is unknown, in timeline and as room list last message. #1539 2023-10-11 16:18:24 +02:00
Benoit Marty
266612f9da MessageContent.type cannot be null 2023-10-11 16:14:15 +02:00
Benoit Marty
16841e9721 data object 2023-10-10 17:31:04 +02:00
Benoit Marty
0405683713 Konsist: add test Function which creates Presenter in test MUST be named 'createPresenterName', and fix existing issues 2023-10-10 17:31:04 +02:00
Benoit Marty
308a0c0f57 Konsist: add test to ensure filename match top level Composable View, and fix existing issue 2023-10-10 15:39:22 +02:00
Benoit Marty
6f49e670fb Remove not used dependencies to some accompanist libraries. 2023-10-10 13:48:10 +02:00
Benoit Marty
3559b2ed4b Code review: improve API. 2023-10-05 15:28:38 +02:00
Benoit Marty
6c22ee3cec Render emote in the timeline: prefix with sender display name 2023-10-05 11:39:05 +02:00
Benoit Marty
d323554b2d avoid else in when statement. 2023-10-05 11:15:26 +02:00
renovate[bot]
cf4a86131a Update dependency androidx.compose.material3:material3 to v1.2.0-alpha09 (#1493)
* Update dependency androidx.compose.material3:material3 to v1.2.0-alpha09

* Fix deprecation issues

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
2023-10-05 09:57:47 +02:00
Benoit Marty
937e053d46 Fetch edited event in advanced (similar to reply mode). 2023-10-04 17:38:17 +02:00
Benoit Marty
937391b4b9 Add comment. 2023-10-04 17:25:55 +02:00
Benoit Marty
cf4ad7649f Merge pull request #1465 from vector-im/feature/bma/codeCoverage
Improve code coverage
2023-10-02 10:18:31 +02:00
bmarty
cd0a0f7c9a Sync Strings from Localazy 2023-10-02 00:09:47 +00:00
jonnyandrew
f84cd01e73 Fix composer options bottom sheet position (#1469) 2023-09-29 16:29:57 +00:00
Benoit Marty
b2b5a76caa Ensure the preview match the behavior (and improve code coverage) 2023-09-29 16:18:12 +02:00
jonnyandrew
70dfbd7c31 [Rich text editor] Add full screen mode (#1447)
- Add full screen mode for the rich text editor (RTE). When text formatting options are enabled, the editor can be dragged to full screen.
- Remove `ConstraintLayout` from `textcomposer` module, now made much simpler now the RTE supports being called in multiple layouts matrix-org/matrix-rich-text-editor#822

- Part of vector-im/element-meta#1973
- Includes design from #1315
- Fixes #1293 (through new layout)
- Fixes #1394 (through inclusion of matrix-org/matrix-rich-text-editor#824)
- Fixes #1259 (through inclusion of matrix-org/matrix-rich-text-editor#820)

---------

Co-authored-by: ElementBot <benoitm+elementbot@element.io>
2023-09-29 09:11:18 +00:00
Benoit Marty
f395472c67 Use generic action_remove 2023-09-29 09:02:10 +02:00
Benoit Marty
16390e5df0 Use the AutoMirrored version. 2023-09-28 14:21:27 +02:00