From 0bc693c76b48c75a54695c9ff96d36387f603ee3 Mon Sep 17 00:00:00 2001 From: matzman666 Date: Wed, 9 Aug 2017 00:41:26 +0200 Subject: [PATCH] Added push-to-mute for microphone. --- bin/win64/res/qml/AudioPage.qml | 26 ++++++++++---- src/tabcontrollers/AudioTabController.cpp | 42 +++++++++++++++++++++-- src/tabcontrollers/AudioTabController.h | 5 +++ src/tabcontrollers/PttController.h | 2 +- 4 files changed, 65 insertions(+), 10 deletions(-) diff --git a/bin/win64/res/qml/AudioPage.qml b/bin/win64/res/qml/AudioPage.qml index 484e7ea..b499c24 100644 --- a/bin/win64/res/qml/AudioPage.qml +++ b/bin/win64/res/qml/AudioPage.qml @@ -310,12 +310,22 @@ MyStackViewPage { } } } - MyToggleButton { - id: audioPttShowNotificationToggle - Layout.leftMargin: 265 - text: "Show notification in HMD." - onCheckedChanged: { - AudioTabController.setPttShowNotification(checked, false) + RowLayout { + MyToggleButton { + id: audioPttShowNotificationToggle + Layout.leftMargin: 265 + text: "Show notification in HMD." + onCheckedChanged: { + AudioTabController.setPttShowNotification(checked, false) + } + } + MyToggleButton { + id: audioPttReverseToggle + Layout.leftMargin: 118 + text: "Push-to-Mute" + onClicked: { + AudioTabController.setMicReversePtt(checked, false) + } } } RowLayout { @@ -438,6 +448,7 @@ MyStackViewPage { audioPttLeftControllerToggle.checked = AudioTabController.pttLeftControllerEnabled audioPttRightControllerToggle.checked = AudioTabController.pttRightControllerEnabled audioPttShowNotificationToggle.checked = AudioTabController.pttShowNotification + audioPttReverseToggle.checked = AudioTabController.micReversePtt componentCompleted = true } @@ -491,6 +502,9 @@ MyStackViewPage { onMicProximitySensorCanMuteChanged: { audioMuteProximitySensorToggle.checked = AudioTabController.micProximitySensorCanMute } + onMicReversePttChanged: { + audioPttReverseToggle.checked = AudioTabController.micReversePtt + } onPttEnabledChanged: { audioPttEnabledToggle.checked = AudioTabController.pttEnabled } diff --git a/src/tabcontrollers/AudioTabController.cpp b/src/tabcontrollers/AudioTabController.cpp index f63bfce..ce14633 100644 --- a/src/tabcontrollers/AudioTabController.cpp +++ b/src/tabcontrollers/AudioTabController.cpp @@ -65,6 +65,7 @@ namespace advsettings { auto settings = OverlayController::appSettings(); settings->beginGroup(getSettingsName()); setMicProximitySensorCanMute(settings->value("micProximitySensorCanMute", false).toBool(), false); + setMicReversePtt(settings->value("micReversePtt", false).toBool(), false); settings->endGroup(); } @@ -72,6 +73,7 @@ namespace advsettings { auto settings = OverlayController::appSettings(); settings->beginGroup(getSettingsName()); settings->setValue("micProximitySensorCanMute", micProximitySensorCanMute()); + settings->setValue("micReversePtt", micReversePtt()); settings->endGroup(); settings->sync(); } @@ -100,6 +102,10 @@ namespace advsettings { return m_micProximitySensorCanMute; } + bool AudioTabController::micReversePtt() const { + return m_micReversePtt; + } + void AudioTabController::eventLoopTick() { if (!eventLoopMutex.try_lock()) { return; @@ -155,15 +161,27 @@ namespace advsettings { } void AudioTabController::onPttStart() { - setMicMuted(false); + if (m_micReversePtt) { + setMicMuted(true); + } else { + setMicMuted(false); + } } void AudioTabController::onPttEnabled() { - setMicMuted(true); + if (m_micReversePtt) { + setMicMuted(false); + } else { + setMicMuted(true); + } } void AudioTabController::onPttStop() { - setMicMuted(true); + if (m_micReversePtt) { + setMicMuted(false); + } else { + setMicMuted(true); + } } void AudioTabController::onPttDisabled() { @@ -233,6 +251,24 @@ namespace advsettings { } } + void AudioTabController::setMicReversePtt(bool value, bool notify) { + std::lock_guard lock(eventLoopMutex); + if (value != m_micReversePtt) { + m_micReversePtt = value; + saveAudioSettings(); + if (m_pttEnabled) { + if (m_pttActive) { + setMicMuted(value); + } else { + setMicMuted(!value); + } + } + if (notify) { + emit micReversePttChanged(value); + } + } + } + void AudioTabController::onNewRecordingDevice() { findMicDeviceIndex(audioManager->getMicDevId()); } diff --git a/src/tabcontrollers/AudioTabController.h b/src/tabcontrollers/AudioTabController.h index 5280991..ee916a6 100644 --- a/src/tabcontrollers/AudioTabController.h +++ b/src/tabcontrollers/AudioTabController.h @@ -27,6 +27,7 @@ namespace advsettings { Q_PROPERTY(float micVolume READ micVolume WRITE setMicVolume NOTIFY micVolumeChanged) Q_PROPERTY(bool micMuted READ micMuted WRITE setMicMuted NOTIFY micMutedChanged) Q_PROPERTY(bool micProximitySensorCanMute READ micProximitySensorCanMute WRITE setMicProximitySensorCanMute NOTIFY micProximitySensorCanMuteChanged) + Q_PROPERTY(bool micReversePtt READ micReversePtt WRITE setMicReversePtt NOTIFY micReversePttChanged) private: OverlayController* parent; @@ -44,6 +45,7 @@ namespace advsettings { float m_micVolume = 1.0; bool m_micMuted = false; bool m_micProximitySensorCanMute = false; + bool m_micReversePtt = false; unsigned settingsUpdateCounter = 0; @@ -83,6 +85,7 @@ namespace advsettings { float micVolume() const; bool micMuted() const; bool micProximitySensorCanMute() const; + bool micReversePtt() const; Q_INVOKABLE int getPlaybackDeviceCount(); Q_INVOKABLE QString getPlaybackDeviceName(int index); @@ -102,6 +105,7 @@ namespace advsettings { void setMicVolume(float value, bool notify = true); void setMicMuted(bool value, bool notify = true); void setMicProximitySensorCanMute(bool value, bool notify = true); + void setMicReversePtt(bool value, bool notify = true); void setPlaybackDeviceIndex(int value, bool notify = true); void setMirrorDeviceIndex(int value, bool notify = true); @@ -118,6 +122,7 @@ namespace advsettings { void micVolumeChanged(float value); void micMutedChanged(bool value); void micProximitySensorCanMuteChanged(bool value); + void micReversePttChanged(bool value); void playbackDeviceListChanged(); void recordingDeviceListChanged(); diff --git a/src/tabcontrollers/PttController.h b/src/tabcontrollers/PttController.h index 0079a74..cad777c 100644 --- a/src/tabcontrollers/PttController.h +++ b/src/tabcontrollers/PttController.h @@ -48,7 +48,7 @@ namespace advsettings { Q_PROPERTY(bool pttLeftControllerEnabled READ pttLeftControllerEnabled WRITE setPttLeftControllerEnabled NOTIFY pttLeftControllerEnabledChanged) Q_PROPERTY(bool pttRightControllerEnabled READ pttRightControllerEnabled WRITE setPttRightControllerEnabled NOTIFY pttRightControllerEnabledChanged) - private: + protected: bool m_pttEnabled = false; bool m_pttActive = false; bool m_pttShowNotification = false;