From 48f6cf904e7f41c002be3a6daf3b53535191456c Mon Sep 17 00:00:00 2001 From: Nethius Date: Thu, 19 Dec 2024 10:36:20 +0300 Subject: [PATCH 01/12] chore/minor UI fixes (#1308) * chore: corrected the translation error * bugfix: fixed basic button left iamge color --- client/translations/amneziavpn_ru_RU.ts | 2 +- client/ui/qml/Controls2/BasicButtonType.qml | 2 +- client/ui/qml/Pages2/PageHome.qml | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/client/translations/amneziavpn_ru_RU.ts b/client/translations/amneziavpn_ru_RU.ts index 2fb21259e..c0d855b25 100644 --- a/client/translations/amneziavpn_ru_RU.ts +++ b/client/translations/amneziavpn_ru_RU.ts @@ -2679,7 +2679,7 @@ and will not be shared or disclosed to the Amnezia or any third parties Where to get connection data, step-by-step instructions for buying a VPS - Где взять данные для подключения, пошаговые инстуркции по покупке VPS + Где взять данные для подключения, пошаговые инструкции по покупке VPS diff --git a/client/ui/qml/Controls2/BasicButtonType.qml b/client/ui/qml/Controls2/BasicButtonType.qml index 828c32bcd..ef66e0e22 100644 --- a/client/ui/qml/Controls2/BasicButtonType.qml +++ b/client/ui/qml/Controls2/BasicButtonType.qml @@ -24,7 +24,7 @@ Button { property string leftImageSource property string rightImageSource - property string leftImageColor + property string leftImageColor: textColor property bool changeLeftImageSize: true property bool squareLeftSide: false diff --git a/client/ui/qml/Pages2/PageHome.qml b/client/ui/qml/Pages2/PageHome.qml index 8422a10f2..e51125758 100644 --- a/client/ui/qml/Pages2/PageHome.qml +++ b/client/ui/qml/Pages2/PageHome.qml @@ -110,6 +110,7 @@ PageType { text: isSplitTunnelingEnabled ? qsTr("Split tunneling enabled") : qsTr("Split tunneling disabled") leftImageSource: isSplitTunnelingEnabled ? "qrc:/images/controls/split-tunneling.svg" : "" + leftImageColor: "" rightImageSource: "qrc:/images/controls/chevron-down.svg" Keys.onEnterPressed: splitTunnelingButton.clicked() From b88ab8e432fbd2ab5002856cd83ef57181a6d7fa Mon Sep 17 00:00:00 2001 From: albexk Date: Mon, 23 Dec 2024 04:27:09 +0300 Subject: [PATCH 02/12] fix(build): fix aqtinstall (#1312) --- .github/workflows/deploy.yml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a51c19b27..35e740b0d 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -335,7 +335,8 @@ jobs: arch: 'linux_gcc_64' modules: ${{ env.QT_MODULES }} dir: ${{ runner.temp }} - extra: '--external 7z --base ${{ env.QT_MIRROR }}' + py7zrversion: '==0.22.*' + extra: '--base ${{ env.QT_MIRROR }}' - name: 'Install android_x86_64 Qt' uses: jurplel/install-qt-action@v4 @@ -346,7 +347,8 @@ jobs: arch: 'android_x86_64' modules: ${{ env.QT_MODULES }} dir: ${{ runner.temp }} - extra: '--external 7z --base ${{ env.QT_MIRROR }}' + py7zrversion: '==0.22.*' + extra: '--base ${{ env.QT_MIRROR }}' - name: 'Install android_x86 Qt' uses: jurplel/install-qt-action@v4 @@ -357,7 +359,8 @@ jobs: arch: 'android_x86' modules: ${{ env.QT_MODULES }} dir: ${{ runner.temp }} - extra: '--external 7z --base ${{ env.QT_MIRROR }}' + py7zrversion: '==0.22.*' + extra: '--base ${{ env.QT_MIRROR }}' - name: 'Install android_armv7 Qt' uses: jurplel/install-qt-action@v4 @@ -368,7 +371,8 @@ jobs: arch: 'android_armv7' modules: ${{ env.QT_MODULES }} dir: ${{ runner.temp }} - extra: '--external 7z --base ${{ env.QT_MIRROR }}' + py7zrversion: '==0.22.*' + extra: '--base ${{ env.QT_MIRROR }}' - name: 'Install android_arm64_v8a Qt' uses: jurplel/install-qt-action@v4 @@ -379,7 +383,8 @@ jobs: arch: 'android_arm64_v8a' modules: ${{ env.QT_MODULES }} dir: ${{ runner.temp }} - extra: '--external 7z --base ${{ env.QT_MIRROR }}' + py7zrversion: '==0.22.*' + extra: '--base ${{ env.QT_MIRROR }}' - name: 'Grant execute permission for qt-cmake' shell: bash From 2bff37efae583a9606e5fae263dbbac907338458 Mon Sep 17 00:00:00 2001 From: Mikhail Kiselev <73298492+sund3RRR@users.noreply.github.com> Date: Sat, 28 Dec 2024 08:02:14 +0300 Subject: [PATCH 03/12] fix: segmentation violation due to missing return (#1321) --- client/utilities.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/utilities.cpp b/client/utilities.cpp index 1cc69aeb1..4caa8f70b 100755 --- a/client/utilities.cpp +++ b/client/utilities.cpp @@ -248,7 +248,7 @@ bool Utils::killProcessByName(const QString &name) #elif defined Q_OS_IOS || defined(Q_OS_ANDROID) return false; #else - QProcess::execute(QString("pkill %1").arg(name)); + return QProcess::execute(QString("pkill %1").arg(name)) == 0; #endif } From 212e9b3a9151b2793a5cc1ccb6dfb00de9155aca Mon Sep 17 00:00:00 2001 From: Andrey Alekseenko Date: Mon, 30 Dec 2024 05:45:26 +0000 Subject: [PATCH 04/12] fix: adding second new VMess links now works (#1325) --- client/core/serialization/vmess_new.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/core/serialization/vmess_new.cpp b/client/core/serialization/vmess_new.cpp index 6f3ec3e1b..68d322031 100644 --- a/client/core/serialization/vmess_new.cpp +++ b/client/core/serialization/vmess_new.cpp @@ -104,7 +104,7 @@ QJsonObject Deserialize(const QString &vmessStr, QString *alias, QString *errMes server.users.first().security = "auto"; } - const static auto getQueryValue = [&query](const QString &key, const QString &defaultValue) { + const auto getQueryValue = [&query](const QString &key, const QString &defaultValue) { if (query.hasQueryItem(key)) return query.queryItemValue(key, QUrl::FullyDecoded); else From 6acaab0ffa4960acb0ee603db81037603814638b Mon Sep 17 00:00:00 2001 From: Cyril Anisimov Date: Tue, 31 Dec 2024 04:16:52 +0100 Subject: [PATCH 05/12] Improve navigation cpp (#1061) * add focusController class * add more key handlers * add focus navigation to qml * fixed language selector * add reverse focus change to FocusController * add default focus item * update transitions * update pages * add ListViewFocusController * fix ListView navigation * update CardType for using with focus navigation * remove useless key navigation * remove useless slots, logs, Drawer open and close * fix reverse focus move on listView * fix drawer radio buttons selection * fix drawer layout and focus move * fix PageSetupWizardProtocolSettings focus move * fix back navigation on default focus item * fix crashes after ListView navigation * fix protocol settings focus move * fix focus on users on page share * clean up page share * fix server rename * fix page share default server selection * refactor about page for correct focus move * fix focus move on list views with header and-or footer * minor fixes * fix server list back button handler * fix spawn signals on switch * fix share details drawer * fix drawer open close usage * refactor listViewFocusController * refactor focusController to make the logic more straightforward * fix focus on notification * update config page for scrolling with tab * fix crash on return with esc key * fix focus navigation in dynamic delegate of list view * fix focus move on qr code on share page * refactor page logging settings for focus navigation * update popup * Bump version * Add mandatory requirement for android.software.leanback. * Fix importing files on TVs * fix: add separate method for reading files to fix file reading on Android TV * fix(android): add CHANGE_NETWORK_STATE permission for all Android versions * Fix connection check for AWG/WG * chore: minor fixes (#1235) * fix: add a workaround to open files on Android TV due to lack of SAF * fix: change the banner format for TV * refactor: make TvFilePicker activity more sustainable * fix: add the touch emulation method for Android TV * fix: null uri processing * fix: add the touch emulation method for Android TV * fix: hide UI elements that use file saving * chore: bump version code * add `ScrollBarType` * update initial config page * refactor credentials setup page to handle the focus navigation * add `setDelegateIndex` method to `listViewFocusController` * fix focus behavior on new page/popup * make minor fixes and clean up * fix: get rid of the assign function call * Scrollbar is on if the content is larger than a screen * Fix selection in language change list * Update select language list * update logging settings page * fix checked item in lists * fix split tunneling settings * make unchangable properties readonly * refactor SwitcherType * fix hide/unhide password * `PageShare` readonly properties * Fix list view focus moving on `PageShare` * remove manual focus control on `PageShare` * format `ListViewFocusController` * format `FocusController` * add `focusControl` with utility functions for focus control * refactor `listViewFocusController` acoording to `focusControl` * refactor `focusConroller` according to `focusControl` * add `printSectionName` method to `listViewController` * remove arrow from `Close application` item * fix focus movement in `ServersListView` * `Restore from backup` is visible only on start screen * `I have nothing` is visible only on start screen * fix back button on `SelectLanguageDrawer` * rename `focusControl` to `qmlUtils` * fix `CMakeLists.txt` * fix `ScrollBarType` * fix `PageSetupWizardApiServicesList` * fix focus movement on dynamic delegates in listView * refactor `PageSetupWizardProtocols` * remove comments and clean up * fix `ListViewWithLabelsType` * fix `PageProtocolCloakSettings` * fix `PageSettingsAppSplitTunneling` * fix `PageDevMenu` * remove debug output from `FocusController` * remove debug output from `ListViewFocusController` * remove debug output from `focusControl` * `focusControl` => `FocusControl` --------- Co-authored-by: albexk Co-authored-by: Nethius --- CMakeLists.txt | 4 +- client/CMakeLists.txt | 2 + client/amnezia_application.cpp | 3 + client/amnezia_application.h | 2 + client/android/AndroidManifest.xml | 9 +- .../res/mipmap-anydpi-v26/ic_banner.xml | 5 - client/android/res/mipmap-hdpi/ic_banner.png | Bin 0 -> 15410 bytes client/android/res/mipmap-mdpi/ic_banner.png | Bin 0 -> 10138 bytes .../res/mipmap-xhdpi/ic_banner_foreground.png | Bin 12414 -> 0 bytes client/android/res/values-ru/strings.xml | 2 + .../res/values/ic_banner_background.xml | 4 - client/android/res/values/strings.xml | 2 + .../src/org/amnezia/vpn/AmneziaActivity.kt | 206 +++++-- .../src/org/amnezia/vpn/TvFilePicker.kt | 45 ++ .../platforms/android/android_controller.cpp | 28 +- client/platforms/android/android_controller.h | 4 + client/resources.qrc | 358 ++++++------ client/ui/controllers/focusController.cpp | 210 +++++++ client/ui/controllers/focusController.h | 57 ++ client/ui/controllers/importController.cpp | 22 +- .../controllers/listViewFocusController.cpp | 309 ++++++++++ .../ui/controllers/listViewFocusController.h | 70 +++ client/ui/controllers/pageController.cpp | 18 +- client/ui/controllers/pageController.h | 7 +- client/ui/controllers/settingsController.cpp | 8 +- client/ui/controllers/sitesController.cpp | 6 +- client/ui/controllers/systemController.cpp | 34 +- client/ui/controllers/systemController.h | 6 +- client/ui/qml/Components/ConnectButton.qml | 26 + .../ConnectionTypeSelectionDrawer.qml | 23 +- .../qml/Components/HomeContainersListView.qml | 58 +- .../Components/HomeSplitTunnelingDrawer.qml | 31 +- .../ui/qml/Components/InstalledAppsDrawer.qml | 13 +- client/ui/qml/Components/QuestionDrawer.qml | 19 +- .../qml/Components/SelectLanguageDrawer.qml | 226 ++++---- client/ui/qml/Components/ServersListView.qml | 126 ++++ .../Components/SettingsContainersListView.qml | 37 +- .../qml/Components/ShareConnectionDrawer.qml | 110 ++-- .../qml/Components/TransportProtoSelector.qml | 2 - client/ui/qml/Controls2/BackButtonType.qml | 8 +- client/ui/qml/Controls2/BasicButtonType.qml | 29 +- client/ui/qml/Controls2/CardType.qml | 31 +- client/ui/qml/Controls2/CardWithIconsType.qml | 30 +- client/ui/qml/Controls2/DrawerType2.qml | 193 ++++--- client/ui/qml/Controls2/DropDownType.qml | 136 ++--- client/ui/qml/Controls2/FlickableType.qml | 5 +- client/ui/qml/Controls2/HeaderType.qml | 2 - .../qml/Controls2/HorizontalRadioButton.qml | 26 + client/ui/qml/Controls2/ImageButtonType.qml | 35 +- .../ui/qml/Controls2/LabelWithButtonType.qml | 26 + .../qml/Controls2/ListViewWithLabelsType.qml | 6 +- .../Controls2/ListViewWithRadioButtonType.qml | 187 +++--- client/ui/qml/Controls2/PageType.qml | 43 +- client/ui/qml/Controls2/PopupType.qml | 22 +- client/ui/qml/Controls2/ScrollBarType.qml | 11 + client/ui/qml/Controls2/SwitcherType.qml | 43 +- client/ui/qml/Controls2/TabButtonType.qml | 27 +- .../ui/qml/Controls2/TabImageButtonType.qml | 29 +- .../qml/Controls2/TextAreaWithFooterType.qml | 3 - .../qml/Controls2/TextFieldWithHeaderType.qml | 24 +- .../ui/qml/Controls2/VerticalRadioButton.qml | 27 +- client/ui/qml/Pages2/PageDevMenu.qml | 52 +- client/ui/qml/Pages2/PageHome.qml | 279 ++------- .../Pages2/PageProtocolAwgClientSettings.qml | 350 ++++++------ .../ui/qml/Pages2/PageProtocolAwgSettings.qml | 536 +++++++++--------- .../qml/Pages2/PageProtocolCloakSettings.qml | 22 +- .../Pages2/PageProtocolOpenVpnSettings.qml | 45 +- client/ui/qml/Pages2/PageProtocolRaw.qml | 45 +- .../PageProtocolShadowSocksSettings.qml | 19 +- .../PageProtocolWireGuardClientSettings.qml | 2 - .../Pages2/PageProtocolWireGuardSettings.qml | 39 +- .../qml/Pages2/PageProtocolXraySettings.qml | 19 - .../ui/qml/Pages2/PageServiceDnsSettings.qml | 10 - .../ui/qml/Pages2/PageServiceSftpSettings.qml | 21 - .../Pages2/PageServiceSocksProxySettings.qml | 41 +- .../Pages2/PageServiceTorWebsiteSettings.qml | 10 - client/ui/qml/Pages2/PageSettings.qml | 25 +- client/ui/qml/Pages2/PageSettingsAbout.qml | 235 ++++---- .../Pages2/PageSettingsApiLanguageList.qml | 98 ++-- .../qml/Pages2/PageSettingsApiServerInfo.qml | 14 - .../Pages2/PageSettingsAppSplitTunneling.qml | 39 +- .../ui/qml/Pages2/PageSettingsApplication.qml | 38 +- client/ui/qml/Pages2/PageSettingsBackup.qml | 17 +- .../ui/qml/Pages2/PageSettingsConnection.qml | 41 +- client/ui/qml/Pages2/PageSettingsDns.qml | 21 +- client/ui/qml/Pages2/PageSettingsLogging.qml | 220 +++---- .../ui/qml/Pages2/PageSettingsServerData.qml | 20 - .../ui/qml/Pages2/PageSettingsServerInfo.qml | 105 +--- .../qml/Pages2/PageSettingsServerProtocol.qml | 207 +++---- .../Pages2/PageSettingsServerProtocols.qml | 72 ++- .../qml/Pages2/PageSettingsServerServices.qml | 68 +-- .../ui/qml/Pages2/PageSettingsServersList.qml | 131 ++--- .../qml/Pages2/PageSettingsSplitTunneling.qml | 244 +++----- .../Pages2/PageSetupWizardApiServiceInfo.qml | 8 - .../Pages2/PageSetupWizardApiServicesList.qml | 23 +- .../Pages2/PageSetupWizardConfigSource.qml | 251 ++++---- .../qml/Pages2/PageSetupWizardCredentials.qml | 222 +++++--- client/ui/qml/Pages2/PageSetupWizardEasy.qml | 15 +- .../PageSetupWizardProtocolSettings.qml | 78 +-- .../qml/Pages2/PageSetupWizardProtocols.qml | 141 ++--- client/ui/qml/Pages2/PageSetupWizardStart.qml | 9 - .../ui/qml/Pages2/PageSetupWizardTextKey.qml | 12 - .../qml/Pages2/PageSetupWizardViewConfig.qml | 14 +- client/ui/qml/Pages2/PageShare.qml | 269 ++------- client/ui/qml/Pages2/PageShareFullAccess.qml | 22 +- client/ui/qml/Pages2/PageStart.qml | 73 ++- client/ui/qml/main2.qml | 59 +- client/utils/qmlUtils.cpp | 128 +++++ client/utils/qmlUtils.h | 30 + 109 files changed, 3905 insertions(+), 3569 deletions(-) delete mode 100644 client/android/res/mipmap-anydpi-v26/ic_banner.xml create mode 100644 client/android/res/mipmap-hdpi/ic_banner.png create mode 100644 client/android/res/mipmap-mdpi/ic_banner.png delete mode 100644 client/android/res/mipmap-xhdpi/ic_banner_foreground.png delete mode 100644 client/android/res/values/ic_banner_background.xml create mode 100644 client/android/src/org/amnezia/vpn/TvFilePicker.kt create mode 100644 client/ui/controllers/focusController.cpp create mode 100644 client/ui/controllers/focusController.h create mode 100644 client/ui/controllers/listViewFocusController.cpp create mode 100644 client/ui/controllers/listViewFocusController.h create mode 100644 client/ui/qml/Components/ServersListView.qml create mode 100644 client/ui/qml/Controls2/ScrollBarType.qml create mode 100644 client/utils/qmlUtils.cpp create mode 100644 client/utils/qmlUtils.h diff --git a/CMakeLists.txt b/CMakeLists.txt index cb6956316..98f3be14a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.25.0 FATAL_ERROR) set(PROJECT AmneziaVPN) -project(${PROJECT} VERSION 4.8.2.4 +project(${PROJECT} VERSION 4.8.3.0 DESCRIPTION "AmneziaVPN" HOMEPAGE_URL "https://amnezia.org/" ) @@ -11,7 +11,7 @@ string(TIMESTAMP CURRENT_DATE "%Y-%m-%d") set(RELEASE_DATE "${CURRENT_DATE}") set(APP_MAJOR_VERSION ${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}.${CMAKE_PROJECT_VERSION_PATCH}) -set(APP_ANDROID_VERSION_CODE 2071) +set(APP_ANDROID_VERSION_CODE 2072) if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") set(MZ_PLATFORM_NAME "linux") diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 05f9f17c0..3ef923854 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -146,6 +146,7 @@ set(HEADERS ${HEADERS} ${CMAKE_CURRENT_LIST_DIR}/core/serialization/transfer.h ${CMAKE_CURRENT_LIST_DIR}/core/enums/apiEnums.h ${CMAKE_CURRENT_LIST_DIR}/../common/logger/logger.h + ${CMAKE_CURRENT_LIST_DIR}/utils/qmlUtils.h ) # Mozilla headres @@ -197,6 +198,7 @@ set(SOURCES ${SOURCES} ${CMAKE_CURRENT_LIST_DIR}/core/serialization/vmess.cpp ${CMAKE_CURRENT_LIST_DIR}/core/serialization/vmess_new.cpp ${CMAKE_CURRENT_LIST_DIR}/../common/logger/logger.cpp + ${CMAKE_CURRENT_LIST_DIR}/utils/qmlUtils.cpp ) # Mozilla sources diff --git a/client/amnezia_application.cpp b/client/amnezia_application.cpp index 4e25097d9..aeed439b6 100644 --- a/client/amnezia_application.cpp +++ b/client/amnezia_application.cpp @@ -404,6 +404,9 @@ void AmneziaApplication::initControllers() m_pageController.reset(new PageController(m_serversModel, m_settings)); m_engine->rootContext()->setContextProperty("PageController", m_pageController.get()); + m_focusController.reset(new FocusController(m_engine, this)); + m_engine->rootContext()->setContextProperty("FocusController", m_focusController.get()); + m_installController.reset(new InstallController(m_serversModel, m_containersModel, m_protocolsModel, m_clientManagementModel, m_apiServicesModel, m_settings)); m_engine->rootContext()->setContextProperty("InstallController", m_installController.get()); diff --git a/client/amnezia_application.h b/client/amnezia_application.h index 645662167..cfeac0d1f 100644 --- a/client/amnezia_application.h +++ b/client/amnezia_application.h @@ -19,6 +19,7 @@ #include "ui/controllers/exportController.h" #include "ui/controllers/importController.h" #include "ui/controllers/installController.h" +#include "ui/controllers/focusController.h" #include "ui/controllers/pageController.h" #include "ui/controllers/settingsController.h" #include "ui/controllers/sitesController.h" @@ -124,6 +125,7 @@ class AmneziaApplication : public AMNEZIA_BASE_CLASS #endif QScopedPointer m_connectionController; + QScopedPointer m_focusController; QScopedPointer m_pageController; QScopedPointer m_installController; QScopedPointer m_importController; diff --git a/client/android/AndroidManifest.xml b/client/android/AndroidManifest.xml index 9e44e0221..96f60f539 100644 --- a/client/android/AndroidManifest.xml +++ b/client/android/AndroidManifest.xml @@ -11,7 +11,7 @@ - +