2025-05-02 23:54:36 -07:00
import QtQuick
import QtQuick . Controls
import QtQuick . Layouts
import PageEnum 1.0
import Style 1.0
import "./"
import "../Controls2"
import "../Config"
PageType {
id: root
BackButtonType {
id: backButton
anchors.top: parent . top
anchors.left: parent . left
anchors.right: parent . right
anchors.topMargin: 20
}
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
HeaderTypeWithSwitcher {
Layout.fillWidth: true
Layout.leftMargin: 16
Layout.rightMargin: 16
headerText: qsTr ( "KillSwitch" )
descriptionText: qsTr ( "Enable to ensure network traffic goes through a secure VPN tunnel, preventing accidental exposure of your IP and DNS queries if the connection drops" )
showSwitcher: true
switcher {
checked: SettingsController . isKillSwitchEnabled
enabled: ! ConnectionController . isConnected
}
switcherFunction: function ( checked ) {
if ( ! ConnectionController . isConnected ) {
SettingsController . isKillSwitchEnabled = checked
} else {
2025-05-20 05:55:24 +03:00
PageController . showNotificationMessage ( qsTr ( "KillSwitch settings cannot be changed during an active connection" ) )
2025-05-02 23:54:36 -07:00
switcher . checked = SettingsController . isKillSwitchEnabled
}
}
}
VerticalRadioButton {
id: softKillSwitch
Layout.fillWidth: true
Layout.topMargin: 32
Layout.leftMargin: 16
Layout.rightMargin: 16
2025-07-07 10:26:16 +08:00
visible: false
// enabled: SettingsController.isKillSwitchEnabled && !ConnectionController.isConnected
2025-05-02 23:54:36 -07:00
checked: ! SettingsController . strictKillSwitchEnabled
text: qsTr ( "Soft KillSwitch" )
2025-05-20 05:55:24 +03:00
descriptionText: qsTr ( "Internet access is blocked if the VPN disconnects unexpectedly" )
2025-05-02 23:54:36 -07:00
onClicked: function ( ) {
SettingsController . strictKillSwitchEnabled = false
}
}
2025-07-07 10:26:16 +08:00
DividerType {
visible: false
}
2025-05-02 23:54:36 -07:00
VerticalRadioButton {
id: strictKillSwitch
Layout.fillWidth: true
Layout.leftMargin: 16
Layout.rightMargin: 16
2025-06-17 05:00:41 -07:00
enabled: SettingsController . isKillSwitchEnabled && ! ConnectionController . isConnected
2025-05-02 23:54:36 -07:00
checked: SettingsController . strictKillSwitchEnabled
text: qsTr ( "Strict KillSwitch" )
2025-05-20 05:55:24 +03:00
descriptionText: qsTr ( "Internet connection is blocked even when VPN is turned off manually or hasn't started" )
2025-05-02 23:54:36 -07:00
onClicked: function ( ) {
var headerText = qsTr ( "Just a little heads-up" )
2025-05-20 05:55:24 +03:00
var descriptionText = qsTr ( "If the VPN disconnects or drops while Strict KillSwitch is enabled, internet access will be blocked. To restore access, reconnect VPN or disable/change the KillSwitch." )
2025-05-02 23:54:36 -07:00
var yesButtonText = qsTr ( "Continue" )
var noButtonText = qsTr ( "Cancel" )
var yesButtonFunction = function ( ) {
SettingsController . strictKillSwitchEnabled = true
}
var noButtonFunction = function ( ) {
}
showQuestionDrawer ( headerText , descriptionText , yesButtonText , noButtonText , yesButtonFunction , noButtonFunction )
}
}
2025-06-17 05:00:41 -07:00
DividerType { }
2025-05-02 23:54:36 -07:00
LabelWithButtonType {
Layout.topMargin: 32
Layout.fillWidth: true
enabled: true
text: qsTr ( "DNS Exceptions" )
2025-05-20 05:55:24 +03:00
descriptionText: qsTr ( "DNS servers listed here will remain accessible when KillSwitch is active." )
2025-05-02 23:54:36 -07:00
rightImageSource: "qrc:/images/controls/chevron-right.svg"
clickedFunction: function ( ) {
PageController . goToPage ( PageEnum . PageSettingsKillSwitchExceptions )
}
}
}
}
}