From 0d7f9381c139abb090730a95568108359dccfa9d Mon Sep 17 00:00:00 2001 From: NickVs2015 Date: Fri, 20 Feb 2026 13:24:37 +0300 Subject: [PATCH] feat: add test purchase android --- client/android/src/org/amnezia/vpn/AmneziaActivity.kt | 7 +++++++ client/platforms/android/android_controller.cpp | 4 ++++ client/platforms/android/android_controller.h | 1 + client/ui/controllers/api/apiConfigsController.cpp | 6 +++--- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/client/android/src/org/amnezia/vpn/AmneziaActivity.kt b/client/android/src/org/amnezia/vpn/AmneziaActivity.kt index ffe871109..2143c21b6 100644 --- a/client/android/src/org/amnezia/vpn/AmneziaActivity.kt +++ b/client/android/src/org/amnezia/vpn/AmneziaActivity.kt @@ -1109,6 +1109,13 @@ class AmneziaActivity : QtActivity() { @Suppress("unused") fun isPlay(): Boolean = BuildConfig.FLAVOR == "play" + @Suppress("unused") + fun isTestPurchaseEnvironment(): Boolean { + if (BuildConfig.DEBUG) return true + val appInfo = packageManager.getApplicationInfo(packageName, 0) + return (appInfo.flags and android.content.pm.ApplicationInfo.FLAG_DEBUGGABLE) != 0 + } + @Suppress("unused") fun getCountryCode(): String { Log.v(TAG, "Get country code") diff --git a/client/platforms/android/android_controller.cpp b/client/platforms/android/android_controller.cpp index e90f56f9a..e07e02b2c 100644 --- a/client/platforms/android/android_controller.cpp +++ b/client/platforms/android/android_controller.cpp @@ -330,7 +330,11 @@ void AndroidController::sendTouch(float x, float y) bool AndroidController::isPlay() { return callActivityMethod("isPlay", "()Z"); +} +bool AndroidController::isTestPurchaseEnvironment() +{ + return callActivityMethod("isTestPurchaseEnvironment", "()Z"); } QJsonObject AndroidController::getSubscriptionPlans() diff --git a/client/platforms/android/android_controller.h b/client/platforms/android/android_controller.h index 4cf3c049f..0a35d1a8a 100644 --- a/client/platforms/android/android_controller.h +++ b/client/platforms/android/android_controller.h @@ -56,6 +56,7 @@ public: bool requestAuthentication(); void sendTouch(float x, float y); bool isPlay(); + bool isTestPurchaseEnvironment(); QJsonObject getSubscriptionPlans(); QJsonObject purchaseSubscription(const QString &offerToken); QJsonObject upgradeSubscription(const QString &offerToken, const QString &oldPurchaseToken); diff --git a/client/ui/controllers/api/apiConfigsController.cpp b/client/ui/controllers/api/apiConfigsController.cpp index a6ba09814..408ca2cb5 100644 --- a/client/ui/controllers/api/apiConfigsController.cpp +++ b/client/ui/controllers/api/apiConfigsController.cpp @@ -674,7 +674,7 @@ bool ApiConfigsController::importSerivceFromPaymentMarket() QJsonObject apiPayload = gatewayRequestData.toJsonObject(); apiPayload[apiDefs::key::transactionId] = purchaseToken; - bool isTestPurchase = false; // TODO: detect if this is a test purchase + bool isTestPurchase = m_settings->isDevGatewayEnv(false) || androidController->isTestPurchaseEnvironment(); ErrorCode errorCode; QByteArray responseBody; @@ -914,8 +914,8 @@ bool ApiConfigsController::restoreSerivceFromPaymentMarket() QJsonObject apiPayload = gatewayRequestData.toJsonObject(); apiPayload[apiDefs::key::transactionId] = purchaseToken; - bool isTestPurchase = false; // TODO: detect if this is a test purchase - + bool isTestPurchase = m_settings->isDevGatewayEnv(false) || androidController->isTestPurchaseEnvironment(); + QByteArray responseBody; ErrorCode errorCode = executeRequest(QString("%1v1/subscriptions"), apiPayload, responseBody, isTestPurchase); if (errorCode != ErrorCode::NoError) {