diff --git a/modules/juce_product_unlocking/native/juce_android_InAppPurchases.cpp b/modules/juce_product_unlocking/native/juce_android_InAppPurchases.cpp index d8aff12d09..494de7f60f 100644 --- a/modules/juce_product_unlocking/native/juce_android_InAppPurchases.cpp +++ b/modules/juce_product_unlocking/native/juce_android_InAppPurchases.cpp @@ -202,10 +202,10 @@ struct InAppPurchases::Pimpl : private AsyncUpdater, void restoreProductsBoughtList (bool, const juce::String&) { - auto callback = [this](const Array& purchases) + auto callback = [this](const GetProductsBoughtJob::Result& r) { const ScopedLock lock (getProductsBoughtJobResultsLock); - getProductsBoughtJobResults.insert (0, purchases); + getProductsBoughtJobResults.insert (0, r); triggerAsyncUpdate(); }; @@ -541,7 +541,14 @@ struct InAppPurchases::Pimpl : private AsyncUpdater, //============================================================================== struct GetProductsBoughtJob : public ThreadPoolJob { - using Callback = std::function&)>; + struct Result + { + bool success = false; + Array purchases; + String statusDescription; + }; + + using Callback = std::function; GetProductsBoughtJob (Pimpl& parent, const LocalRef& packageNameToUse, @@ -569,12 +576,12 @@ struct InAppPurchases::Pimpl : private AsyncUpdater, purchases.add ({ purchase, {} }); if (callback) - callback (purchases); + callback ({true, purchases, "Success"}); } else { if (callback) - callback ({}); + callback ({false, {}, "In-App purchases unavailable"}); } return jobHasFinished; @@ -656,8 +663,8 @@ struct InAppPurchases::Pimpl : private AsyncUpdater, public: struct Result { + bool success = false; String productIdentifier; - bool success; String statusDescription; }; @@ -687,7 +694,7 @@ struct InAppPurchases::Pimpl : private AsyncUpdater, if (token.isEmpty()) { if (callback) - callback ({ productIdentifier, false, NEEDS_TRANS ("Item not owned") }); + callback ({ false, productIdentifier, NEEDS_TRANS ("Item not owned") }); return jobHasFinished; } @@ -696,12 +703,12 @@ struct InAppPurchases::Pimpl : private AsyncUpdater, (jstring)packageName.get(), javaString (token).get()); if (callback) - callback ({ productIdentifier, responseCode == 0, statusCodeToUserString (responseCode) }); + callback ({ responseCode == 0, productIdentifier, statusCodeToUserString (responseCode) }); } else { if (callback) - callback ({{}, false, "In-App purchases unavailable"}); + callback ({false, {}, "In-App purchases unavailable"}); } return jobHasFinished; @@ -785,7 +792,7 @@ struct InAppPurchases::Pimpl : private AsyncUpdater, { const auto& result = getProductsBoughtJobResults.getReference (i); - owner.listeners.call (&Listener::purchasesListRestored, result, true, NEEDS_TRANS ("Success")); + owner.listeners.call (&Listener::purchasesListRestored, result.purchases, result.success, result.statusDescription); getProductsBoughtJobResults.remove (i); } } @@ -918,7 +925,7 @@ struct InAppPurchases::Pimpl : private AsyncUpdater, consumePurchaseJobResultsLock; Array> getProductsInformationJobResults; - Array> getProductsBoughtJobResults; + Array getProductsBoughtJobResults; Array consumePurchaseJobResults; };