From 2f6053b64e3651de2c04e9d33fab4a9e0cdd745e Mon Sep 17 00:00:00 2001 From: ed Date: Tue, 7 Jan 2020 12:32:26 +0000 Subject: [PATCH] Android: Removed hard dependency on billing client library --- .../Builds/Android/app/CMakeLists.txt | 2 +- .../Builds/Android/app/build.gradle | 2 - .../Android/app/src/main/AndroidManifest.xml | 1 - examples/DemoRunner/DemoRunner.jucer | 3 +- .../jucer_ProjectExport_Android.h | 3 ++ .../app/com/roli/juce/JuceBillingClient.java | 44 +++++-------------- .../native/juce_android_InAppPurchases.cpp | 26 +++++------ 7 files changed, 28 insertions(+), 53 deletions(-) rename modules/juce_product_unlocking/native/{javacore => javaopt}/app/com/roli/juce/JuceBillingClient.java (77%) diff --git a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt index e52d8c09fd..67b3abd007 100644 --- a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt +++ b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt @@ -8,7 +8,7 @@ SET(BINARY_NAME "juce_jni") add_library("cpufeatures" STATIC "${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c") set_source_files_properties("${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c" PROPERTIES COMPILE_FLAGS "-Wno-sign-conversion -Wno-gnu-statement-expression") -add_definitions("-DJUCE_ANDROID=1" "-DJUCE_ANDROID_API_VERSION=23" "-DJUCE_PUSH_NOTIFICATIONS=1" "-DJUCE_PUSH_NOTIFICATIONS_ACTIVITY=\"com/roli/juce/JuceActivity\"" "-DJUCE_IN_APP_PURCHASES=1" "-DJUCE_ANDROID_GL_ES_VERSION_3_0=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_ANDROIDSTUDIO_7F0E4A25=1" "-DJUCE_APP_VERSION=5.4.5" "-DJUCE_APP_VERSION_HEX=0x50405") +add_definitions("-DJUCE_ANDROID=1" "-DJUCE_ANDROID_API_VERSION=23" "-DJUCE_PUSH_NOTIFICATIONS=1" "-DJUCE_PUSH_NOTIFICATIONS_ACTIVITY=\"com/roli/juce/JuceActivity\"" "-DJUCE_ANDROID_GL_ES_VERSION_3_0=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_ANDROIDSTUDIO_7F0E4A25=1" "-DJUCE_APP_VERSION=5.4.5" "-DJUCE_APP_VERSION_HEX=0x50405") include_directories( AFTER "../../../JuceLibraryCode" diff --git a/examples/DemoRunner/Builds/Android/app/build.gradle b/examples/DemoRunner/Builds/Android/app/build.gradle index cfec92a480..0081e10bcc 100644 --- a/examples/DemoRunner/Builds/Android/app/build.gradle +++ b/examples/DemoRunner/Builds/Android/app/build.gradle @@ -87,7 +87,6 @@ android { ["../../../../../modules/juce_core/native/javacore/init", "../../../../../modules/juce_core/native/javacore/app", "../../../../../modules/juce_gui_basics/native/javacore/app", - "../../../../../modules/juce_product_unlocking/native/javacore/app", "../../../../../modules/juce_gui_basics/native/javaopt/app"] main.res.srcDirs += @@ -98,7 +97,6 @@ android { } dependencies { - implementation 'com.android.billingclient:billing:2.1.0' } diff --git a/examples/DemoRunner/Builds/Android/app/src/main/AndroidManifest.xml b/examples/DemoRunner/Builds/Android/app/src/main/AndroidManifest.xml index aba387e469..5d694fa56f 100644 --- a/examples/DemoRunner/Builds/Android/app/src/main/AndroidManifest.xml +++ b/examples/DemoRunner/Builds/Android/app/src/main/AndroidManifest.xml @@ -3,7 +3,6 @@ - diff --git a/examples/DemoRunner/DemoRunner.jucer b/examples/DemoRunner/DemoRunner.jucer index 116d9fca7e..4a28f30c59 100644 --- a/examples/DemoRunner/DemoRunner.jucer +++ b/examples/DemoRunner/DemoRunner.jucer @@ -90,8 +90,7 @@ + smallIcon="YyqWd2" bigIcon="YyqWd2" cameraPermissionNeeded="1"> diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Android.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Android.h index cbe1346ecd..aaa4988bfd 100644 --- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Android.h +++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Android.h @@ -912,6 +912,9 @@ private: if (areRemoteNotificationsEnabled()) addOptJavaFolderToSourceSetsForModule (javaSourceSets, modules, "juce_gui_extra"); + if (project.getEnabledModules().isModuleEnabled ("juce_product_unlocking") && isInAppBillingEnabled()) + addOptJavaFolderToSourceSetsForModule (javaSourceSets, modules, "juce_product_unlocking"); + MemoryOutputStream mo; mo.setNewLineString ("\n"); diff --git a/modules/juce_product_unlocking/native/javacore/app/com/roli/juce/JuceBillingClient.java b/modules/juce_product_unlocking/native/javaopt/app/com/roli/juce/JuceBillingClient.java similarity index 77% rename from modules/juce_product_unlocking/native/javacore/app/com/roli/juce/JuceBillingClient.java rename to modules/juce_product_unlocking/native/javaopt/app/com/roli/juce/JuceBillingClient.java index 713655752b..ad63f5ba6e 100644 --- a/modules/juce_product_unlocking/native/javacore/app/com/roli/juce/JuceBillingClient.java +++ b/modules/juce_product_unlocking/native/javaopt/app/com/roli/juce/JuceBillingClient.java @@ -1,38 +1,14 @@ package com.roli.juce; - -import android.content.Context; -import android.app.Activity; -import android.util.Log; - -import com.android.billingclient.api.BillingClient; -import com.android.billingclient.api.BillingFlowParams; -import com.android.billingclient.api.BillingResult; -import com.android.billingclient.api.BillingClientStateListener; -import com.android.billingclient.api.ConsumeResponseListener; -import com.android.billingclient.api.Purchase; -import com.android.billingclient.api.PurchasesUpdatedListener; -import com.android.billingclient.api.SkuDetails; -import com.android.billingclient.api.SkuDetailsParams; -import com.android.billingclient.api.SkuDetailsResponseListener; -import com.android.billingclient.api.AcknowledgePurchaseParams; -import com.android.billingclient.api.AcknowledgePurchaseResponseListener; -import com.android.billingclient.api.ConsumeParams; - -import java.util.Arrays; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - +import com.android.billingclient.api.*; public class JuceBillingClient implements PurchasesUpdatedListener { - private native void skuDetailsQueryCallback(long host, List skuDetails); - private native void purchasesListQueryCallback(long host, List purchases); + private native void skuDetailsQueryCallback(long host, java.util.List skuDetails); + private native void purchasesListQueryCallback(long host, java.util.List purchases); private native void purchaseCompletedCallback(long host, Purchase purchase, int responseCode); private native void purchaseConsumedCallback(long host, String productIdentifier, int responseCode); - public JuceBillingClient(Context context, long hostToUse) { + public JuceBillingClient(android.content.Context context, long hostToUse) { host = hostToUse; billingClient = BillingClient.newBuilder(context) @@ -60,7 +36,7 @@ public class JuceBillingClient implements PurchasesUpdatedListener { executeOnBillingClientConnection(new Runnable() { @Override public void run() { - final List skuList = Arrays.asList(skusToQuery); + final java.util.List skuList = java.util.Arrays.asList(skusToQuery); SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder() .setSkusList(skuList) @@ -68,7 +44,7 @@ public class JuceBillingClient implements PurchasesUpdatedListener { billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() { @Override - public void onSkuDetailsResponse(BillingResult billingResult, final List inAppSkuDetails) { + public void onSkuDetailsResponse(BillingResult billingResult, final java.util.List inAppSkuDetails) { if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) { SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder() .setSkusList(skuList) @@ -76,7 +52,7 @@ public class JuceBillingClient implements PurchasesUpdatedListener { billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() { @Override - public void onSkuDetailsResponse(BillingResult billingResult, List subsSkuDetails) { + public void onSkuDetailsResponse(BillingResult billingResult, java.util.List subsSkuDetails) { if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) { subsSkuDetails.addAll(inAppSkuDetails); skuDetailsQueryCallback(host, subsSkuDetails); @@ -90,7 +66,7 @@ public class JuceBillingClient implements PurchasesUpdatedListener { }); } - public void launchBillingFlow(final Activity activity, final BillingFlowParams params) { + public void launchBillingFlow(final android.app.Activity activity, final BillingFlowParams params) { executeOnBillingClientConnection(new Runnable() { @Override public void run() { @@ -108,7 +84,7 @@ public class JuceBillingClient implements PurchasesUpdatedListener { if (inAppPurchases.getResponseCode() == BillingClient.BillingResponseCode.OK && subsPurchases.getResponseCode() == BillingClient.BillingResponseCode.OK) { - List purchaseList = inAppPurchases.getPurchasesList(); + java.util.List purchaseList = inAppPurchases.getPurchasesList(); purchaseList.addAll(subsPurchases.getPurchasesList()); purchasesListQueryCallback(host, purchaseList); @@ -139,7 +115,7 @@ public class JuceBillingClient implements PurchasesUpdatedListener { } @Override - public void onPurchasesUpdated(BillingResult result, List purchases) { + public void onPurchasesUpdated(BillingResult result, java.util.List purchases) { int responseCode = result.getResponseCode(); if (purchases != null) { diff --git a/modules/juce_product_unlocking/native/juce_android_InAppPurchases.cpp b/modules/juce_product_unlocking/native/juce_android_InAppPurchases.cpp index 1d0eb4af56..9d2ee8ac33 100644 --- a/modules/juce_product_unlocking/native/juce_android_InAppPurchases.cpp +++ b/modules/juce_product_unlocking/native/juce_android_InAppPurchases.cpp @@ -219,19 +219,19 @@ struct InAppPurchases::Pimpl private: #define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \ - METHOD (constructor, "", "(Landroid/content/Context;J)V") \ - METHOD (endConnection, "endConnection", "()V") \ - METHOD (isReady, "isReady", "()Z") \ - METHOD (isBillingSupported, "isBillingSupported", "()Z") \ - METHOD (querySkuDetails, "querySkuDetails", "([Ljava/lang/String;)V") \ - METHOD (launchBillingFlow, "launchBillingFlow", "(Landroid/app/Activity;Lcom/android/billingclient/api/BillingFlowParams;)V") \ - METHOD (queryPurchases, "queryPurchases", "()V") \ - METHOD (consumePurchase, "consumePurchase", "(Ljava/lang/String;Ljava/lang/String;)V") \ - \ - CALLBACK (InAppPurchases::Pimpl::skuDetailsQueryCallback, "skuDetailsQueryCallback", "(JLjava/util/List;)V") \ - CALLBACK (InAppPurchases::Pimpl::purchasesListQueryCallback, "purchasesListQueryCallback", "(JLjava/util/List;)V") \ - CALLBACK (InAppPurchases::Pimpl::purchaseCompletedCallback, "purchaseCompletedCallback", "(JLcom/android/billingclient/api/Purchase;I)V") \ - CALLBACK (InAppPurchases::Pimpl::purchaseConsumedCallback, "purchaseConsumedCallback", "(JLjava/lang/String;I)V") + METHOD (constructor, "", "(Landroid/content/Context;J)V") \ + METHOD (endConnection, "endConnection", "()V") \ + METHOD (isReady, "isReady", "()Z") \ + METHOD (isBillingSupported, "isBillingSupported", "()Z") \ + METHOD (querySkuDetails, "querySkuDetails", "([Ljava/lang/String;)V") \ + METHOD (launchBillingFlow, "launchBillingFlow", "(Landroid/app/Activity;Lcom/android/billingclient/api/BillingFlowParams;)V") \ + METHOD (queryPurchases, "queryPurchases", "()V") \ + METHOD (consumePurchase, "consumePurchase", "(Ljava/lang/String;Ljava/lang/String;)V") \ + \ + CALLBACK (skuDetailsQueryCallback, "skuDetailsQueryCallback", "(JLjava/util/List;)V") \ + CALLBACK (purchasesListQueryCallback, "purchasesListQueryCallback", "(JLjava/util/List;)V") \ + CALLBACK (purchaseCompletedCallback, "purchaseCompletedCallback", "(JLcom/android/billingclient/api/Purchase;I)V") \ + CALLBACK (purchaseConsumedCallback, "purchaseConsumedCallback", "(JLjava/lang/String;I)V") DECLARE_JNI_CLASS (JuceBillingClient, "com/roli/juce/JuceBillingClient") #undef JNI_CLASS_MEMBERS