diff --git a/client/ui/qml/Pages2/PageProtocolAwgSettings.qml b/client/ui/qml/Pages2/PageProtocolAwgSettings.qml index 699ae7244..2140f740d 100644 --- a/client/ui/qml/Pages2/PageProtocolAwgSettings.qml +++ b/client/ui/qml/Pages2/PageProtocolAwgSettings.qml @@ -19,334 +19,343 @@ import "../Components" PageType { id: root - ColumnLayout { - id: backButtonLayout + BackButtonType { + id: backButton anchors.top: parent.top anchors.left: parent.left anchors.right: parent.right - anchors.topMargin: 20 - BackButtonType { - id: backButton + onActiveFocusChanged: { + if(backButton.enabled && backButton.activeFocus) { + listView.positionViewAtBeginning() + } } } - ListView { - id: listview - - property bool isFocusable: true + ListViewType { + id: listView anchors.top: backButtonLayout.bottom anchors.bottom: parent.bottom - - width: parent.width - - Keys.onTabPressed: { - FocusController.nextKeyTabItem() - } - - Keys.onBacktabPressed: { - FocusController.previousKeyTabItem() - } - - Keys.onUpPressed: { - FocusController.nextKeyUpItem() - } - - Keys.onDownPressed: { - FocusController.nextKeyDownItem() - } - - Keys.onLeftPressed: { - FocusController.nextKeyLeftItem() - } - - Keys.onRightPressed: { - FocusController.nextKeyRightItem() - } - - clip: true + anchors.left: parent.left + anchors.right: parent.right model: AwgConfigModel - delegate: Item { + delegate: ColumnLayout { id: delegateItem - implicitWidth: listview.width - implicitHeight: col.implicitHeight + + width: listView.width property alias vpnAddressSubnetTextField: vpnAddressSubnetTextField property bool isEnabled: ServersModel.isProcessedServerHasWriteAccess() - ColumnLayout { - id: col + spacing: 0 - anchors.top: parent.top - anchors.left: parent.left - anchors.right: parent.right + BaseHeaderType { + Layout.fillWidth: true + Layout.leftMargin: 16 + Layout.rightMargin: 16 - anchors.leftMargin: 16 - anchors.rightMargin: 16 + headerText: qsTr("AmneziaWG settings") + } - spacing: 0 + TextFieldWithHeaderType { + id: vpnAddressSubnetTextField - BaseHeaderType { - Layout.fillWidth: true + Layout.fillWidth: true + Layout.topMargin: 40 + Layout.leftMargin: 16 + Layout.rightMargin: 16 - headerText: qsTr("AmneziaWG settings") - } + enabled: delegateItem.isEnabled - TextFieldWithHeaderType { - id: vpnAddressSubnetTextField + headerText: qsTr("VPN address subnet") + textField.text: subnetAddress - Layout.fillWidth: true - Layout.topMargin: 40 - - enabled: delegateItem.isEnabled - - headerText: qsTr("VPN address subnet") - textField.text: subnetAddress - - textField.onEditingFinished: { - if (textField.text !== subnetAddress) { - subnetAddress = textField.text - } - } - - checkEmptyText: true - } - - TextFieldWithHeaderType { - id: portTextField - Layout.fillWidth: true - Layout.topMargin: 16 - - enabled: delegateItem.isEnabled - - headerText: qsTr("Port") - textField.text: port - textField.maximumLength: 5 - textField.validator: IntValidator { bottom: 1; top: 65535 } - - textField.onEditingFinished: { - if (textField.text !== port) { - port = textField.text - } - } - - checkEmptyText: true - } - - AwgTextField { - id: junkPacketCountTextField - headerText: qsTr("Jc - Junk packet count") - textField.text: serverJunkPacketCount - - textField.onEditingFinished: { - if (textField.text !== serverJunkPacketCount) { - serverJunkPacketCount = textField.text - } + textField.onEditingFinished: { + if (textField.text !== subnetAddress) { + subnetAddress = textField.text } } - AwgTextField { - id: junkPacketMinSizeTextField - headerText: qsTr("Jmin - Junk packet minimum size") - textField.text: serverJunkPacketMinSize + checkEmptyText: true + } - textField.onEditingFinished: { - if (textField.text !== serverJunkPacketMinSize) { - serverJunkPacketMinSize = textField.text - } + TextFieldWithHeaderType { + id: portTextField + Layout.fillWidth: true + Layout.topMargin: 16 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + enabled: delegateItem.isEnabled + + headerText: qsTr("Port") + textField.text: port + textField.maximumLength: 5 + textField.validator: IntValidator { bottom: 1; top: 65535 } + + textField.onEditingFinished: { + if (textField.text !== port) { + port = textField.text } } - AwgTextField { - id: junkPacketMaxSizeTextField - headerText: qsTr("Jmax - Junk packet maximum size") - textField.text: serverJunkPacketMaxSize + checkEmptyText: true + } - textField.onEditingFinished: { - if (textField.text !== serverJunkPacketMaxSize) { - serverJunkPacketMaxSize = textField.text - } + AwgTextField { + id: junkPacketCountTextField + + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + headerText: qsTr("Jc - Junk packet count") + textField.text: serverJunkPacketCount + + textField.onEditingFinished: { + if (textField.text !== serverJunkPacketCount) { + serverJunkPacketCount = textField.text + } + } + } + + AwgTextField { + id: junkPacketMinSizeTextField + + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + headerText: qsTr("Jmin - Junk packet minimum size") + textField.text: serverJunkPacketMinSize + + textField.onEditingFinished: { + if (textField.text !== serverJunkPacketMinSize) { + serverJunkPacketMinSize = textField.text + } + } + } + + AwgTextField { + id: junkPacketMaxSizeTextField + + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + headerText: qsTr("Jmax - Junk packet maximum size") + textField.text: serverJunkPacketMaxSize + + textField.onEditingFinished: { + if (textField.text !== serverJunkPacketMaxSize) { + serverJunkPacketMaxSize = textField.text + } + } + } + + AwgTextField { + id: initPacketJunkSizeTextField + + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + headerText: qsTr("S1 - Init packet junk size") + textField.text: serverInitPacketJunkSize + + textField.onEditingFinished: { + if (textField.text !== serverInitPacketJunkSize) { + serverInitPacketJunkSize = textField.text + } + } + } + + AwgTextField { + id: responsePacketJunkSizeTextField + + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + headerText: qsTr("S2 - Response packet junk size") + textField.text: serverResponsePacketJunkSize + + textField.onEditingFinished: { + if (textField.text !== serverResponsePacketJunkSize) { + serverResponsePacketJunkSize = textField.text + } + } + } + + // AwgTextField { + // id: cookieReplyPacketJunkSizeTextField + + // Layout.leftMargin: 16 + // Layout.rightMargin: 16 + + // headerText: qsTr("S3 - Cookie reply packet junk size") + // textField.text: serverCookieReplyPacketJunkSize + + // textField.onEditingFinished: { + // if (textField.text !== serverCookieReplyPacketJunkSize) { + // serverCookieReplyPacketJunkSize = textField.text + // } + // } + // } + + // AwgTextField { + // id: transportPacketJunkSizeTextField + + // Layout.leftMargin: 16 + // Layout.rightMargin: 16 + + // headerText: qsTr("S4 - Transport packet junk size") + // textField.text: serverTransportPacketJunkSize + + // textField.onEditingFinished: { + // if (textField.text !== serverTransportPacketJunkSize) { + // serverTransportPacketJunkSize = textField.text + // } + // } + // } + + AwgTextField { + id: initPacketMagicHeaderTextField + + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + headerText: qsTr("H1 - Init packet magic header") + textField.text: serverInitPacketMagicHeader + + textField.onEditingFinished: { + if (textField.text !== serverInitPacketMagicHeader) { + serverInitPacketMagicHeader = textField.text + } + } + } + + AwgTextField { + id: responsePacketMagicHeaderTextField + + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + headerText: qsTr("H2 - Response packet magic header") + textField.text: serverResponsePacketMagicHeader + + textField.onEditingFinished: { + if (textField.text !== serverResponsePacketMagicHeader) { + serverResponsePacketMagicHeader = textField.text + } + } + } + + AwgTextField { + id: underloadPacketMagicHeaderTextField + + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + headerText: qsTr("H3 - Underload packet magic header") + textField.text: serverUnderloadPacketMagicHeader + + textField.onEditingFinished: { + if (textField.text !== serverUnderloadPacketMagicHeader) { + serverUnderloadPacketMagicHeader = textField.text + } + } + } + + AwgTextField { + id: transportPacketMagicHeaderTextField + + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + headerText: qsTr("H4 - Transport packet magic header") + textField.text: serverTransportPacketMagicHeader + + textField.onEditingFinished: { + if (textField.text !== serverTransportPacketMagicHeader) { + serverTransportPacketMagicHeader = textField.text + } + } + } + + BasicButtonType { + id: saveRestartButton + + Layout.fillWidth: true + Layout.topMargin: 24 + Layout.bottomMargin: 24 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + enabled: underloadPacketMagicHeaderTextField.errorText === "" && + transportPacketMagicHeaderTextField.errorText === "" && + responsePacketMagicHeaderTextField.errorText === "" && + initPacketMagicHeaderTextField.errorText === "" && + responsePacketJunkSizeTextField.errorText === "" && + // cookieReplyHeaderJunkTextField.errorText === "" && + // transportHeaderJunkTextField.errorText === "" && + initPacketJunkSizeTextField.errorText === "" && + junkPacketMaxSizeTextField.errorText === "" && + junkPacketMinSizeTextField.errorText === "" && + junkPacketCountTextField.errorText === "" && + portTextField.errorText === "" && + vpnAddressSubnetTextField.errorText === "" + + text: qsTr("Save") + + onActiveFocusChanged: { + if(activeFocus) { + listView.positionViewAtEnd() } } - AwgTextField { - id: initPacketJunkSizeTextField - headerText: qsTr("S1 - Init packet junk size") - textField.text: serverInitPacketJunkSize - - textField.onEditingFinished: { - if (textField.text !== serverInitPacketJunkSize) { - serverInitPacketJunkSize = textField.text + clickedFunc: function() { + if (delegateItem.isEnabled) { + if (AwgConfigModel.isHeadersEqual(underloadPacketMagicHeaderTextField.textField.text, + transportPacketMagicHeaderTextField.textField.text, + responsePacketMagicHeaderTextField.textField.text, + initPacketMagicHeaderTextField.textField.text)) { + PageController.showErrorMessage(qsTr("The values of the H1-H4 fields must be unique")) + return } - } - } - AwgTextField { - id: responsePacketJunkSizeTextField - headerText: qsTr("S2 - Response packet junk size") - textField.text: serverResponsePacketJunkSize - - textField.onEditingFinished: { - if (textField.text !== serverResponsePacketJunkSize) { - serverResponsePacketJunkSize = textField.text - } - } - } - - // AwgTextField { - // id: cookieReplyPacketJunkSizeTextField - // headerText: qsTr("S3 - Cookie reply packet junk size") - // textField.text: serverCookieReplyPacketJunkSize - - // textField.onEditingFinished: { - // if (textField.text !== serverCookieReplyPacketJunkSize) { - // serverCookieReplyPacketJunkSize = textField.text - // } - // } - // } - - // AwgTextField { - // id: transportPacketJunkSizeTextField - // headerText: qsTr("S4 - Transport packet junk size") - // textField.text: serverTransportPacketJunkSize - - // textField.onEditingFinished: { - // if (textField.text !== serverTransportPacketJunkSize) { - // serverTransportPacketJunkSize = textField.text - // } - // } - // } - - AwgTextField { - id: initPacketMagicHeaderTextField - headerText: qsTr("H1 - Init packet magic header") - textField.text: serverInitPacketMagicHeader - - textField.onEditingFinished: { - if (textField.text !== serverInitPacketMagicHeader) { - serverInitPacketMagicHeader = textField.text - } - } - } - - AwgTextField { - id: responsePacketMagicHeaderTextField - headerText: qsTr("H2 - Response packet magic header") - textField.text: serverResponsePacketMagicHeader - - textField.onEditingFinished: { - if (textField.text !== serverResponsePacketMagicHeader) { - serverResponsePacketMagicHeader = textField.text - } - } - } - - AwgTextField { - id: underloadPacketMagicHeaderTextField - headerText: qsTr("H3 - Underload packet magic header") - textField.text: serverUnderloadPacketMagicHeader - - textField.onEditingFinished: { - if (textField.text !== serverUnderloadPacketMagicHeader) { - serverUnderloadPacketMagicHeader = textField.text - } - } - } - - AwgTextField { - id: transportPacketMagicHeaderTextField - headerText: qsTr("H4 - Transport packet magic header") - textField.text: serverTransportPacketMagicHeader - - textField.onEditingFinished: { - if (textField.text !== serverTransportPacketMagicHeader) { - serverTransportPacketMagicHeader = textField.text - } - } - } - - - BasicButtonType { - id: saveRestartButton - - Layout.fillWidth: true - Layout.topMargin: 24 - Layout.bottomMargin: 24 - - enabled: underloadPacketMagicHeaderTextField.errorText === "" && - transportPacketMagicHeaderTextField.errorText === "" && - responsePacketMagicHeaderTextField.errorText === "" && - initPacketMagicHeaderTextField.errorText === "" && - responsePacketJunkSizeTextField.errorText === "" && - // cookieReplyHeaderJunkTextField.errorText === "" && - // transportHeaderJunkTextField.errorText === "" && - initPacketJunkSizeTextField.errorText === "" && - junkPacketMaxSizeTextField.errorText === "" && - junkPacketMinSizeTextField.errorText === "" && - junkPacketCountTextField.errorText === "" && - portTextField.errorText === "" && - vpnAddressSubnetTextField.errorText === "" - - text: qsTr("Save") - - onActiveFocusChanged: { - if(activeFocus) { - listview.positionViewAtEnd() + if (AwgConfigModel.isPacketSizeEqual(parseInt(initPacketJunkSizeTextField.textField.text), + parseInt(responsePacketJunkSizeTextField.textField.text))) { + PageController.showErrorMessage(qsTr("The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92)")) + return } + // if (AwgConfigModel.isPacketSizeEqual(parseInt(initPacketJunkSizeTextField.textField.text), + // parseInt(responsePacketJunkSizeTextField.textField.text), + // parseInt(cookieReplyPacketJunkSizeTextField.textField.text), + // parseInt(transportPacketJunkSizeTextField.textField.text))) { + // PageController.showErrorMessage(qsTr("The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) + S3 + cookie reply size (64) + S4 + transport packet size (32)")) + // return + // } } - clickedFunc: function() { - forceActiveFocus() + var headerText = qsTr("Save settings?") + var descriptionText = qsTr("All users with whom you shared a connection with will no longer be able to connect to it.") + var yesButtonText = qsTr("Continue") + var noButtonText = qsTr("Cancel") - if (delegateItem.isEnabled) { - if (AwgConfigModel.isHeadersEqual(underloadPacketMagicHeaderTextField.textField.text, - transportPacketMagicHeaderTextField.textField.text, - responsePacketMagicHeaderTextField.textField.text, - initPacketMagicHeaderTextField.textField.text)) { - PageController.showErrorMessage(qsTr("The values of the H1-H4 fields must be unique")) - return - } - - if (AwgConfigModel.isPacketSizeEqual(parseInt(initPacketJunkSizeTextField.textField.text), - parseInt(responsePacketJunkSizeTextField.textField.text))) { - PageController.showErrorMessage(qsTr("The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92)")) - return - } - // if (AwgConfigModel.isPacketSizeEqual(parseInt(initPacketJunkSizeTextField.textField.text), - // parseInt(responsePacketJunkSizeTextField.textField.text), - // parseInt(cookieReplyPacketJunkSizeTextField.textField.text), - // parseInt(transportPacketJunkSizeTextField.textField.text))) { - // PageController.showErrorMessage(qsTr("The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) + S3 + cookie reply size (64) + S4 + transport packet size (32)")) - // return - // } + var yesButtonFunction = function() { + if (ConnectionController.isConnected && ServersModel.getDefaultServerData("defaultContainer") === ContainersModel.getProcessedContainerIndex()) { + PageController.showNotificationMessage(qsTr("Unable change settings while there is an active connection")) + return } - var headerText = qsTr("Save settings?") - var descriptionText = qsTr("All users with whom you shared a connection with will no longer be able to connect to it.") - var yesButtonText = qsTr("Continue") - var noButtonText = qsTr("Cancel") - - var yesButtonFunction = function() { - if (ConnectionController.isConnected && ServersModel.getDefaultServerData("defaultContainer") === ContainersModel.getProcessedContainerIndex()) { - PageController.showNotificationMessage(qsTr("Unable change settings while there is an active connection")) - return - } - - PageController.goToPage(PageEnum.PageSetupWizardInstalling); - InstallController.updateContainer(AwgConfigModel.getConfig()) - } - var noButtonFunction = function() { - if (!GC.isMobile()) { - saveRestartButton.forceActiveFocus() - } - } - showQuestionDrawer(headerText, descriptionText, yesButtonText, noButtonText, yesButtonFunction, noButtonFunction) + PageController.goToPage(PageEnum.PageSetupWizardInstalling); + InstallController.updateContainer(AwgConfigModel.getConfig()) } + + var noButtonFunction = function() {} + + showQuestionDrawer(headerText, descriptionText, yesButtonText, noButtonText, yesButtonFunction, noButtonFunction) } } }