Skip to content

Commit

Permalink
Android: Removed hard dependency on billing client library
Browse files Browse the repository at this point in the history
  • Loading branch information
ed95 committed Jan 7, 2020
1 parent a54da0b commit 2f6053b
Show file tree
Hide file tree
Showing 7 changed files with 28 additions and 53 deletions.
2 changes: 1 addition & 1 deletion examples/DemoRunner/Builds/Android/app/CMakeLists.txt
Expand Up @@ -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"
Expand Down
2 changes: 0 additions & 2 deletions examples/DemoRunner/Builds/Android/app/build.gradle
Expand Up @@ -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 +=
Expand All @@ -98,7 +97,6 @@ android {
}

dependencies {
implementation 'com.android.billingclient:billing:2.1.0'
}


Expand Down
Expand Up @@ -3,7 +3,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="5.4.5"
package="com.juce.demorunner">
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true"/>
<uses-permission android:name="com.android.vending.BILLING"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
Expand Down
3 changes: 1 addition & 2 deletions examples/DemoRunner/DemoRunner.jucer
Expand Up @@ -90,8 +90,7 @@
<ANDROIDSTUDIO targetFolder="Builds/Android" androidMinimumSDK="23" microphonePermissionNeeded="1"
androidBluetoothNeeded="1" androidExternalReadNeeded="1" androidExternalWriteNeeded="1"
androidEnableContentSharing="1" androidExtraAssetsFolder="../Assets"
smallIcon="YyqWd2" bigIcon="YyqWd2" cameraPermissionNeeded="1"
androidInAppBilling="1">
smallIcon="YyqWd2" bigIcon="YyqWd2" cameraPermissionNeeded="1">
<CONFIGURATIONS>
<CONFIGURATION isDebug="1" name="Debug" androidArchitectures="armeabi-v7a x86"
recommendedWarnings="LLVM"/>
Expand Down
Expand Up @@ -912,6 +912,9 @@ class AndroidProjectExporter : public ProjectExporter
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");

Expand Down
@@ -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> skuDetails);
private native void purchasesListQueryCallback(long host, List<Purchase> purchases);
private native void skuDetailsQueryCallback(long host, java.util.List<SkuDetails> skuDetails);
private native void purchasesListQueryCallback(long host, java.util.List<Purchase> 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)
Expand Down Expand Up @@ -60,23 +36,23 @@ public void querySkuDetails(final String[] skusToQuery) {
executeOnBillingClientConnection(new Runnable() {
@Override
public void run() {
final List<String> skuList = Arrays.asList(skusToQuery);
final java.util.List<String> skuList = java.util.Arrays.asList(skusToQuery);

SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder()
.setSkusList(skuList)
.setType(BillingClient.SkuType.INAPP);

billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(BillingResult billingResult, final List<SkuDetails> inAppSkuDetails) {
public void onSkuDetailsResponse(BillingResult billingResult, final java.util.List<SkuDetails> inAppSkuDetails) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder()
.setSkusList(skuList)
.setType(BillingClient.SkuType.SUBS);

billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> subsSkuDetails) {
public void onSkuDetailsResponse(BillingResult billingResult, java.util.List<SkuDetails> subsSkuDetails) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
subsSkuDetails.addAll(inAppSkuDetails);
skuDetailsQueryCallback(host, subsSkuDetails);
Expand All @@ -90,7 +66,7 @@ public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> s
});
}

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() {
Expand All @@ -108,7 +84,7 @@ public void run() {

if (inAppPurchases.getResponseCode() == BillingClient.BillingResponseCode.OK
&& subsPurchases.getResponseCode() == BillingClient.BillingResponseCode.OK) {
List<Purchase> purchaseList = inAppPurchases.getPurchasesList();
java.util.List<Purchase> purchaseList = inAppPurchases.getPurchasesList();
purchaseList.addAll(subsPurchases.getPurchasesList());

purchasesListQueryCallback(host, purchaseList);
Expand Down Expand Up @@ -139,7 +115,7 @@ public void onConsumeResponse(BillingResult billingResult, String purchaseToken)
}

@Override
public void onPurchasesUpdated(BillingResult result, List<Purchase> purchases) {
public void onPurchasesUpdated(BillingResult result, java.util.List<Purchase> purchases) {
int responseCode = result.getResponseCode();

if (purchases != null) {
Expand Down
Expand Up @@ -219,19 +219,19 @@ struct InAppPurchases::Pimpl

private:
#define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD, CALLBACK) \
METHOD (constructor, "<init>", "(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, "<init>", "(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
Expand Down

0 comments on commit 2f6053b

Please sign in to comment.