diff --git a/ground/openpilotgcs/src/plugins/coreplugin/generalsettings.cpp b/ground/openpilotgcs/src/plugins/coreplugin/generalsettings.cpp index 530bb543e..409dc47d2 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/generalsettings.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/generalsettings.cpp @@ -50,6 +50,7 @@ GeneralSettings::GeneralSettings() : m_useUDPMirror(false), m_useExpertMode(false), m_collectUsageData(true), + m_showUsageDataDisclaimer(true), m_dialog(0) {} @@ -147,7 +148,7 @@ void GeneralSettings::apply() m_useExpertMode = m_page->cbExpertMode->isChecked(); m_autoConnect = m_page->checkAutoConnect->isChecked(); m_autoSelect = m_page->checkAutoSelect->isChecked(); - m_collectUsageData = m_page->cbUsageData->isChecked(); + setCollectUsageData(m_page->cbUsageData->isChecked()); } void GeneralSettings::finish() @@ -165,6 +166,7 @@ void GeneralSettings::readSettings(QSettings *qs) m_useUDPMirror = qs->value(QLatin1String("UDPMirror"), m_useUDPMirror).toBool(); m_useExpertMode = qs->value(QLatin1String("ExpertMode"), m_useExpertMode).toBool(); m_collectUsageData = qs->value(QLatin1String("CollectUsageData"), m_collectUsageData).toBool(); + m_showUsageDataDisclaimer = qs->value(QLatin1String("ShowUsageDataDisclaimer"), m_showUsageDataDisclaimer).toBool(); qs->endGroup(); } @@ -184,6 +186,7 @@ void GeneralSettings::saveSettings(QSettings *qs) qs->setValue(QLatin1String("UDPMirror"), m_useUDPMirror); qs->setValue(QLatin1String("ExpertMode"), m_useExpertMode); qs->setValue(QLatin1String("CollectUsageData"), m_collectUsageData); + qs->setValue(QLatin1String("ShowUsageDataDisclaimer"), m_showUsageDataDisclaimer); qs->endGroup(); } @@ -259,11 +262,29 @@ bool GeneralSettings::collectUsageData() const return m_collectUsageData; } +bool GeneralSettings::showUsageDataDisclaimer() const +{ + return m_showUsageDataDisclaimer; +} + bool GeneralSettings::useExpertMode() const { return m_useExpertMode; } +bool GeneralSettings::setCollectUsageData(bool collect) +{ + if (collect && collect != m_collectUsageData) { + setShowUsageDataDisclaimer(true); + } + m_collectUsageData = collect; +} + +bool GeneralSettings::setShowUsageDataDisclaimer(bool show) +{ + m_showUsageDataDisclaimer = show; +} + void GeneralSettings::slotAutoConnect(int value) { if (value == Qt::Checked) { diff --git a/ground/openpilotgcs/src/plugins/coreplugin/generalsettings.h b/ground/openpilotgcs/src/plugins/coreplugin/generalsettings.h index 01c1c5f70..24a6acf14 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/generalsettings.h +++ b/ground/openpilotgcs/src/plugins/coreplugin/generalsettings.h @@ -58,10 +58,12 @@ public: bool autoSelect() const; bool useUDPMirror() const; bool collectUsageData() const; + bool showUsageDataDisclaimer() const; void readSettings(QSettings *qs); void saveSettings(QSettings *qs); bool useExpertMode() const; -signals: + bool setCollectUsageData(bool collect); + bool setShowUsageDataDisclaimer(bool show); private slots: void resetInterfaceColor(); @@ -81,6 +83,7 @@ private: bool m_useUDPMirror; bool m_useExpertMode; bool m_collectUsageData; + bool m_showUsageDataDisclaimer; QPointer m_dialog; QList m_codecs; }; diff --git a/ground/openpilotgcs/src/plugins/usagetracker/usagetrackerplugin.cpp b/ground/openpilotgcs/src/plugins/usagetracker/usagetrackerplugin.cpp index 9e45dbfdb..5fd2eb8c0 100644 --- a/ground/openpilotgcs/src/plugins/usagetracker/usagetrackerplugin.cpp +++ b/ground/openpilotgcs/src/plugins/usagetracker/usagetrackerplugin.cpp @@ -30,11 +30,15 @@ #include #include #include +#include #include +#include #include #include #include #include "version_info/version_info.h" +#include "coreplugin/icore.h" +#include "qmainwindow.h" UsageTrackerPlugin::UsageTrackerPlugin() : m_telemetryManager(NULL) @@ -72,6 +76,43 @@ void UsageTrackerPlugin::onAutopilotConnect() ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); Core::Internal::GeneralSettings *settings = pm->getObject(); if (settings->collectUsageData()) { + if (settings->showUsageDataDisclaimer()) { + QMessageBox message; + message.setWindowTitle(tr("Usage data collection")); + message.setIcon(QMessageBox::Information); + message.addButton(tr("Yes allow collecting information"), QMessageBox::AcceptRole); + message.addButton(tr("No do not allow collecting information"), QMessageBox::RejectRole); + message.setText(tr("Openpilot GCS has a function to collect limited anonymous information about " + "the usage of the application itself and the OpenPilot hardware connected to it.\n\n" + "The intention is to not include anything that can be considered sensitive " + "or a threat to the users integrity. The collected information will be sent " + "using a secure protocol to an OpenPilot web service and stored in a database " + "for later analysis and statistical purposes.\n" + "No information will be sold or given to any third party. The sole purpose is " + "to collect statistics about the usage of our software and hardware to enable us " + "to make things better for you users.\n\n" + "The following things are collected:\n" + "- Bootloader version\n" + "- Firmware version, tag and git hash\n" + "- OP Hardware type, revision and mcu serial number\n" + "- GCS version\n" + "- Operating system version and architecture\n" + "- Current local time\n\n" + "It is possible to enable or disable this functionality in the general " + "settings part of the options for the GCS application at any time.\n\n" + "Thank You for helping us making things better and for supporting OpenPilot!")); + QCheckBox* disclaimerCb = new QCheckBox(tr("&Don't show this message again.")); + disclaimerCb->setChecked(true); + message.setCheckBox(disclaimerCb); + if (message.exec() != QMessageBox::AcceptRole) { + settings->setCollectUsageData(false); + settings->setShowUsageDataDisclaimer(!message.checkBox()->isChecked()); + return; + } else { + settings->setCollectUsageData(true); + settings->setShowUsageDataDisclaimer(!message.checkBox()->isChecked()); + } + } QTimer::singleShot(1000, this, SLOT(trackUsage())); } }