From 4e3955b39d1c22e86d81d238a8e037dbb3c9e61e Mon Sep 17 00:00:00 2001 From: "vladimir.kuznetsov" Date: Sun, 1 Oct 2023 12:06:50 +0300 Subject: [PATCH] Added switcher "Allow app screenshots" for android --- client/settings.h | 9 ++++ client/ui/controllers/importController.cpp | 9 ---- client/ui/controllers/settingsController.cpp | 42 +++++++++++++++++++ client/ui/controllers/settingsController.h | 3 ++ .../ui/qml/Pages2/PageSettingsApplication.qml | 20 +++++++++ 5 files changed, 74 insertions(+), 9 deletions(-) diff --git a/client/settings.h b/client/settings.h index 919ca731..f530f6c5 100644 --- a/client/settings.h +++ b/client/settings.h @@ -178,6 +178,15 @@ public: m_settings.setValue("Conf/appLanguage", locale); }; + bool isScreenshotsEnabled() const + { + return m_settings.value("Conf/screenshotsEnabled", false).toBool(); + } + void setScreenshotsEnabled(bool enabled) + { + m_settings.setValue("Conf/screenshotsEnabled", enabled); + } + void clearSettings(); signals: diff --git a/client/ui/controllers/importController.cpp b/client/ui/controllers/importController.cpp index d9278ece..aaea8db3 100644 --- a/client/ui/controllers/importController.cpp +++ b/client/ui/controllers/importController.cpp @@ -61,15 +61,6 @@ ImportController::ImportController(const QSharedPointer &serversMo { #ifdef Q_OS_ANDROID mInstance = this; - // Set security screen for Android app - AndroidUtils::runOnAndroidThreadSync([]() { - QJniObject activity = AndroidUtils::getActivity(); - QJniObject window = activity.callObjectMethod("getWindow", "()Landroid/view/Window;"); - if (window.isValid()) { - const int FLAG_SECURE = 8192; - window.callMethod("addFlags", "(I)V", FLAG_SECURE); - } - }); AndroidUtils::runOnAndroidThreadAsync([]() { JNINativeMethod methods[] { diff --git a/client/ui/controllers/settingsController.cpp b/client/ui/controllers/settingsController.cpp index 46993f6a..3edfe3d9 100644 --- a/client/ui/controllers/settingsController.cpp +++ b/client/ui/controllers/settingsController.cpp @@ -6,6 +6,11 @@ #include "systemController.h" #include "ui/qautostart.h" #include "version.h" +#ifdef Q_OS_ANDROID + #include "../../platforms/android/android_controller.h" + #include "../../platforms/android/androidutils.h" + #include +#endif SettingsController::SettingsController(const QSharedPointer &serversModel, const QSharedPointer &containersModel, @@ -18,6 +23,20 @@ SettingsController::SettingsController(const QSharedPointer &serve m_settings(settings) { m_appVersion = QString("%1: %2 (%3)").arg(tr("Software version"), QString(APP_MAJOR_VERSION), __DATE__); + +#ifdef Q_OS_ANDROID + if (!m_settings->isScreenshotsEnabled()) { + // Set security screen for Android app + AndroidUtils::runOnAndroidThreadSync([]() { + QJniObject activity = AndroidUtils::getActivity(); + QJniObject window = activity.callObjectMethod("getWindow", "()Landroid/view/Window;"); + if (window.isValid()) { + const int FLAG_SECURE = 8192; + window.callMethod("addFlags", "(I)V", FLAG_SECURE); + } + }); + } +#endif } void SettingsController::toggleAmneziaDns(bool enable) @@ -152,3 +171,26 @@ 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); +#ifdef Q_OS_ANDROID + std::string command = enable ? "clearFlags" : "addFlags"; + + // Set security screen for Android app + AndroidUtils::runOnAndroidThreadSync([&command]() { + QJniObject activity = AndroidUtils::getActivity(); + QJniObject window = activity.callObjectMethod("getWindow", "()Landroid/view/Window;"); + if (window.isValid()) { + const int FLAG_SECURE = 8192; + window.callMethod(command.c_str(), "(I)V", FLAG_SECURE); + } + }); +#endif +} \ No newline at end of file diff --git a/client/ui/controllers/settingsController.h b/client/ui/controllers/settingsController.h index 5a51a3b4..be041f3e 100644 --- a/client/ui/controllers/settingsController.h +++ b/client/ui/controllers/settingsController.h @@ -54,6 +54,9 @@ public slots: bool isStartMinimizedEnabled(); void toggleStartMinimized(bool enable); + bool isScreenshotsEnabled(); + void toggleScreenshotsEnabled(bool enable); + signals: void primaryDnsChanged(); void secondaryDnsChanged(); diff --git a/client/ui/qml/Pages2/PageSettingsApplication.qml b/client/ui/qml/Pages2/PageSettingsApplication.qml index 6f5e48a2..c5536fdb 100644 --- a/client/ui/qml/Pages2/PageSettingsApplication.qml +++ b/client/ui/qml/Pages2/PageSettingsApplication.qml @@ -43,6 +43,26 @@ PageType { headerText: qsTr("Application") } + SwitcherType { + visible: GC.isMobile() + + Layout.fillWidth: true + Layout.margins: 16 + + text: qsTr("Allow application screenshots") + + checked: SettingsController.isScreenshotsEnabled() + onCheckedChanged: { + if (checked !== SettingsController.isScreenshotsEnabled()) { + SettingsController.toggleScreenshotsEnabled(checked) + } + } + } + + DividerType { + visible: GC.isMobile() + } + SwitcherType { visible: !GC.isMobile()