
* add focusController class * add more key handlers * add focus navigation to qml * fixed language selector * add reverse focus change to FocusController * add default focus item * update transitions * update pages * add ListViewFocusController * fix ListView navigation * update CardType for using with focus navigation * remove useless key navigation * remove useless slots, logs, Drawer open and close * fix reverse focus move on listView * fix drawer radio buttons selection * fix drawer layout and focus move * fix PageSetupWizardProtocolSettings focus move * fix back navigation on default focus item * fix crashes after ListView navigation * fix protocol settings focus move * fix focus on users on page share * clean up page share * fix server rename * fix page share default server selection * refactor about page for correct focus move * fix focus move on list views with header and-or footer * minor fixes * fix server list back button handler * fix spawn signals on switch * fix share details drawer * fix drawer open close usage * refactor listViewFocusController * refactor focusController to make the logic more straightforward * fix focus on notification * update config page for scrolling with tab * fix crash on return with esc key * fix focus navigation in dynamic delegate of list view * fix focus move on qr code on share page * refactor page logging settings for focus navigation * update popup * Bump version * Add mandatory requirement for android.software.leanback. * Fix importing files on TVs * fix: add separate method for reading files to fix file reading on Android TV * fix(android): add CHANGE_NETWORK_STATE permission for all Android versions * Fix connection check for AWG/WG * chore: minor fixes (#1235) * fix: add a workaround to open files on Android TV due to lack of SAF * fix: change the banner format for TV * refactor: make TvFilePicker activity more sustainable * fix: add the touch emulation method for Android TV * fix: null uri processing * fix: add the touch emulation method for Android TV * fix: hide UI elements that use file saving * chore: bump version code * add `ScrollBarType` * update initial config page * refactor credentials setup page to handle the focus navigation * add `setDelegateIndex` method to `listViewFocusController` * fix focus behavior on new page/popup * make minor fixes and clean up * fix: get rid of the assign function call * Scrollbar is on if the content is larger than a screen * Fix selection in language change list * Update select language list * update logging settings page * fix checked item in lists * fix split tunneling settings * make unchangable properties readonly * refactor SwitcherType * fix hide/unhide password * `PageShare` readonly properties * Fix list view focus moving on `PageShare` * remove manual focus control on `PageShare` * format `ListViewFocusController` * format `FocusController` * add `focusControl` with utility functions for focus control * refactor `listViewFocusController` acoording to `focusControl` * refactor `focusConroller` according to `focusControl` * add `printSectionName` method to `listViewController` * remove arrow from `Close application` item * fix focus movement in `ServersListView` * `Restore from backup` is visible only on start screen * `I have nothing` is visible only on start screen * fix back button on `SelectLanguageDrawer` * rename `focusControl` to `qmlUtils` * fix `CMakeLists.txt` * fix `ScrollBarType` * fix `PageSetupWizardApiServicesList` * fix focus movement on dynamic delegates in listView * refactor `PageSetupWizardProtocols` * remove comments and clean up * fix `ListViewWithLabelsType` * fix `PageProtocolCloakSettings` * fix `PageSettingsAppSplitTunneling` * fix `PageDevMenu` * remove debug output from `FocusController` * remove debug output from `ListViewFocusController` * remove debug output from `focusControl` * `focusControl` => `FocusControl` --------- Co-authored-by: albexk <albexk@proton.me> Co-authored-by: Nethius <nethiuswork@gmail.com>
323 lines
No EOL
8.1 KiB
C++
323 lines
No EOL
8.1 KiB
C++
#include "settingsController.h"
|
|
|
|
#include <QStandardPaths>
|
|
|
|
#include "logger.h"
|
|
#include "systemController.h"
|
|
#include "ui/qautostart.h"
|
|
#include "version.h"
|
|
#ifdef Q_OS_ANDROID
|
|
#include "platforms/android/android_controller.h"
|
|
#endif
|
|
|
|
#ifdef Q_OS_IOS
|
|
#include <AmneziaVPN-Swift.h>
|
|
#endif
|
|
|
|
SettingsController::SettingsController(const QSharedPointer<ServersModel> &serversModel,
|
|
const QSharedPointer<ContainersModel> &containersModel,
|
|
const QSharedPointer<LanguageModel> &languageModel,
|
|
const QSharedPointer<SitesModel> &sitesModel,
|
|
const QSharedPointer<AppSplitTunnelingModel> &appSplitTunnelingModel,
|
|
const std::shared_ptr<Settings> &settings, QObject *parent)
|
|
: QObject(parent),
|
|
m_serversModel(serversModel),
|
|
m_containersModel(containersModel),
|
|
m_languageModel(languageModel),
|
|
m_sitesModel(sitesModel),
|
|
m_appSplitTunnelingModel(appSplitTunnelingModel),
|
|
m_settings(settings)
|
|
{
|
|
m_appVersion = QString("%1 (%2, %3)").arg(QString(APP_VERSION), __DATE__, GIT_COMMIT_HASH);
|
|
checkIfNeedDisableLogs();
|
|
#ifdef Q_OS_ANDROID
|
|
connect(AndroidController::instance(), &AndroidController::notificationStateChanged, this, &SettingsController::onNotificationStateChanged);
|
|
#endif
|
|
}
|
|
|
|
void SettingsController::toggleAmneziaDns(bool enable)
|
|
{
|
|
m_settings->setUseAmneziaDns(enable);
|
|
emit amneziaDnsToggled(enable);
|
|
}
|
|
|
|
bool SettingsController::isAmneziaDnsEnabled()
|
|
{
|
|
return m_settings->useAmneziaDns();
|
|
}
|
|
|
|
QString SettingsController::getPrimaryDns()
|
|
{
|
|
return m_settings->primaryDns();
|
|
}
|
|
|
|
void SettingsController::setPrimaryDns(const QString &dns)
|
|
{
|
|
m_settings->setPrimaryDns(dns);
|
|
emit primaryDnsChanged();
|
|
}
|
|
|
|
QString SettingsController::getSecondaryDns()
|
|
{
|
|
return m_settings->secondaryDns();
|
|
}
|
|
|
|
void SettingsController::setSecondaryDns(const QString &dns)
|
|
{
|
|
return m_settings->setSecondaryDns(dns);
|
|
emit secondaryDnsChanged();
|
|
}
|
|
|
|
bool SettingsController::isLoggingEnabled()
|
|
{
|
|
return m_settings->isSaveLogs();
|
|
}
|
|
|
|
void SettingsController::toggleLogging(bool enable)
|
|
{
|
|
m_settings->setSaveLogs(enable);
|
|
#ifdef Q_OS_IOS
|
|
AmneziaVPN::toggleLogging(enable);
|
|
#endif
|
|
if (enable == true) {
|
|
qInfo().noquote() << QString("Logging has enabled on %1 version %2 %3").arg(APPLICATION_NAME, APP_VERSION, GIT_COMMIT_HASH);
|
|
qInfo().noquote() << QString("%1 (%2)").arg(QSysInfo::prettyProductName(), QSysInfo::currentCpuArchitecture());
|
|
}
|
|
emit loggingStateChanged();
|
|
}
|
|
|
|
void SettingsController::openLogsFolder()
|
|
{
|
|
Logger::openLogsFolder(false);
|
|
}
|
|
|
|
void SettingsController::openServiceLogsFolder()
|
|
{
|
|
Logger::openLogsFolder(true);
|
|
}
|
|
|
|
void SettingsController::exportLogsFile(const QString &fileName)
|
|
{
|
|
#ifdef Q_OS_ANDROID
|
|
AndroidController::instance()->exportLogsFile(fileName);
|
|
#else
|
|
SystemController::saveFile(fileName, Logger::getLogFile());
|
|
#endif
|
|
}
|
|
|
|
void SettingsController::exportServiceLogsFile(const QString &fileName)
|
|
{
|
|
#ifdef Q_OS_ANDROID
|
|
AndroidController::instance()->exportLogsFile(fileName);
|
|
#else
|
|
SystemController::saveFile(fileName, Logger::getServiceLogFile());
|
|
#endif
|
|
}
|
|
|
|
void SettingsController::clearLogs()
|
|
{
|
|
#ifdef Q_OS_ANDROID
|
|
AndroidController::instance()->clearLogs();
|
|
#else
|
|
Logger::clearLogs(false);
|
|
Logger::clearServiceLogs();
|
|
#endif
|
|
}
|
|
|
|
void SettingsController::backupAppConfig(const QString &fileName)
|
|
{
|
|
SystemController::saveFile(fileName, m_settings->backupAppConfig());
|
|
}
|
|
|
|
void SettingsController::restoreAppConfig(const QString &fileName)
|
|
{
|
|
QByteArray data;
|
|
SystemController::readFile(fileName, data);
|
|
restoreAppConfigFromData(data);
|
|
}
|
|
|
|
void SettingsController::restoreAppConfigFromData(const QByteArray &data)
|
|
{
|
|
bool ok = m_settings->restoreAppConfig(data);
|
|
if (ok) {
|
|
m_serversModel->resetModel();
|
|
m_languageModel->changeLanguage(
|
|
static_cast<LanguageSettings::AvailableLanguageEnum>(m_languageModel->getCurrentLanguageIndex()));
|
|
emit restoreBackupFinished();
|
|
} else {
|
|
emit changeSettingsErrorOccurred(tr("Backup file is corrupted"));
|
|
}
|
|
}
|
|
|
|
QString SettingsController::getAppVersion()
|
|
{
|
|
return m_appVersion;
|
|
}
|
|
|
|
void SettingsController::clearSettings()
|
|
{
|
|
m_settings->clearSettings();
|
|
m_serversModel->resetModel();
|
|
m_languageModel->changeLanguage(
|
|
static_cast<LanguageSettings::AvailableLanguageEnum>(m_languageModel->getCurrentLanguageIndex()));
|
|
|
|
m_sitesModel->setRouteMode(Settings::RouteMode::VpnOnlyForwardSites);
|
|
m_sitesModel->toggleSplitTunneling(false);
|
|
|
|
m_appSplitTunnelingModel->setRouteMode(Settings::AppsRouteMode::VpnAllExceptApps);
|
|
m_appSplitTunnelingModel->toggleSplitTunneling(false);
|
|
|
|
emit changeSettingsFinished(tr("All settings have been reset to default values"));
|
|
|
|
#ifdef Q_OS_IOS
|
|
AmneziaVPN::clearSettings();
|
|
#endif
|
|
}
|
|
|
|
bool SettingsController::isAutoConnectEnabled()
|
|
{
|
|
return m_settings->isAutoConnect();
|
|
}
|
|
|
|
void SettingsController::toggleAutoConnect(bool enable)
|
|
{
|
|
m_settings->setAutoConnect(enable);
|
|
}
|
|
|
|
bool SettingsController::isAutoStartEnabled()
|
|
{
|
|
return Autostart::isAutostart();
|
|
}
|
|
|
|
void SettingsController::toggleAutoStart(bool enable)
|
|
{
|
|
Autostart::setAutostart(enable);
|
|
}
|
|
|
|
bool SettingsController::isStartMinimizedEnabled()
|
|
{
|
|
return m_settings->isStartMinimized();
|
|
}
|
|
|
|
void SettingsController::toggleStartMinimized(bool enable)
|
|
{
|
|
m_settings->setStartMinimized(enable);
|
|
}
|
|
|
|
bool SettingsController::isScreenshotsEnabled()
|
|
{
|
|
return m_settings->isScreenshotsEnabled();
|
|
}
|
|
|
|
void SettingsController::toggleScreenshotsEnabled(bool enable)
|
|
{
|
|
m_settings->setScreenshotsEnabled(enable);
|
|
}
|
|
|
|
bool SettingsController::isCameraPresent()
|
|
{
|
|
#if defined Q_OS_IOS
|
|
return true;
|
|
#elif defined Q_OS_ANDROID
|
|
return AndroidController::instance()->isCameraPresent();
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
|
|
void SettingsController::checkIfNeedDisableLogs()
|
|
{
|
|
if (m_settings->isSaveLogs()) {
|
|
m_loggingDisableDate = m_settings->getLogEnableDate().addDays(14);
|
|
if (m_loggingDisableDate <= QDateTime::currentDateTime()) {
|
|
toggleLogging(false);
|
|
clearLogs();
|
|
emit loggingDisableByWatcher();
|
|
}
|
|
}
|
|
}
|
|
|
|
bool SettingsController::isKillSwitchEnabled()
|
|
{
|
|
return m_settings->isKillSwitchEnabled();
|
|
}
|
|
|
|
void SettingsController::toggleKillSwitch(bool enable)
|
|
{
|
|
m_settings->setKillSwitchEnabled(enable);
|
|
}
|
|
|
|
bool SettingsController::isNotificationPermissionGranted()
|
|
{
|
|
#ifdef Q_OS_ANDROID
|
|
return AndroidController::instance()->isNotificationPermissionGranted();
|
|
#else
|
|
return true;
|
|
#endif
|
|
}
|
|
|
|
void SettingsController::requestNotificationPermission()
|
|
{
|
|
#ifdef Q_OS_ANDROID
|
|
AndroidController::instance()->requestNotificationPermission();
|
|
#endif
|
|
}
|
|
|
|
QString SettingsController::getInstallationUuid()
|
|
{
|
|
return m_settings->getInstallationUuid(false);
|
|
}
|
|
|
|
void SettingsController::enableDevMode()
|
|
{
|
|
m_isDevModeEnabled = true;
|
|
emit devModeEnabled();
|
|
}
|
|
|
|
bool SettingsController::isDevModeEnabled()
|
|
{
|
|
return m_isDevModeEnabled;
|
|
}
|
|
|
|
void SettingsController::resetGatewayEndpoint()
|
|
{
|
|
m_settings->resetGatewayEndpoint();
|
|
emit gatewayEndpointChanged(m_settings->getGatewayEndpoint());
|
|
}
|
|
|
|
void SettingsController::setGatewayEndpoint(const QString &endpoint)
|
|
{
|
|
m_settings->setGatewayEndpoint(endpoint);
|
|
emit gatewayEndpointChanged(endpoint);
|
|
}
|
|
|
|
QString SettingsController::getGatewayEndpoint()
|
|
{
|
|
return m_settings->isDevGatewayEnv() ? "Dev endpoint" : m_settings->getGatewayEndpoint();
|
|
}
|
|
|
|
bool SettingsController::isDevGatewayEnv()
|
|
{
|
|
return m_settings->isDevGatewayEnv();
|
|
}
|
|
|
|
void SettingsController::toggleDevGatewayEnv(bool enabled)
|
|
{
|
|
m_settings->toggleDevGatewayEnv(enabled);
|
|
if (enabled) {
|
|
m_settings->setDevGatewayEndpoint();
|
|
} else {
|
|
m_settings->resetGatewayEndpoint();
|
|
}
|
|
emit gatewayEndpointChanged(m_settings->getGatewayEndpoint());
|
|
emit devGatewayEnvChanged(enabled);
|
|
}
|
|
|
|
bool SettingsController::isOnTv()
|
|
{
|
|
#ifdef Q_OS_ANDROID
|
|
return AndroidController::instance()->isOnTv();
|
|
#else
|
|
return false;
|
|
#endif
|
|
} |