import QtQuick import QtQuick.Controls import QtQuick.Layouts import PageEnum 1.0 import Style 1.0 import "./" import "../Controls2" import "../Config" import "../Controls2/TextTypes" import "../Components" PageType { id: root defaultActiveFocusItem: focusItem Item { id: focusItem KeyNavigation.tab: backButton onFocusChanged: { if (focusItem.activeFocus) { fl.contentY = 0 } } } BackButtonType { id: backButton anchors.top: parent.top anchors.left: parent.left anchors.right: parent.right anchors.topMargin: 20 KeyNavigation.tab: GC.isMobile() ? switcher : switcherAutoStart } FlickableType { id: fl anchors.top: backButton.bottom anchors.bottom: parent.bottom contentHeight: content.height ColumnLayout { id: content anchors.top: parent.top anchors.left: parent.left anchors.right: parent.right spacing: 0 HeaderType { Layout.fillWidth: true Layout.leftMargin: 16 Layout.rightMargin: 16 headerText: qsTr("Application") } SwitcherType { id: switcher 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) } } KeyNavigation.tab: Qt.platform.os === "android" && !SettingsController.isNotificationPermissionGranted ? labelWithButtonNotification.rightButton : labelWithButtonLanguage.rightButton parentFlickable: fl } DividerType { visible: GC.isMobile() } LabelWithButtonType { id: labelWithButtonNotification visible: Qt.platform.os === "android" && !SettingsController.isNotificationPermissionGranted Layout.fillWidth: true text: qsTr("Enable notifications") descriptionText: qsTr("Enable notifications to show the VPN state in the status bar") rightImageSource: "qrc:/images/controls/chevron-right.svg" KeyNavigation.tab: labelWithButtonLanguage.rightButton parentFlickable: fl clickedFunction: function() { SettingsController.requestNotificationPermission() } } DividerType { visible: Qt.platform.os === "android" && !SettingsController.isNotificationPermissionGranted } SwitcherType { id: switcherAutoStart visible: !GC.isMobile() Layout.fillWidth: true Layout.margins: 16 text: qsTr("Auto start") descriptionText: qsTr("Launch the application every time the device is starts") KeyNavigation.tab: switcherAutoConnect parentFlickable: fl checked: SettingsController.isAutoStartEnabled() onCheckedChanged: { if (checked !== SettingsController.isAutoStartEnabled()) { SettingsController.toggleAutoStart(checked) } } } DividerType { visible: !GC.isMobile() } SwitcherType { id: switcherAutoConnect visible: !GC.isMobile() Layout.fillWidth: true Layout.margins: 16 text: qsTr("Auto connect") descriptionText: qsTr("Connect to VPN on app start") KeyNavigation.tab: switcherStartMinimized parentFlickable: fl checked: SettingsController.isAutoConnectEnabled() onCheckedChanged: { if (checked !== SettingsController.isAutoConnectEnabled()) { SettingsController.toggleAutoConnect(checked) } } } DividerType { visible: !GC.isMobile() } SwitcherType { id: switcherStartMinimized visible: !GC.isMobile() Layout.fillWidth: true Layout.margins: 16 text: qsTr("Start minimized") descriptionText: qsTr("Launch application minimized") KeyNavigation.tab: labelWithButtonLanguage.rightButton parentFlickable: fl checked: SettingsController.isStartMinimizedEnabled() onCheckedChanged: { if (checked !== SettingsController.isStartMinimizedEnabled()) { SettingsController.toggleStartMinimized(checked) } } } DividerType { visible: !GC.isMobile() } LabelWithButtonType { id: labelWithButtonLanguage Layout.fillWidth: true text: qsTr("Language") descriptionText: LanguageModel.currentLanguageName rightImageSource: "qrc:/images/controls/chevron-right.svg" KeyNavigation.tab: labelWithButtonLogging.rightButton parentFlickable: fl clickedFunction: function() { selectLanguageDrawer.open() } } DividerType {} LabelWithButtonType { id: labelWithButtonLogging Layout.fillWidth: true text: qsTr("Logging") descriptionText: SettingsController.isLoggingEnabled ? qsTr("Enabled") : qsTr("Disabled") rightImageSource: "qrc:/images/controls/chevron-right.svg" KeyNavigation.tab: labelWithButtonReset.rightButton parentFlickable: fl clickedFunction: function() { PageController.goToPage(PageEnum.PageSettingsLogging) } } DividerType {} LabelWithButtonType { id: labelWithButtonReset Layout.fillWidth: true text: qsTr("Reset settings and remove all data from the application") rightImageSource: "qrc:/images/controls/chevron-right.svg" textColor: AmneziaStyle.color.vibrantRed Keys.onTabPressed: lastItemTabClicked() parentFlickable: fl clickedFunction: function() { var headerText = qsTr("Reset settings and remove all data from the application?") var descriptionText = qsTr("All settings will be reset to default. All installed AmneziaVPN services will still remain on the server.") var yesButtonText = qsTr("Continue") var noButtonText = qsTr("Cancel") var yesButtonFunction = function() { if (ServersModel.isDefaultServerCurrentlyProcessed() && ConnectionController.isConnected) { PageController.showNotificationMessage(qsTr("Cannot reset settings during active connection")) } else { SettingsController.clearSettings() PageController.goToPageHome() } if (!GC.isMobile()) { root.defaultActiveFocusItem.forceActiveFocus() } } var noButtonFunction = function() { if (!GC.isMobile()) { root.defaultActiveFocusItem.forceActiveFocus() } } showQuestionDrawer(headerText, descriptionText, yesButtonText, noButtonText, yesButtonFunction, noButtonFunction) } } DividerType {} } } SelectLanguageDrawer { id: selectLanguageDrawer width: root.width height: root.height onClosed: { if (!GC.isMobile()) { focusItem.forceActiveFocus() } } } }