From 5f236bd0252994a2a902bd4dc9c03930de575275 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Wed, 14 Jun 2017 16:45:17 -0400 Subject: [PATCH 01/29] simplify device settings --- interface/src/scripting/AudioDevices.cpp | 70 +++++++++++++----------- interface/src/scripting/AudioDevices.h | 3 +- 2 files changed, 39 insertions(+), 34 deletions(-) diff --git a/interface/src/scripting/AudioDevices.cpp b/interface/src/scripting/AudioDevices.cpp index 055d59efe3..4abaf70127 100644 --- a/interface/src/scripting/AudioDevices.cpp +++ b/interface/src/scripting/AudioDevices.cpp @@ -9,6 +9,8 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include + #include "AudioDevices.h" #include "Application.h" @@ -17,10 +19,24 @@ using namespace scripting; -Setting::Handle inputDeviceDesktop { QStringList { Audio::AUDIO, Audio::DESKTOP, "INPUT" }}; -Setting::Handle outputDeviceDesktop { QStringList { Audio::AUDIO, Audio::DESKTOP, "OUTPUT" }}; -Setting::Handle inputDeviceHMD { QStringList { Audio::AUDIO, Audio::HMD, "INPUT" }}; -Setting::Handle outputDeviceHMD { QStringList { Audio::AUDIO, Audio::HMD, "OUTPUT" }}; +static Setting::Handle desktopInputDeviceSetting { QStringList { Audio::AUDIO, Audio::DESKTOP, "INPUT" }}; +static Setting::Handle desktopOutputDeviceSetting { QStringList { Audio::AUDIO, Audio::DESKTOP, "OUTPUT" }}; +static Setting::Handle hmdInputDeviceSetting { QStringList { Audio::AUDIO, Audio::HMD, "INPUT" }}; +static Setting::Handle hmdOutputDeviceSetting { QStringList { Audio::AUDIO, Audio::HMD, "OUTPUT" }}; + +const bool hmdSetting = true; +const bool desktopSetting = false; + +std::map> deviceSettings { + { desktopSetting, + { QAudio::AudioInput, desktopInputDeviceSetting }, + { QAudio::AudioOutput, desktopOutputDeviceSetting } + }, + { hmdSetting, + { QAudio::AudioInput, hmdInputDeviceSetting }, + { QAudio::AudioOutput, hmdOutputDeviceSetting } + } +}; QHash AudioDeviceList::_roles { { Qt::DisplayRole, "display" }, @@ -167,48 +183,38 @@ AudioDevices::AudioDevices(bool& contextIsHMD) : _contextIsHMD(contextIsHMD) { _inputs.onDevicesChanged(client->getAudioDevices(QAudio::AudioInput)); _outputs.onDevicesChanged(client->getAudioDevices(QAudio::AudioOutput)); - connect(&_inputs, &AudioDeviceList::deviceSelected, this, &AudioDevices::onInputDeviceSelected); - connect(&_outputs, &AudioDeviceList::deviceSelected, this, &AudioDevices::onOutputDeviceSelected); + connect(&_inputs, &AudioDeviceList::deviceSelected, [&](const QAudioDeviceInfo& device) { + onDeviceSelected(QAudio::AudioInput, device); + }); + connect(&_outputs, &AudioDeviceList::deviceSelected, [&](const QAudioDeviceInfo& device) { + onDeviceSelected(QAudio::AudioOutput, device); + }); } void AudioDevices::onContextChanged(const QString& context) { - QString input; - QString output; - if (_contextIsHMD) { - input = inputDeviceHMD.get(); - output = outputDeviceHMD.get(); - } else { - input = inputDeviceDesktop.get(); - output = outputDeviceDesktop.get(); - } + auto input = deviceSettings[_contextIsHMD][QAudio::AudioInput].get(); + auto output = deviceSettings[_contextIsHMD][QAudio::AudioOutput].get(); _inputs.resetDevice(_contextIsHMD, input); _outputs.resetDevice(_contextIsHMD, output); } -void AudioDevices::onInputDeviceSelected(const QAudioDeviceInfo& device) { +void AudioDevices::onDeviceSelected(QAudio::Mode mode, const QAudioDeviceInfo& device) { QString deviceName; if (!device.isNull()) { deviceName = device.deviceName(); } - if (_contextIsHMD) { - inputDeviceHMD.set(deviceName); - } else { - inputDeviceDesktop.set(deviceName); - } -} + auto& setting = deviceSettings[_contextIsHMD][mode]; -void AudioDevices::onOutputDeviceSelected(const QAudioDeviceInfo& device) { - QString deviceName; + // retrieve the prior device + auto lastDeviceName = setting.get(); + + // store the selected device + setting.set(deviceName); + + // TODO: log the selected device if (!device.isNull()) { - deviceName = device.deviceName(); - } - - if (_contextIsHMD) { - outputDeviceHMD.set(deviceName); - } else { - outputDeviceDesktop.set(deviceName); } } @@ -239,4 +245,4 @@ void AudioDevices::onDevicesChanged(QAudio::Mode mode, const QList& devices); From 837f37220af464cddd3f5ab316fa8eafe134a37b Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Wed, 14 Jun 2017 17:17:15 -0400 Subject: [PATCH 02/29] log selected_audio_device --- interface/src/scripting/AudioDevices.cpp | 52 +++++++++++++++++------- interface/src/scripting/AudioDevices.h | 5 ++- 2 files changed, 41 insertions(+), 16 deletions(-) diff --git a/interface/src/scripting/AudioDevices.cpp b/interface/src/scripting/AudioDevices.cpp index 4abaf70127..03416f5102 100644 --- a/interface/src/scripting/AudioDevices.cpp +++ b/interface/src/scripting/AudioDevices.cpp @@ -17,12 +17,17 @@ #include "AudioClient.h" #include "Audio.h" +#include "UserActivityLogger.h" + using namespace scripting; -static Setting::Handle desktopInputDeviceSetting { QStringList { Audio::AUDIO, Audio::DESKTOP, "INPUT" }}; -static Setting::Handle desktopOutputDeviceSetting { QStringList { Audio::AUDIO, Audio::DESKTOP, "OUTPUT" }}; -static Setting::Handle hmdInputDeviceSetting { QStringList { Audio::AUDIO, Audio::HMD, "INPUT" }}; -static Setting::Handle hmdOutputDeviceSetting { QStringList { Audio::AUDIO, Audio::HMD, "OUTPUT" }}; +static const INPUT = "INPUT"; +static const OUTPUT= "OUTPUT"; + +static Setting::Handle desktopInputDeviceSetting { QStringList { Audio::AUDIO, Audio::DESKTOP, INPUT }}; +static Setting::Handle desktopOutputDeviceSetting { QStringList { Audio::AUDIO, Audio::DESKTOP, OUTPUT }}; +static Setting::Handle hmdInputDeviceSetting { QStringList { Audio::AUDIO, Audio::HMD, INPUT }}; +static Setting::Handle hmdOutputDeviceSetting { QStringList { Audio::AUDIO, Audio::HMD, OUTPUT }}; const bool hmdSetting = true; const bool desktopSetting = false; @@ -82,7 +87,7 @@ bool AudioDeviceList::setData(const QModelIndex& index, const QVariant& value, i if (success) { device.selected = true; - emit deviceSelected(device.info); + emit deviceSelected(device.info, _selectedDevice); emit deviceChanged(device.info); } } @@ -109,7 +114,7 @@ void AudioDeviceList::resetDevice(bool contextIsHMD, const QString& device) { // the selection failed - reset it if (!success) { - emit deviceSelected(QAudioDeviceInfo()); + emit deviceSelected(); } } @@ -183,11 +188,11 @@ AudioDevices::AudioDevices(bool& contextIsHMD) : _contextIsHMD(contextIsHMD) { _inputs.onDevicesChanged(client->getAudioDevices(QAudio::AudioInput)); _outputs.onDevicesChanged(client->getAudioDevices(QAudio::AudioOutput)); - connect(&_inputs, &AudioDeviceList::deviceSelected, [&](const QAudioDeviceInfo& device) { - onDeviceSelected(QAudio::AudioInput, device); + connect(&_inputs, &AudioDeviceList::deviceSelected, [&](const QAudioDeviceInfo& device, const QAudioDeviceInfo& previousDevice) { + onDeviceSelected(QAudio::AudioInput, device, previousDevice); }); - connect(&_outputs, &AudioDeviceList::deviceSelected, [&](const QAudioDeviceInfo& device) { - onDeviceSelected(QAudio::AudioOutput, device); + connect(&_outputs, &AudioDeviceList::deviceSelected, [&](const QAudioDeviceInfo& device, const QAudioDeviceInfo& previousDevice) { + onDeviceSelected(QAudio::AudioOutput, device, previousDevice); }); } @@ -199,7 +204,7 @@ void AudioDevices::onContextChanged(const QString& context) { _outputs.resetDevice(_contextIsHMD, output); } -void AudioDevices::onDeviceSelected(QAudio::Mode mode, const QAudioDeviceInfo& device) { +void AudioDevices::onDeviceSelected(QAudio::Mode mode, const QAudioDeviceInfo& device, const QAudioDeviceInfo& previousDevice) { QString deviceName; if (!device.isNull()) { deviceName = device.deviceName(); @@ -207,14 +212,33 @@ void AudioDevices::onDeviceSelected(QAudio::Mode mode, const QAudioDeviceInfo& d auto& setting = deviceSettings[_contextIsHMD][mode]; - // retrieve the prior device - auto lastDeviceName = setting.get(); + // check for a previous device + auto wasDefault = setting.get().isNull(); // store the selected device setting.set(deviceName); - // TODO: log the selected device + // log the selected device if (!device.isNull()) { + QJsonObject data; + + const QString MODE = "audio_mode"; + data[MODE] = mode == QAudio::AudioInput ? INPUT : OUTPUT; + + const QString CONTEXT = "display_mode"; + data[CONTEXT] = _contextIsHMD ? Audio::HMD : Audio::DESKTOP; + + const QString DISPLAY = "display_device"; + data[DISPLAY] = qApp->getActiveDisplayPlugin()->getName(); + + const QString DEVICE = "device"; + const QString PREVIOUS_DEVICE = "previous_device"; + const QString WAS_DEFAULT = "was_default"; + data[DEVICE] = deviceName; + data[PREVIOUS_DEVICE] = previousDevice.deviceName(); + data[WAS_DEFAULT] = wasDefault; + + UserActivityLogger::getInstance()->logAction("selected_audio_device", data); } } diff --git a/interface/src/scripting/AudioDevices.h b/interface/src/scripting/AudioDevices.h index 54637d2269..c0f8c18b49 100644 --- a/interface/src/scripting/AudioDevices.h +++ b/interface/src/scripting/AudioDevices.h @@ -43,7 +43,8 @@ public: void resetDevice(bool contextIsHMD, const QString& device); signals: - void deviceSelected(const QAudioDeviceInfo& device); + void deviceSelected(const QAudioDeviceInfo& device = QAudioDeviceInfo(), + const QAudioDeviceInfo& previousDevice = QAudioDeviceInfo()); void deviceChanged(const QAudioDeviceInfo& device); private slots: @@ -76,7 +77,7 @@ signals: private slots: void onContextChanged(const QString& context); - void onDeviceSelected(QAudio::Mode mode, const QAudioDeviceInfo& device); + void onDeviceSelected(QAudio::Mode mode, const QAudioDeviceInfo& device, const QAudioDeviceInfo& previousDevice); void onDeviceChanged(QAudio::Mode mode, const QAudioDeviceInfo& device); void onDevicesChanged(QAudio::Mode mode, const QList& devices); From 3d807743176684e54cf30fed457904a64cc5fe79 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Mon, 19 Jun 2017 15:57:24 -0700 Subject: [PATCH 03/29] clean up select_audio_device --- interface/src/scripting/AudioDevices.cpp | 97 ++++++++++++------------ interface/src/scripting/AudioDevices.h | 2 + 2 files changed, 49 insertions(+), 50 deletions(-) diff --git a/interface/src/scripting/AudioDevices.cpp b/interface/src/scripting/AudioDevices.cpp index 03416f5102..949ce666c5 100644 --- a/interface/src/scripting/AudioDevices.cpp +++ b/interface/src/scripting/AudioDevices.cpp @@ -21,27 +21,21 @@ using namespace scripting; -static const INPUT = "INPUT"; -static const OUTPUT= "OUTPUT"; - -static Setting::Handle desktopInputDeviceSetting { QStringList { Audio::AUDIO, Audio::DESKTOP, INPUT }}; -static Setting::Handle desktopOutputDeviceSetting { QStringList { Audio::AUDIO, Audio::DESKTOP, OUTPUT }}; -static Setting::Handle hmdInputDeviceSetting { QStringList { Audio::AUDIO, Audio::HMD, INPUT }}; -static Setting::Handle hmdOutputDeviceSetting { QStringList { Audio::AUDIO, Audio::HMD, OUTPUT }}; +static Setting::Handle desktopInputDeviceSetting { QStringList { Audio::AUDIO, Audio::DESKTOP, "INPUT" }}; +static Setting::Handle desktopOutputDeviceSetting { QStringList { Audio::AUDIO, Audio::DESKTOP, "OUTPUT" }}; +static Setting::Handle hmdInputDeviceSetting { QStringList { Audio::AUDIO, Audio::HMD, "INPUT" }}; +static Setting::Handle hmdOutputDeviceSetting { QStringList { Audio::AUDIO, Audio::HMD, "OUTPUT" }}; const bool hmdSetting = true; const bool desktopSetting = false; -std::map> deviceSettings { - { desktopSetting, - { QAudio::AudioInput, desktopInputDeviceSetting }, - { QAudio::AudioOutput, desktopOutputDeviceSetting } - }, - { hmdSetting, - { QAudio::AudioInput, hmdInputDeviceSetting }, - { QAudio::AudioOutput, hmdOutputDeviceSetting } - } -}; +Setting::Handle& getSetting(bool contextIsHMD, QAudio::Mode mode) { + if (mode == QAudio::AudioInput) { + return contextIsHMD ? hmdInputDeviceSetting : desktopInputDeviceSetting; + } else { // if (mode == QAudio::AudioOutput) + return contextIsHMD ? hmdOutputDeviceSetting : desktopOutputDeviceSetting; + } +} QHash AudioDeviceList::_roles { { Qt::DisplayRole, "display" }, @@ -64,33 +58,38 @@ QVariant AudioDeviceList::data(const QModelIndex& index, int role) const { } bool AudioDeviceList::setData(const QModelIndex& index, const QVariant& value, int role) { - if (!index.isValid() || index.row() >= _devices.size()) { - return false; - } + if (!index.isValid() || index.row() >= _devices.size() || role != Qt::CheckStateRole) { + return false; + } + // only allow switching to a new device, not deactivating an in-use device + auto selected = value.toBool(); + if (!selected) { + return false; + } + + return setDevice(index.row(), true); +} + +bool AudioDeviceList::setDevice(int row, bool fromUser) { bool success = false; + auto& device = _devices[row]; - if (role == Qt::CheckStateRole) { - auto selected = value.toBool(); - auto& device = _devices[index.row()]; + // skip if already selected + if (!device.selected) { + auto client = DependencyManager::get(); + QMetaObject::invokeMethod(client.data(), "switchAudioDevice", Qt::BlockingQueuedConnection, + Q_RETURN_ARG(bool, success), + Q_ARG(QAudio::Mode, _mode), + Q_ARG(const QAudioDeviceInfo&, device.info)); - // only allow switching to a new device, not deactivating an in-use device - if (selected - // skip if already selected - && selected != device.selected) { - - auto client = DependencyManager::get(); - QMetaObject::invokeMethod(client.data(), "switchAudioDevice", Qt::BlockingQueuedConnection, - Q_RETURN_ARG(bool, success), - Q_ARG(QAudio::Mode, _mode), - Q_ARG(const QAudioDeviceInfo&, device.info)); - - if (success) { - device.selected = true; - emit deviceSelected(device.info, _selectedDevice); - emit deviceChanged(device.info); - } - } + if (success) { + device.selected = true; + if (fromUser) { + emit deviceSelected(device.info, _selectedDevice); + } + emit deviceChanged(device.info); + } } emit dataChanged(createIndex(0, 0), createIndex(rowCount() - 1, 0)); @@ -109,7 +108,7 @@ void AudioDeviceList::resetDevice(bool contextIsHMD, const QString& device) { } } if (i < rowCount()) { - success = setData(createIndex(i, 0), true, Qt::CheckStateRole); + success = setDevice(i, false); } // the selection failed - reset it @@ -197,20 +196,17 @@ AudioDevices::AudioDevices(bool& contextIsHMD) : _contextIsHMD(contextIsHMD) { } void AudioDevices::onContextChanged(const QString& context) { - auto input = deviceSettings[_contextIsHMD][QAudio::AudioInput].get(); - auto output = deviceSettings[_contextIsHMD][QAudio::AudioOutput].get(); + auto input = getSetting(_contextIsHMD, QAudio::AudioInput).get(); + auto output = getSetting(_contextIsHMD, QAudio::AudioOutput).get(); _inputs.resetDevice(_contextIsHMD, input); _outputs.resetDevice(_contextIsHMD, output); } void AudioDevices::onDeviceSelected(QAudio::Mode mode, const QAudioDeviceInfo& device, const QAudioDeviceInfo& previousDevice) { - QString deviceName; - if (!device.isNull()) { - deviceName = device.deviceName(); - } + QString deviceName = device.isNull() ? QString() : device.deviceName(); - auto& setting = deviceSettings[_contextIsHMD][mode]; + auto& setting = getSetting(_contextIsHMD, mode); // check for a previous device auto wasDefault = setting.get().isNull(); @@ -223,7 +219,8 @@ void AudioDevices::onDeviceSelected(QAudio::Mode mode, const QAudioDeviceInfo& d QJsonObject data; const QString MODE = "audio_mode"; - data[MODE] = mode == QAudio::AudioInput ? INPUT : OUTPUT; + const QString INPUT = "INPUT"; + const QString OUTPUT = "OUTPUT"; data[MODE] = mode == QAudio::AudioInput ? INPUT : OUTPUT; const QString CONTEXT = "display_mode"; data[CONTEXT] = _contextIsHMD ? Audio::HMD : Audio::DESKTOP; @@ -238,7 +235,7 @@ void AudioDevices::onDeviceSelected(QAudio::Mode mode, const QAudioDeviceInfo& d data[PREVIOUS_DEVICE] = previousDevice.deviceName(); data[WAS_DEFAULT] = wasDefault; - UserActivityLogger::getInstance()->logAction("selected_audio_device", data); + UserActivityLogger::getInstance().logAction("selected_audio_device", data); } } diff --git a/interface/src/scripting/AudioDevices.h b/interface/src/scripting/AudioDevices.h index c0f8c18b49..36d887d3d4 100644 --- a/interface/src/scripting/AudioDevices.h +++ b/interface/src/scripting/AudioDevices.h @@ -54,6 +54,8 @@ private slots: private: friend class AudioDevices; + bool setDevice(int index, bool fromUser); + static QHash _roles; static Qt::ItemFlags _flags; From 4bff925506b2f164b49828e470a86f3c440b5335 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Mon, 19 Jun 2017 17:01:39 -0700 Subject: [PATCH 04/29] rm unused bools --- interface/src/scripting/AudioDevices.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/interface/src/scripting/AudioDevices.cpp b/interface/src/scripting/AudioDevices.cpp index 949ce666c5..4e88232ce1 100644 --- a/interface/src/scripting/AudioDevices.cpp +++ b/interface/src/scripting/AudioDevices.cpp @@ -26,9 +26,6 @@ static Setting::Handle desktopOutputDeviceSetting { QStringList { Audio static Setting::Handle hmdInputDeviceSetting { QStringList { Audio::AUDIO, Audio::HMD, "INPUT" }}; static Setting::Handle hmdOutputDeviceSetting { QStringList { Audio::AUDIO, Audio::HMD, "OUTPUT" }}; -const bool hmdSetting = true; -const bool desktopSetting = false; - Setting::Handle& getSetting(bool contextIsHMD, QAudio::Mode mode) { if (mode == QAudio::AudioInput) { return contextIsHMD ? hmdInputDeviceSetting : desktopInputDeviceSetting; From d834a05fd9ef2e8ce7d4acd4216d43d1f9fe662d Mon Sep 17 00:00:00 2001 From: seefo Date: Thu, 22 Jun 2017 13:23:41 -0700 Subject: [PATCH 05/29] Added confirmation to domain server webpage before restarting --- domain-server/resources/web/header.html | 3 +++ domain-server/resources/web/js/domain-server.js | 14 +++++++++++--- domain-server/resources/web/settings/index.shtml | 1 - 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/domain-server/resources/web/header.html b/domain-server/resources/web/header.html index 0dc08e6e31..a37e9a6ff0 100644 --- a/domain-server/resources/web/header.html +++ b/domain-server/resources/web/header.html @@ -10,6 +10,7 @@ +