diff --git a/client/images/plus.png b/client/images/plus.png deleted file mode 100644 index 81d44ec4..00000000 Binary files a/client/images/plus.png and /dev/null differ diff --git a/client/images/reload.png b/client/images/reload.png deleted file mode 100644 index 9c00222e..00000000 Binary files a/client/images/reload.png and /dev/null differ diff --git a/client/images/server_settings.png b/client/images/server_settings.png deleted file mode 100644 index fddc8b1a..00000000 Binary files a/client/images/server_settings.png and /dev/null differ diff --git a/client/images/svg/close_black_24dp.svg b/client/images/svg/close_black_24dp.svg new file mode 100644 index 00000000..5f1267d7 --- /dev/null +++ b/client/images/svg/close_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/images/svg/control_point_black_24dp.svg b/client/images/svg/control_point_black_24dp.svg new file mode 100644 index 00000000..75b25e67 --- /dev/null +++ b/client/images/svg/control_point_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/images/svg/delete_black_24dp.svg b/client/images/svg/delete_black_24dp.svg new file mode 100644 index 00000000..69a68354 --- /dev/null +++ b/client/images/svg/delete_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/images/svg/density_small_black_24dp.svg b/client/images/svg/density_small_black_24dp.svg new file mode 100644 index 00000000..f79483de --- /dev/null +++ b/client/images/svg/density_small_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/images/svg/done_black_24dp.svg b/client/images/svg/done_black_24dp.svg new file mode 100644 index 00000000..b7e19d35 --- /dev/null +++ b/client/images/svg/done_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/images/svg/format_list_bulleted_black_24dp.svg b/client/images/svg/format_list_bulleted_black_24dp.svg new file mode 100644 index 00000000..21821a14 --- /dev/null +++ b/client/images/svg/format_list_bulleted_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/images/svg/gpp_good_black_24dp.svg b/client/images/svg/gpp_good_black_24dp.svg new file mode 100644 index 00000000..45d4a819 --- /dev/null +++ b/client/images/svg/gpp_good_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/images/svg/gpp_maybe_black_24dp.svg b/client/images/svg/gpp_maybe_black_24dp.svg new file mode 100644 index 00000000..dceeac79 --- /dev/null +++ b/client/images/svg/gpp_maybe_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/images/svg/logout_black_24dp.svg b/client/images/svg/logout_black_24dp.svg new file mode 100644 index 00000000..1b785f84 --- /dev/null +++ b/client/images/svg/logout_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/images/svg/miscellaneous_services_black_24dp.svg b/client/images/svg/miscellaneous_services_black_24dp.svg new file mode 100644 index 00000000..425990e5 --- /dev/null +++ b/client/images/svg/miscellaneous_services_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/images/svg/refresh_black_24dp.svg b/client/images/svg/refresh_black_24dp.svg new file mode 100644 index 00000000..f31411f5 --- /dev/null +++ b/client/images/svg/refresh_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/images/svg/settings_black_24dp.svg b/client/images/svg/settings_black_24dp.svg new file mode 100644 index 00000000..4165162b --- /dev/null +++ b/client/images/svg/settings_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/images/svg/settings_suggest_black_24dp.svg b/client/images/svg/settings_suggest_black_24dp.svg new file mode 100644 index 00000000..80053d0e --- /dev/null +++ b/client/images/svg/settings_suggest_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/images/svg/share_black_24dp.svg b/client/images/svg/share_black_24dp.svg new file mode 100644 index 00000000..4c5fa323 --- /dev/null +++ b/client/images/svg/share_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/images/svg/vpn_key_black_24dp.svg b/client/images/svg/vpn_key_black_24dp.svg new file mode 100644 index 00000000..2c18df46 --- /dev/null +++ b/client/images/svg/vpn_key_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/resources.qrc b/client/resources.qrc index 407fe227..cb7877ff 100644 --- a/client/resources.qrc +++ b/client/resources.qrc @@ -27,11 +27,9 @@ fonts/Lato-Thin.ttf fonts/Lato-ThinItalic.ttf images/AmneziaVPN.png - images/server_settings.png images/share.png server_scripts/remove_container.sh server_scripts/setup_host_firewall.sh - images/reload.png server_scripts/openvpn_cloak/Dockerfile server_scripts/openvpn_cloak/configure_container.sh server_scripts/openvpn_cloak/start.sh @@ -42,7 +40,6 @@ images/check.png images/uncheck.png images/settings_grey.png - images/plus.png server_scripts/check_connection.sh server_scripts/remove_all_containers.sh server_scripts/openvpn_cloak/run_container.sh @@ -144,5 +141,21 @@ ui/qml/Pages/PageQrDecoder.qml ui/qml/Pages/PageAbout.qml ui/qml/Controls/RichLabelType.qml + images/svg/gpp_good_black_24dp.svg + ui/qml/Controls/SvgImageType.qml + images/svg/gpp_maybe_black_24dp.svg + images/svg/close_black_24dp.svg + images/svg/delete_black_24dp.svg + images/svg/done_black_24dp.svg + images/svg/format_list_bulleted_black_24dp.svg + images/svg/logout_black_24dp.svg + images/svg/miscellaneous_services_black_24dp.svg + images/svg/refresh_black_24dp.svg + images/svg/settings_black_24dp.svg + images/svg/share_black_24dp.svg + images/svg/vpn_key_black_24dp.svg + images/svg/control_point_black_24dp.svg + images/svg/settings_suggest_black_24dp.svg + ui/qml/Controls/SvgButtonType.qml diff --git a/client/ui/pages_logic/VpnLogic.cpp b/client/ui/pages_logic/VpnLogic.cpp index 67e9e37a..f27551a1 100644 --- a/client/ui/pages_logic/VpnLogic.cpp +++ b/client/ui/pages_logic/VpnLogic.cpp @@ -5,6 +5,7 @@ #include #include "../uilogic.h" #include "defines.h" +#include VpnLogic::VpnLogic(UiLogic *logic, QObject *parent): @@ -61,6 +62,16 @@ void VpnLogic::onUpdatePage() QString selectedContainerName = ContainerProps::containerHumanNames().value(selectedContainer); set_labelCurrentService(selectedContainerName); + auto dns = VpnConfigurator::getDnsForConfig(m_settings.defaultServerIndex()); + set_amneziaDnsEnabled(dns.first == protocols::dns::amneziaDnsIp); + if (dns.first == protocols::dns::amneziaDnsIp) { + set_labelCurrentDns("On your server"); + } + else { + set_labelCurrentDns(dns.first + ", " + dns.second); + } + + set_isContainerWorkingOnPlatform(ContainerProps::isWorkingOnPlatform(selectedContainer)); if (!isContainerWorkingOnPlatform()) { set_labelErrorText(tr("AmneziaVPN not supporting selected protocol on this device. Select another protocol.")); diff --git a/client/ui/pages_logic/VpnLogic.h b/client/ui/pages_logic/VpnLogic.h index e18b49eb..c6e983b9 100644 --- a/client/ui/pages_logic/VpnLogic.h +++ b/client/ui/pages_logic/VpnLogic.h @@ -16,6 +16,9 @@ class VpnLogic : public PageLogicBase AUTO_PROPERTY(QString, labelStateText) AUTO_PROPERTY(QString, labelCurrentServer) AUTO_PROPERTY(QString, labelCurrentService) + AUTO_PROPERTY(QString, labelCurrentDns) + AUTO_PROPERTY(bool, amneziaDnsEnabled) + AUTO_PROPERTY(bool, pushButtonConnectEnabled) AUTO_PROPERTY(bool, pushButtonConnectVisible) AUTO_PROPERTY(bool, widgetVpnModeEnabled) diff --git a/client/ui/qml/Controls/SettingButtonType.qml b/client/ui/qml/Controls/SettingButtonType.qml index cef5f9fd..2efee56c 100644 --- a/client/ui/qml/Controls/SettingButtonType.qml +++ b/client/ui/qml/Controls/SettingButtonType.qml @@ -8,10 +8,12 @@ BasicButtonType { background: Item {} contentItem: Item { anchors.fill: parent - Image { - source: root.icon.source + SvgImageType { anchors.left: parent.left anchors.verticalCenter: parent.verticalCenter + svg.source: root.icon.source + width: 25 + height: 25 } Text { id: textItem diff --git a/client/ui/qml/Controls/SvgButtonType.qml b/client/ui/qml/Controls/SvgButtonType.qml new file mode 100644 index 00000000..af55939c --- /dev/null +++ b/client/ui/qml/Controls/SvgButtonType.qml @@ -0,0 +1,16 @@ +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import "." + +BasicButtonType { + id: root + icon.color: "#181922" + + background: Item {} + contentItem: SvgImageType { + svg.source: icon.source + color: icon.color + anchors.fill: parent + anchors.margins: parent.containsMouse ? 0 : 1 + } +} diff --git a/client/ui/qml/Controls/SvgImageType.qml b/client/ui/qml/Controls/SvgImageType.qml new file mode 100644 index 00000000..651b7330 --- /dev/null +++ b/client/ui/qml/Controls/SvgImageType.qml @@ -0,0 +1,23 @@ +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtGraphicalEffects 1.15 + +Item { + id: root + property color color: "#181922" + property alias svg: image + Image { + anchors.fill: parent + id: image + sourceSize: Qt.size(root.width, root.height) + + antialiasing: true + visible: false + } + + ColorOverlay { + anchors.fill: image + source: image + color: root.color + } +} diff --git a/client/ui/qml/Pages/PageGeneralSettings.qml b/client/ui/qml/Pages/PageGeneralSettings.qml index 0da29d00..03ba0465 100644 --- a/client/ui/qml/Pages/PageGeneralSettings.qml +++ b/client/ui/qml/Pages/PageGeneralSettings.qml @@ -1,5 +1,6 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 +import QtGraphicalEffects 1.15 import PageEnum 1.0 import "./" import "../Controls" @@ -31,9 +32,9 @@ PageBase { anchors.top: l1.bottom anchors.topMargin: GC.isMobile() ? 0: 15 x: 30 - width: parent.width - 40 + width: parent.width - 80 height: GC.isMobile() ? 0: 30 - icon.source: "qrc:/images/settings.png" + icon.source: "qrc:/images/svg/settings_black_24dp.svg" text: qsTr("App settings") onClicked: { UiLogic.goToPage(PageEnum.AppSettings) @@ -57,7 +58,7 @@ PageBase { anchors.topMargin: 15 width: parent.width - 40 height: 30 - icon.source: "qrc:/images/settings.png" + icon.source: "qrc:/images/svg/settings_suggest_black_24dp.svg" text: qsTr("Network settings") onClicked: { UiLogic.goToPage(PageEnum.NetworkSettings) @@ -81,7 +82,7 @@ PageBase { anchors.topMargin: 15 width: 330 height: 30 - icon.source: "qrc:/images/server_settings.png" + icon.source: "qrc:/images/svg/vpn_key_black_24dp.svg" text: qsTr("Server Settings") onClicked: { GeneralSettingsLogic.onPushButtonGeneralSettingsServerSettingsClicked() @@ -105,7 +106,7 @@ PageBase { anchors.topMargin: 15 width: 330 height: 30 - icon.source: "qrc:/images/share.png" + icon.source: "qrc:/images/svg/share_black_24dp.svg" text: qsTr("Share connection") enabled: GeneralSettingsLogic.pushButtonGeneralSettingsShareConnectionEnable onClicked: { @@ -130,7 +131,7 @@ PageBase { anchors.topMargin: 15 width: 330 height: 30 - icon.source: "qrc:/images/server_settings.png" + icon.source: "qrc:/images/svg/format_list_bulleted_black_24dp.svg" text: qsTr("Servers") onClicked: { UiLogic.goToPage(PageEnum.ServersList) @@ -154,7 +155,7 @@ PageBase { anchors.topMargin: 15 width: 330 height: 30 - icon.source: "qrc:/images/plus.png" + icon.source: "qrc:/images/svg/control_point_black_24dp.svg" text: qsTr("Add server") onClicked: { UiLogic.goToPage(PageEnum.Start) @@ -178,7 +179,7 @@ PageBase { anchors.bottomMargin: 20 width: 330 height: 30 - icon.source: "qrc:/images/settings.png" + icon.source: "qrc:/images/svg/logout_black_24dp.svg" text: qsTr("Exit") onClicked: { Qt.quit() diff --git a/client/ui/qml/Pages/PageNetworkSetting.qml b/client/ui/qml/Pages/PageNetworkSetting.qml index 1665575b..924b32dd 100644 --- a/client/ui/qml/Pages/PageNetworkSetting.qml +++ b/client/ui/qml/Pages/PageNetworkSetting.qml @@ -28,6 +28,7 @@ PageBase { onCheckedChanged: { NetworkSettingsLogic.checkBoxUseAmneziaDnsChecked = checked NetworkSettingsLogic.onCheckBoxUseAmneziaDnsToggled(checked) + UiLogic.onUpdateAllPages() } } @@ -59,21 +60,23 @@ If AmneziaDNS service is not installed on the same server, or this option is unc onEditingFinished: { NetworkSettingsLogic.lineEditDns1Text = text NetworkSettingsLogic.onLineEditDns1EditFinished(text) + UiLogic.onUpdateAllPages() } validator: RegExpValidator { regExp: NetworkSettingsLogic.ipAddressRegex } } - ImageButtonType { + SvgButtonType { id: resetDNS1 anchors. left: dns1.right anchors.leftMargin: 10 anchors.verticalCenter: dns1.verticalCenter width: 24 height: 24 - icon.source: "qrc:/images/reload.png" + icon.source: "qrc:/images/svg/refresh_black_24dp.svg" onClicked: { NetworkSettingsLogic.onPushButtonResetDns1Clicked() + UiLogic.onUpdateAllPages() } } @@ -96,21 +99,23 @@ If AmneziaDNS service is not installed on the same server, or this option is unc onEditingFinished: { NetworkSettingsLogic.lineEditDns2Text = text NetworkSettingsLogic.onLineEditDns2EditFinished(text) + UiLogic.onUpdateAllPages() } validator: RegExpValidator { regExp: NetworkSettingsLogic.ipAddressRegex } } - ImageButtonType { + SvgButtonType { id: resetDNS2 anchors. left: dns2.right anchors.leftMargin: 10 anchors.verticalCenter: dns2.verticalCenter width: 24 height: 24 - icon.source: "qrc:/images/reload.png" + icon.source: "qrc:/images/svg/refresh_black_24dp.svg" onClicked: { NetworkSettingsLogic.onPushButtonResetDns2Clicked() + UiLogic.onUpdateAllPages() } } diff --git a/client/ui/qml/Pages/PageServerList.qml b/client/ui/qml/Pages/PageServerList.qml index 5a333069..fec2f3de 100644 --- a/client/ui/qml/Pages/PageServerList.qml +++ b/client/ui/qml/Pages/PageServerList.qml @@ -19,17 +19,20 @@ PageBase { text: qsTr("Servers list") width: undefined } - ImageButtonType { + + SvgButtonType { anchors.bottom: caption.bottom anchors.leftMargin: 10 anchors.left: caption.right width: 24 height: 24 - icon.source: "qrc:/images/plus.png" + + icon.source: "qrc:/images/svg/control_point_black_24dp.svg" onClicked: { UiLogic.goToPage(PageEnum.Start); } } + ListView { id: listWidget_servers x: 20 @@ -124,13 +127,13 @@ PageBase { checked: is_default enabled: !is_default } - ImageButtonType { + SvgButtonType { id: pushButtonSetting x: parent.width - 70 y: 15 width: 30 height: 30 - icon.source: "qrc:/images/settings.png" + icon.source: "qrc:/images/svg/settings_black_24dp.svg" opacity: 0 OpacityAnimator { diff --git a/client/ui/qml/Pages/PageStart.qml b/client/ui/qml/Pages/PageStart.qml index b8aceab3..26fc5e5f 100644 --- a/client/ui/qml/Pages/PageStart.qml +++ b/client/ui/qml/Pages/PageStart.qml @@ -240,8 +240,7 @@ PageBase { anchors.horizontalCenter: parent.horizontalCenter height: 71 - echoMode: TextInput.Password - font.pixelSize: 9 + font.pixelSize: 10 verticalAlignment: Text.AlignTop text: StartPageLogic.textEditSshKeyText onEditingFinished: { @@ -264,6 +263,7 @@ PageBase { id: new_sever_connect anchors.horizontalCenter: parent.horizontalCenter anchors.top: new_server_ssh_key.bottom + anchors.topMargin: 10 text: StartPageLogic.pushButtonConnectText visible: StartPageLogic.pushButtonConnectVisible diff --git a/client/ui/qml/Pages/PageVPN.qml b/client/ui/qml/Pages/PageVPN.qml index e4bbaecb..4946a1ed 100644 --- a/client/ui/qml/Pages/PageVPN.qml +++ b/client/ui/qml/Pages/PageVPN.qml @@ -156,7 +156,7 @@ PageBase { LabelType { Layout.alignment: Qt.AlignRight height: 21 - text: qsTr("Service") + ": " + text: qsTr("Proto") + ": " } BasicButtonType { @@ -173,10 +173,46 @@ PageBase { } } + RowLayout { + id: layout3 + anchors.top: layout2.bottom + anchors.topMargin: 5 + anchors.horizontalCenter: parent.horizontalCenter + height: 21 + + + LabelType { + Layout.alignment: Qt.AlignRight + height: 21 + text: qsTr("DNS") + ": " + } + + BasicButtonType { + Layout.alignment: Qt.AlignLeft + height: 21 + implicitWidth: implicitContentWidth > root.width * 0.6 ? root.width * 0.6 : implicitContentWidth + leftPadding + rightPadding + background: Item {} + text: VpnLogic.labelCurrentDns + " →" + font.family: "Lato" + font.styleName: "normal" + font.pixelSize: 16 + onClicked: { + UiLogic.goToPage(PageEnum.NetworkSettings) + } + } + + SvgImageType { + svg.source: VpnLogic.amneziaDnsEnabled ? "qrc:/images/svg/gpp_good_black_24dp.svg" : "qrc:/images/svg/gpp_maybe_black_24dp.svg" + color: VpnLogic.amneziaDnsEnabled ? "#22aa33" : "orange" + width: 25 + height: 25 + } + } + LabelType { id: error_text - anchors.top: layout2.bottom + anchors.top: layout3.bottom anchors.horizontalCenter: parent.horizontalCenter anchors.topMargin: 20 width: parent.width - 20 diff --git a/client/ui/qml/main.qml b/client/ui/qml/main.qml index a22e002c..bee1a7c7 100644 --- a/client/ui/qml/main.qml +++ b/client/ui/qml/main.qml @@ -24,6 +24,8 @@ Window { visible: true width: GC.screenWidth height: GC.isDesktop() ? GC.screenHeight + titleBar.height : GC.screenHeight + minimumWidth: 360 + minimumHeight: GC.isDesktop() ? 640 : 0 Keys.enabled: true onClosing: { console.debug("QML onClosing signal")