mirror of
https://github.com/amnezia-vpn/amnezia-client.git
synced 2026-06-22 02:01:08 +07:00
feat: add purchase to UI
This commit is contained in:
@@ -1,5 +1,9 @@
|
|||||||
message("Client android ${CMAKE_ANDROID_ARCH_ABI} build")
|
message("Client android ${CMAKE_ANDROID_ARCH_ABI} build")
|
||||||
|
|
||||||
|
# Option to build Play variant (with Google Play Billing) instead of OSS
|
||||||
|
# When ON, adds target android_play_apk: cmake --build . --target android_play_apk
|
||||||
|
option(ANDROID_BUILD_PLAY "Add android_play_apk target for Google Play Billing build" OFF)
|
||||||
|
|
||||||
set(APP_ANDROID_MIN_SDK 28)
|
set(APP_ANDROID_MIN_SDK 28)
|
||||||
set(ANDROID_PLATFORM "android-${APP_ANDROID_MIN_SDK}" CACHE STRING
|
set(ANDROID_PLATFORM "android-${APP_ANDROID_MIN_SDK}" CACHE STRING
|
||||||
"The minimum API level supported by the application or library" FORCE)
|
"The minimum API level supported by the application or library" FORCE)
|
||||||
@@ -53,3 +57,18 @@ file(COPY ${AMNEZIA_LIBXRAY_PATH} DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/androi
|
|||||||
find_package(openvpn-pt-android REQUIRED)
|
find_package(openvpn-pt-android REQUIRED)
|
||||||
set(LIBS ${LIBS} amnezia::openvpn-pt-android)
|
set(LIBS ${LIBS} amnezia::openvpn-pt-android)
|
||||||
set_property(TARGET ${PROJECT} APPEND PROPERTY QT_ANDROID_EXTRA_LIBS ${OPENVPN_PT_ANDROID_LIBCK_OVPN_PLUGIN_PATH})
|
set_property(TARGET ${PROJECT} APPEND PROPERTY QT_ANDROID_EXTRA_LIBS ${OPENVPN_PT_ANDROID_LIBCK_OVPN_PLUGIN_PATH})
|
||||||
|
|
||||||
|
if(ANDROID_BUILD_PLAY)
|
||||||
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
|
set(_gradle_suffix "Debug")
|
||||||
|
else()
|
||||||
|
set(_gradle_suffix "Release")
|
||||||
|
endif()
|
||||||
|
set(_android_build_dir "${CMAKE_CURRENT_BINARY_DIR}/android-build-${PROJECT}")
|
||||||
|
add_custom_target(android_play_apk
|
||||||
|
COMMAND ./gradlew assemblePlay${_gradle_suffix} -DexplicitRun=1
|
||||||
|
WORKING_DIRECTORY "${_android_build_dir}"
|
||||||
|
COMMENT "Building Android Play variant (assemblePlay${_gradle_suffix})"
|
||||||
|
DEPENDS ${PROJECT}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ namespace amnezia
|
|||||||
ApiCaptchaInvalidError = 1118,
|
ApiCaptchaInvalidError = 1118,
|
||||||
ApiCaptchaRefreshError = 1119,
|
ApiCaptchaRefreshError = 1119,
|
||||||
ApiRateLimitError = 1120,
|
ApiRateLimitError = 1120,
|
||||||
|
ApiNoPurchasesToRestore = 1121,
|
||||||
|
|
||||||
// QFile errors
|
// QFile errors
|
||||||
OpenError = 1200,
|
OpenError = 1200,
|
||||||
|
|||||||
@@ -97,6 +97,15 @@ QString errorString(ErrorCode code) {
|
|||||||
case (ErrorCode::ApiCaptchaInvalidError): errorMessage = QObject::tr("CAPTCHA was incorrect. Please try again"); break;
|
case (ErrorCode::ApiCaptchaInvalidError): errorMessage = QObject::tr("CAPTCHA was incorrect. Please try again"); break;
|
||||||
case (ErrorCode::ApiCaptchaRefreshError): errorMessage = QObject::tr("CAPTCHA refreshed. Please try again"); break;
|
case (ErrorCode::ApiCaptchaRefreshError): errorMessage = QObject::tr("CAPTCHA refreshed. Please try again"); break;
|
||||||
case (ErrorCode::ApiRateLimitError): errorMessage = QObject::tr("Too many requests. Please try again later"); break;
|
case (ErrorCode::ApiRateLimitError): errorMessage = QObject::tr("Too many requests. Please try again later"); break;
|
||||||
|
case (ErrorCode::ApiNoPurchasesToRestore):
|
||||||
|
#if defined(Q_OS_ANDROID)
|
||||||
|
errorMessage = QObject::tr("No purchases to restore. If you have an active subscription, make sure you're signed in with the same Google account used for the purchase.");
|
||||||
|
#elif defined(Q_OS_IOS) || defined(MACOS_NE)
|
||||||
|
errorMessage = QObject::tr("No purchases to restore. If you have an active subscription, make sure you're signed in with the same Apple ID used for the purchase.");
|
||||||
|
#else
|
||||||
|
errorMessage = QObject::tr("No purchases to restore. If you have an active subscription, make sure you're signed in with the same account used for the purchase.");
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
|
||||||
// QFile errors
|
// QFile errors
|
||||||
case(ErrorCode::OpenError): errorMessage = QObject::tr("QFile error: The file could not be opened"); break;
|
case(ErrorCode::OpenError): errorMessage = QObject::tr("QFile error: The file could not be opened"); break;
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ QJsonObject Deserialize(const QString &vmessStr, QString *alias, QString *errMes
|
|||||||
// - It can be empty, if so, if the key is not in the JSON, or the value is empty, report an error.
|
// - It can be empty, if so, if the key is not in the JSON, or the value is empty, report an error.
|
||||||
// - Else if it contains one thing. if the key is not in the JSON, or the value is empty, use that one.
|
// - Else if it contains one thing. if the key is not in the JSON, or the value is empty, use that one.
|
||||||
// - Else if it contains many things, when the key IS in the JSON but not within the THINGS, use the first in the THINGS
|
// - Else if it contains many things, when the key IS in the JSON but not within the THINGS, use the first in the THINGS
|
||||||
// - Else -------------------------------------------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> use the JSON value
|
// - Else -------------------------------------------- use the JSON value
|
||||||
//
|
//
|
||||||
#define __vmess_checker__func(key, values) \
|
#define __vmess_checker__func(key, values) \
|
||||||
{ \
|
{ \
|
||||||
|
|||||||
@@ -366,7 +366,7 @@ PageType {
|
|||||||
property string title: qsTr("Restore purchases")
|
property string title: qsTr("Restore purchases")
|
||||||
property string description: qsTr("")
|
property string description: qsTr("")
|
||||||
property string imageSource: "qrc:/images/controls/refresh-cw.svg"
|
property string imageSource: "qrc:/images/controls/refresh-cw.svg"
|
||||||
property bool isVisible: Qt.platform.os === "ios" || IsMacOsNeBuild
|
property bool isVisible: Qt.platform.os === "ios" || IsMacOsNeBuild || Qt.platform.os === "android"
|
||||||
property var handler: function() {
|
property var handler: function() {
|
||||||
PageController.showBusyIndicator(true)
|
PageController.showBusyIndicator(true)
|
||||||
SubscriptionUiController.restoreServiceFromAppStore()
|
SubscriptionUiController.restoreServiceFromAppStore()
|
||||||
|
|||||||
Reference in New Issue
Block a user