diff --git a/_locales/en/messages.json b/_locales/en/messages.json
index 38d6e5f058f8..71ae1267b502 100644
--- a/_locales/en/messages.json
+++ b/_locales/en/messages.json
@@ -909,6 +909,18 @@
"message": "Original message found, but not loaded. Scroll up to load it.",
"description": "Shown in toast if user clicks on quote references messages not loaded in view, but in database"
},
+ "voiceRecording--start": {
+ "message": "Start recording voice message",
+ "description": "Tooltip for microphone button to start voice message"
+ },
+ "voiceRecording--complete": {
+ "message": "Complete voice message and send",
+ "description": "Tooltip for green complete voice message and send"
+ },
+ "voiceRecording--cancel": {
+ "message": "Cancel voice message",
+ "description": "Tooltip for red button to cancel voice message"
+ },
"voiceRecordingInterruptedMax": {
"message": "Voice message recording stopped because the maximum time limit was reached.",
"description": "Confirmation dialog message for when the voice recording is interrupted due to max time limit"
diff --git a/preload.js b/preload.js
index 0c0ba70b246d..b601acdcecf5 100644
--- a/preload.js
+++ b/preload.js
@@ -466,7 +466,6 @@ try {
require('./ts/views/conversation_view');
require('./ts/views/inbox_view');
require('./ts/views/install_view');
- require('./ts/views/recorder_view');
require('./ts/views/standalone_registration_view');
require('./ts/SignalProtocolStore');
require('./ts/background');
diff --git a/stylesheets/components/AudioCapture.scss b/stylesheets/components/AudioCapture.scss
new file mode 100644
index 000000000000..21cb219fb6a0
--- /dev/null
+++ b/stylesheets/components/AudioCapture.scss
@@ -0,0 +1,128 @@
+// Copyright 2016-2020 Signal Messenger, LLC
+// SPDX-License-Identifier: AGPL-3.0-only
+
+.AudioCapture {
+ display: flex;
+ text-align: center;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+ background: none;
+
+ &__microphone {
+ height: 32px;
+ width: 32px;
+ text-align: center;
+ opacity: 0.5;
+ background: none;
+
+ padding: 0;
+ border: none;
+
+ &:focus,
+ &:hover {
+ opacity: 1;
+ }
+
+ outline: none;
+
+ &:before {
+ content: '';
+ display: inline-block;
+ height: 24px;
+ width: 24px;
+
+ @include light-theme {
+ @include color-svg(
+ '../images/icons/v2/mic-outline-24.svg',
+ $color-gray-75
+ );
+ }
+ @include dark-theme {
+ @include color-svg(
+ '../images/icons/v2/mic-solid-24.svg',
+ $color-gray-15
+ );
+ }
+ }
+ }
+
+ &__recorder-button {
+ flex-grow: 0;
+ flex-shrink: 0;
+
+ width: 32px;
+ height: 32px;
+ border-radius: 32px;
+ margin-left: 5px;
+ opacity: 0.3;
+ text-align: center;
+ padding: 0;
+
+ &:focus,
+ &:hover {
+ opacity: 1;
+ }
+
+ outline: none;
+
+ .icon {
+ display: inline-block;
+ width: 24px;
+ height: 24px;
+ margin-bottom: -3px;
+ }
+
+ &--complete {
+ background: lighten($color-accent-green, 20%);
+ border: 1px solid $color-accent-green;
+
+ .icon {
+ @include color-svg(
+ '../images/icons/v2/check-24.svg',
+ $color-accent-green
+ );
+ }
+ }
+
+ &--cancel {
+ background: lighten($color-accent-red, 20%);
+ border: 1px solid $color-accent-red;
+
+ .icon {
+ @include color-svg('../images/icons/v2/x-24.svg', $color-accent-red);
+ }
+ }
+ }
+
+ &__time {
+ color: $color-gray-60;
+ font-variant: tabular-nums;
+ line-height: 36px;
+ padding: 0 10px;
+
+ @keyframes pulse {
+ 0% {
+ opacity: 0;
+ }
+ 50% {
+ opacity: 1;
+ }
+ 100% {
+ opacity: 0;
+ }
+ }
+
+ &::before {
+ content: '';
+ display: inline-block;
+ border-radius: 10px;
+ width: 10px;
+ height: 10px;
+ background: $color-accent-red;
+ margin-right: 10px;
+ opacity: 0;
+ animation: pulse 2s infinite;
+ }
+ }
+}
diff --git a/stylesheets/components/Toast.scss b/stylesheets/components/Toast.scss
index c72871033e5a..6f591f633c1d 100644
--- a/stylesheets/components/Toast.scss
+++ b/stylesheets/components/Toast.scss
@@ -11,6 +11,7 @@
position: absolute;
text-align: center;
transform: translate(-50%, 0);
+ user-select: none;
z-index: 100;
@include light-theme {
diff --git a/stylesheets/manifest.scss b/stylesheets/manifest.scss
index 838786afc1f1..8d9d7b1e5a45 100644
--- a/stylesheets/manifest.scss
+++ b/stylesheets/manifest.scss
@@ -30,6 +30,7 @@
@import './components/AddGroupMembersModal.scss';
@import './components/AnnouncementsOnlyGroupBanner.scss';
@import './components/App.scss';
+@import './components/AudioCapture.scss';
@import './components/Avatar.scss';
@import './components/AvatarEditor.scss';
@import './components/AvatarModalButtons.scss';
diff --git a/test/index.html b/test/index.html
index 708a8815d3b4..2ead908b5670 100644
--- a/test/index.html
+++ b/test/index.html
@@ -284,11 +284,6 @@
src="../js/views/group_member_list_view.js"
data-cover
>
-