diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index fbb69842bd..a567033c2f 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -603,6 +603,12 @@ Menu::Menu() { false, &UserActivityLogger::getInstance(), SLOT(disable(bool))); + addCheckableActionToQMenuAndActionHash(networkMenu, + MenuOption::DisableCrashLogger, + 0, + false, + &UserActivityLogger::getInstance(), + SLOT(crashDisable(bool))); addActionToQMenuAndActionHash(networkMenu, MenuOption::ShowDSConnectTable, 0, qApp, SLOT(loadDomainConnectionDialog())); diff --git a/interface/src/Menu.h b/interface/src/Menu.h index 1d6c010a05..19b42eb3f1 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -86,6 +86,7 @@ namespace MenuOption { const QString DeleteAvatarEntitiesBookmark = "Delete Avatar Entities Bookmark"; const QString DeleteBookmark = "Delete Bookmark..."; const QString DisableActivityLogger = "Disable Activity Logger"; + const QString DisableCrashLogger = "Disable Crash Logger"; const QString DisableEyelidAdjustment = "Disable Eyelid Adjustment"; const QString DisableLightEntities = "Disable Light Entities"; const QString DisplayCrashOptions = "Display Crash Options"; diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 81616e5773..27171a5828 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -218,7 +218,7 @@ int main(int argc, const char* argv[]) { } qDebug() << "UserActivityLogger is enabled:" << ual.isEnabled(); - if (ual.isEnabled()) { + if (ual.isCrashEnabled()) { auto crashHandlerStarted = startCrashHandler(argv[0]); qDebug() << "Crash handler started:" << crashHandlerStarted; } diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index 7e11406808..5791a06b85 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -254,7 +254,15 @@ void setupPreferences() { auto setter = [](bool value) { Menu::getInstance()->setIsOptionChecked(MenuOption::DisableActivityLogger, !value); }; preferences->addPreference(new CheckPreference("Privacy", "Send data - High Fidelity uses information provided by your " "client to improve the product through the logging of errors, tracking of usage patterns, " - "installation and system details, and crash events. By allowing High Fidelity to collect " + "installation and system details. By allowing High Fidelity to collect this information " + "you are helping to improve the product. ", getter, setter)); + } + + { + auto getter = []()->bool { return !Menu::getInstance()->isOptionChecked(MenuOption::DisableCrashLogger); }; + auto setter = [](bool value) { Menu::getInstance()->setIsOptionChecked(MenuOption::DisableCrashLogger, !value); }; + preferences->addPreference(new CheckPreference("Privacy", "Send crashes - Vircadia uses information provided by your " + "client to improve the product through crash events. By allowing Vircadia to collect " "this information you are helping to improve the product. ", getter, setter)); } diff --git a/libraries/networking/src/UserActivityLogger.cpp b/libraries/networking/src/UserActivityLogger.cpp index 269ff94b80..ec04d03851 100644 --- a/libraries/networking/src/UserActivityLogger.cpp +++ b/libraries/networking/src/UserActivityLogger.cpp @@ -34,6 +34,10 @@ void UserActivityLogger::disable(bool disable) { _disabled.set(disable); } +void UserActivityLogger::crashDisable(bool disable) { + _crashDisabled.set(disable); +} + void UserActivityLogger::logAction(QString action, QJsonObject details, JSONCallbackParameters params) { // qCDebug(networking).nospace() << ">>> UserActivityLogger::logAction(" << action << "," << QJsonDocument(details).toJson(); // This logs what the UserActivityLogger would normally send to centralized servers. diff --git a/libraries/networking/src/UserActivityLogger.h b/libraries/networking/src/UserActivityLogger.h index e4b91b1e81..a9bc5a8509 100644 --- a/libraries/networking/src/UserActivityLogger.h +++ b/libraries/networking/src/UserActivityLogger.h @@ -35,7 +35,11 @@ public slots: bool isEnabled() { return !_disabled.get(); } bool isDisabledSettingSet() const { return _disabled.isSet(); } + bool isCrashEnabled() { return !_crashDisabled.get(); } + bool isCrashDisabledSettingSet() const { return _crashDisabled.isSet(); } + void disable(bool disable); + void crashDisable(bool disable); void logAction(QString action, QJsonObject details = QJsonObject(), JSONCallbackParameters params = JSONCallbackParameters()); void launch(QString applicationVersion, bool previousSessionCrashed, int previousSessionRuntime); @@ -55,6 +59,7 @@ private slots: private: UserActivityLogger(); Setting::Handle _disabled { "UserActivityLoggerDisabled", true }; + Setting::Handle _crashDisabled { "CrashLoggerDisabled", true }; QElapsedTimer _timer; };