Closed
Description
Description
Record and send a voice message.
Acceptance criteria
- It is behind a feature flag in developer settings
- Tap and hold to record
- Release to send (to be enhanced in [Story] Preview a voice message #2104 and [Story] Discard a voice message preview #2105)
- System microphone permissions dialog displays if necessary
- Navigating away stops recording
- Navigating away discards the recording
- Sent messages are in Opus audio format
- Messages have a 30 minute maximum length
- Sending an audio file attachment continues to work as expected
- It interoperates with classic Element mobile and web apps
- Files are not exposed through system file managers
- It works in encrypted and unencrypted rooms
- We should apply a sleep lock so the phone does not sleep and therefor stop a recording.
- If a voice message fails to send the normal message retry button should work.
- Sending a voice message quickly after another one should work.
- Progress spinner displays while uploading media
Audio format
- Sample rate: 48kHz
- Bitrate: 24kbps
- Mono (single channel)
- Appropriate complexity and resample quality for the platform.
- Encoder application: 2048 (voice, default is typically 2049 as audio) (out of scope for Android)
Size estimate
None
Dependencies
No response
Preconditions
No response
Sign-off
Android
- Design sign-off on completion
- QA sign-off on completion
- Product sign-off on completion
iOS
- Design sign-off on completion
- QA sign-off on completion
- Product sign-off on completion
Out of scope
- Save as draft
- Encrypting audio files stored on the device
- Typing notifications
- Reply with a voice message
- Recording length limits or warnings (discussion)
- Edit a voice message
- Record a message when text formatting options are shown
- Using the VOIP encoder application on Android (due to Ability to customise the encoder application libopusencoder-android#4)
Open questions
No response
Subtasks
### Android
- [x] Verified with build in screen reader
- [ ] https://github.com/vector-im/element-x-android/pull/1546
- [x] ~~Release to send~~ Release to show placeholder for preview state
- [x] System microphone permissions dialog displays if necessary
- [x] Navigating away stops recording
- [x] Navigating away discards the recording
- [x] Messages have a 30 minute maximum length
- [x] Progress indicator displays while uploading media
- [x] Verified 1 minute of audio ≈ 180 kilobytes
- [ ] https://github.com/vector-im/element-x-android/pull/1650
- [ ] https://github.com/vector-im/element-x-android/pull/1652
- [ ] https://github.com/vector-im/element-x-android/pull/1645
- [ ] https://github.com/vector-im/element-x-android/pull/1663
- [ ] https://github.com/vector-im/element-x-android/pull/1672
- [ ] https://github.com/vector-im/element-x-android/pull/1677
### iOS
- [ ] Verified with build in screen reader
- [ ] Tap and hold to record
- [ ] Release to send
- [ ] System microphone permissions dialog displays if necessary
- [ ] Navigating away stops recording
- [ ] Navigating away discards the recording
- [ ] Messages have a 30 minute maximum length
- [ ] Progress indicator displays while uploading media
- [ ] Verified 1 minute of audio ≈ 180 kilobytes
### Other
- [ ] https://github.com/matrix-org/matrix-rust-sdk/pull/2697