Commit Graph

4218 Commits

Author SHA1 Message Date
Jorge Martin Espinosa
c40a39bbfa Update the chat screen UI using RoomInfo. (#1640)
* Update the chat screen UI using `RoomInfo`.

This is specially useful for getting live values for `hasRoomCall`.

* Ensure the first `MatrixRoomInfo` is emitted ASAP

* Try excluding `*Present$present$*` inner functions from kover as separate entities

* Update strings

---------

Co-authored-by: ElementBot <benoitm+elementbot@element.io>
2023-10-26 14:27:42 +00:00
Marco Romano
4d9a3bddaf Use Float instead of Double for all the level metering logic. (#1645)
This is in preparation of further changes to the way the audio level is computed and to allow recording and sending of the waveform. The main reasoning behind the change is twofold:
1) We don't need the precision of Double in our context (we just need a rough indication of the changes in audio level to successfully draw a level meter or a waveform in our UI).
2) Performance: It is true that on 64 bit CPUs single operations involving Floats or Doubles take the same amount of time (i.e one clock cycle). But there are other aspects here that vouch in favor of Floats:
	- A float takes half the space in memory compared to a double, so when storing long lists of them this can add up.
	- On Android O and greater the ART runtime can "vectorize" certain operations on lists and make use of the CPU's SIMD registers which are generally 128 bits. So by using floats 4 of them can fit and be computed at the same time whilst with doubles only 2 will fit halving the throughput.

References:
- https://source.android.com/docs/core/runtime/improvements
- https://www.slideshare.net/linaroorg/automatic-vectorization-in-art-android-runtime-sfo17216
2023-10-26 12:55:23 +00:00
David Langley
5c7cffff19 Merge pull request #1641 from vector-im/langleyd/custom_waveform
Add custom waveform with cursor and nice gesture support.
2023-10-26 13:52:47 +01:00
Marco Romano
10ce75f74e Merge branch 'develop' into langleyd/custom_waveform 2023-10-26 13:07:45 +02:00
Marco Romano
40e19349b5 Refactor of voice message playing code (#1643)
After PR review suggestions from @jonnyandrew 
User facing functionality doesn't change, but overall architecture and testing is better.
2023-10-26 12:51:12 +02:00
ElementBot
d95a616f36 Update screenshots 2023-10-26 08:26:46 +00:00
David Langley
34f7111f48 -Fix waveform preview 2023-10-26 09:10:38 +01:00
David Langley
9b7f66446a Don't need added state from bad merge. 2023-10-26 09:06:08 +01:00
David Langley
a8016fa6ed Remove WaveformProgressIndicator call. 2023-10-26 09:02:31 +01:00
David Langley
fbce953527 Merge branch 'develop' of https://github.com/vector-im/element-x-android into langleyd/custom_waveform 2023-10-26 09:02:14 +01: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
renovate[bot]
cabd7ac388 Update dependency org.matrix.rustcomponents:sdk-android to v0.1.65 (#1639)
* Update dependency org.matrix.rustcomponents:sdk-android to v0.1.65

* Fix broken verification flow

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
2023-10-26 08:59:06 +02:00
David Langley
4b403ae57c Add custom waveform with cursor and nice gesture support. 2023-10-25 22:12:01 +01: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
David Langley
86cd274b3a Merge pull request #1610 from vector-im/dla/feature/custom_room_notification_settings_list
Custom room notification settings list
2023-10-24 23:02:16 +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
ElementBot
cf1d4cf087 Update screenshots 2023-10-24 21:31:36 +00:00
David Langley
c61d2d3941 Merge branch 'develop' into dla/feature/custom_room_notification_settings_list 2023-10-24 22:18:38 +01: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
David Langley
f0e9e00137 Merge branch 'develop' into dla/feature/custom_room_notification_settings_list 2023-10-24 21:47:08 +01:00
David Langley
241056b892 Unit and Snapshot tests for error and loading states. 2023-10-24 21:39:53 +01:00
renovate[bot]
d221fe5888 Update dependency com.google.testparameterinjector:test-parameter-injector to v1.14 (#1636)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-24 20:50:31 +02:00
David Langley
470eeb3132 Merge branch 'dla/feature/custom_room_notification_settings_list' of https://github.com/vector-im/element-x-android into dla/feature/custom_room_notification_settings_list 2023-10-24 19:15:18 +01:00
David Langley
80e70a6834 Fix indentation 2023-10-24 19:15:14 +01:00
ElementBot
bc4f67c277 Update screenshots 2023-10-24 16:35:20 +00:00
David Langley
e388ea21b6 Merge branch 'develop' into dla/feature/custom_room_notification_settings_list 2023-10-24 17:20:15 +01:00
David Langley
f2e7f9c750 Fix compile error. 2023-10-24 17:14:48 +01:00
Benoit Marty
cb37d5b665 Merge pull request #1634 from vector-im/feature/bma/codeCoverage
Code coverage
2023-10-24 17:59:18 +02:00
David Langley
869e420c49 Merge pull request #1621 from vector-im/dla/feature/room_notification_settings_ui_update
Room notification settings UI update
2023-10-24 16:40:20 +01:00
David Langley
d69a1760a8 Merge branch 'dla/feature/custom_room_notification_settings_list' of https://github.com/vector-im/element-x-android into dla/feature/room_notification_settings_ui_update 2023-10-24 16:36:27 +01:00
David Langley
7bad558f16 Remove debugging code. 2023-10-24 16:34:47 +01:00
David Langley
39af4d5e1b Address comments
- Add additional states to preview.
- Add TODO description for commented code
- Move showUserDefinedSettingStyle from the node to the view for testability.
2023-10-24 16:27:26 +01:00
ElementBot
1948414566 Update screenshots 2023-10-24 17:17:15 +02:00
Benoit Marty
7ffcb39dd3 Test coverage: Add test on DefaultNavigationStateService 2023-10-24 17:17:15 +02:00
Benoit Marty
6dfa2ef2a8 Test coverage: Add missing preview for RoomDetailsView. 2023-10-24 17:17:15 +02: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
Benoit Marty
512dffaf24 Test coverage: Exclude :libraries:matrix:impl module, it contains only wrappers to access the Rust Matrix SDK api, and mappers. It is not really relevant to unit test that: there is no logic to test. 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
Benoit Marty
b751ec5941 Merge pull request #1632 from vector-im/feature/bma/backupMapper
Add `BackupState` and `BackupStateMapper`
2023-10-24 16:06:59 +02: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
Benoit Marty
1fa745dcbd Add BackupState and BackupStateMapper from the feature/bma/secureBackup branch to ensure that we do not upgrade the SDK with no support of KeyBackup.
This will act as a poison pill to avoid mistake when building new version of the SDK.
2023-10-24 11:12:06 +02: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
Jorge Martin Espinosa
e61c7d8de0 Set tracing of matrix_sdk_ui::timeline to trace (#1630) 2023-10-24 09:37:41 +02:00
renovate[bot]
19e5f43102 Update dependency org.matrix.rustcomponents:sdk-android to v0.1.64 (#1629)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-24 08:18:09 +02: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
ElementBot
f721c988ee Update screenshots 2023-10-23 14:39:14 +00: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
86d68bc890 Merge branch 'langleyd/fix_emoji_shortcut_values' of https://github.com/vector-im/element-x-android into langleyd/fix_emoji_shortcut_values 2023-10-23 15:25:33 +01:00