diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index 2e4df9dad..1b682305e 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -4351,6 +4351,7 @@ bool HistoryWidget::isSearching() const { bool HistoryWidget::showRecordButton() const { return Media::Capture::instance()->available() && !_voiceRecordBar->isListenState() + && !_voiceRecordBar->isRecordingByAnotherBar() && !HasSendText(_field) && !readyToForward() && !_editMsgId; diff --git a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp index aa6513cf2..7483500f8 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp +++ b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp @@ -1333,6 +1333,7 @@ void ComposeControls::orderControls() { bool ComposeControls::showRecordButton() const { return ::Media::Capture::instance()->available() && !_voiceRecordBar->isListenState() + && !_voiceRecordBar->isRecordingByAnotherBar() && !HasSendText(_field) //&& !readyToForward() && !isEditingMessage(); diff --git a/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.cpp b/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.cpp index c8ad45411..63a75ff7f 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.cpp +++ b/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.cpp @@ -1541,7 +1541,13 @@ rpl::producer> VoiceRecordBar::lockViewportEvents() const { } rpl::producer<> VoiceRecordBar::updateSendButtonTypeRequests() const { - return _listenChanges.events(); + return rpl::merge( + ::Media::Capture::instance()->startedChanges( + ) | rpl::filter([=] { + // Perhaps a voice is recording from another place. + return !isActive(); + }) | rpl::to_empty, + _listenChanges.events()); } rpl::producer<> VoiceRecordBar::recordingTipRequests() const { @@ -1560,6 +1566,10 @@ bool VoiceRecordBar::isTypeRecord() const { return (_send->type() == Ui::SendButton::Type::Record); } +bool VoiceRecordBar::isRecordingByAnotherBar() const { + return !isRecording() && ::Media::Capture::instance()->started(); +} + bool VoiceRecordBar::hasDuration() const { return _recordingSamples > 0; } diff --git a/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.h b/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.h index 981cffe87..6dcb19da9 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.h +++ b/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.h @@ -79,6 +79,7 @@ public: [[nodiscard]] bool isLockPresent() const; [[nodiscard]] bool isListenState() const; [[nodiscard]] bool isActive() const; + [[nodiscard]] bool isRecordingByAnotherBar() const; private: enum class StopType { diff --git a/Telegram/SourceFiles/media/audio/media_audio_capture.h b/Telegram/SourceFiles/media/audio/media_audio_capture.h index a6db3606b..107274c0c 100644 --- a/Telegram/SourceFiles/media/audio/media_audio_capture.h +++ b/Telegram/SourceFiles/media/audio/media_audio_capture.h @@ -42,6 +42,9 @@ public: return _updates.events(); } + [[nodiscard]] bool started() const { + return _started.current(); + } [[nodiscard]] rpl::producer startedChanges() const { return _started.changes(); }