Skip to content

Commit 30ae805

Browse files
authored
Merge pull request #639 from qonversion/release/8.2.0
Release 8.2.0
2 parents af8e15d + b4c7c31 commit 30ae805

File tree

6 files changed

+59
-17
lines changed

6 files changed

+59
-17
lines changed

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import io.gitlab.arturbosch.detekt.DetektCreateBaselineTask
66
buildscript {
77
ext {
88
release = [
9-
versionName: "8.1.1",
9+
versionName: "8.2.0",
1010
versionCode: 1
1111
]
1212
}

config/detekt/baseline.xml

+6-2
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@
118118
<ID>MaxLineLength:QonversionConfig.kt$QonversionConfig.Builder$*</ID>
119119
<ID>MaxLineLength:QonversionError.kt$QonversionErrorCode$*</ID>
120120
<ID>MaxLineLength:QonversionError.kt$QonversionErrorCode$RemoteConfigurationNotAvailable : QonversionErrorCode</ID>
121+
<ID>MaxLineLength:QonversionInternal.kt$QonversionInternal$@Deprecated("Use the new purchase() method", replaceWith = ReplaceWith("purchase(context, TODO(\"pass product here\"), callback)"))</ID>
122+
<ID>MaxLineLength:QonversionInternal.kt$QonversionInternal$@Deprecated("Use the new updatePurchase() method", replaceWith = ReplaceWith("updatePurchase(context, TODO(\"pass product here\"), TODO(\"pass purchase options here\"), callback)"))</ID>
121123
<ID>MaxLineLength:QonversionRepositoryIntegrationTest.kt$QonversionRepositoryIntegrationTest$"""HTTP status code=400, data={"message":"Invalid access token received","code":10003,"status":400,"extra":[]}. """</ID>
122124
<ID>MaxLineLength:QonversionRepositoryIntegrationTest.kt$QonversionRepositoryIntegrationTest$"lcbfeigohklhpdgmpildjabg.AO-J1OyV-EE2bKGqDcRCvqjZ2NI1uHDRuvonRn5RorP6LNsyK7yHK8FaFlXp6bjTEX3-4JvZKtbY_bpquKBfux09Mfkx05M9YGZsfsr5BJk74r719m77Oyo"</ID>
123125
<ID>MaxLineLength:QonversionRepositoryIntegrationTest.kt$QonversionRepositoryIntegrationTest$"lgeigljfpmeoddkcebkcepjc.AO-J1Oy305qZj99jXTPEVBN8UZGoYAtjDLj4uTjRQvUFaG0vie-nr6VBlN0qnNDMU8eJR-sI7o3CwQyMOEHKl8eJsoQ86KSFzxKBR07PSpHLI_o7agXhNKY"</ID>
@@ -154,11 +156,13 @@
154156
<ID>MaximumLineLength:com.qonversion.android.sdk.internal.OutagerIntegrationTest.kt:214</ID>
155157
<ID>MaximumLineLength:com.qonversion.android.sdk.internal.OutagerIntegrationTest.kt:371</ID>
156158
<ID>MaximumLineLength:com.qonversion.android.sdk.internal.OutagerIntegrationTest.kt:90</ID>
157-
<ID>MaximumLineLength:com.qonversion.android.sdk.internal.QProductCenterManager.kt:332</ID>
159+
<ID>MaximumLineLength:com.qonversion.android.sdk.internal.QProductCenterManager.kt:333</ID>
158160
<ID>MaximumLineLength:com.qonversion.android.sdk.internal.QProductCenterManagerTest.kt:152</ID>
159161
<ID>MaximumLineLength:com.qonversion.android.sdk.internal.QProductCenterManagerTest.kt:153</ID>
160162
<ID>MaximumLineLength:com.qonversion.android.sdk.internal.QRemoteConfigManager.kt:225</ID>
161163
<ID>MaximumLineLength:com.qonversion.android.sdk.internal.QUserPropertiesManagerTest.kt:178</ID>
164+
<ID>MaximumLineLength:com.qonversion.android.sdk.internal.QonversionInternal.kt:162</ID>
165+
<ID>MaximumLineLength:com.qonversion.android.sdk.internal.QonversionInternal.kt:213</ID>
162166
<ID>MaximumLineLength:com.qonversion.android.sdk.internal.QonversionRepositoryIntegrationTest.kt:287</ID>
163167
<ID>MaximumLineLength:com.qonversion.android.sdk.internal.QonversionRepositoryIntegrationTest.kt:356</ID>
164168
<ID>MaximumLineLength:com.qonversion.android.sdk.internal.QonversionRepositoryIntegrationTest.kt:878</ID>
@@ -243,7 +247,7 @@
243247
<ID>ReturnCount:QExceptionManager.kt$QExceptionManager$private fun getContentOfCrashReport(filename: String): CrashRequest.ExceptionInfo?</ID>
244248
<ID>ReturnCount:QProductCenterManager.kt$QProductCenterManager$@Synchronized private fun executeProductsBlocks(loadStoreProductsError: QonversionError? = null)</ID>
245249
<ID>ReturnCount:QProductCenterManager.kt$QProductCenterManager$fun identify(identityId: String, callback: QonversionUserCallback? = null)</ID>
246-
<ID>ReturnCount:QProductCenterManager.kt$QProductCenterManager$private fun calculatePurchasePermissionsLocally( purchase: Purchase, purchaseCallback: QonversionEntitlementsCallback?, purchaseError: QonversionError )</ID>
250+
<ID>ReturnCount:QProductCenterManager.kt$QProductCenterManager$private fun calculatePurchasePermissionsLocally( purchase: Purchase, purchaseCallback: QonversionPurchaseCallback?, purchaseError: QonversionError )</ID>
247251
<ID>ReturnCount:ScreenPresenter.kt$ScreenPresenter$override fun shouldOverrideUrlLoading(url: String?): Boolean</ID>
248252
<ID>SpacingAroundColon:com.qonversion.android.sdk.internal.requests.ProviderDataRequestTest.kt:45</ID>
249253
<ID>SpacingAroundCurly:com.qonversion.android.sdk.automations.internal.QAutomationsManagerTest.kt:254</ID>

fastlane/report.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66

77

8-
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000306">
8+
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.00016">
99

1010
</testcase>
1111

sdk/src/main/java/com/qonversion/android/sdk/internal/QProductCenterManager.kt

+9-8
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import com.qonversion.android.sdk.internal.services.QUserInfoService
4545
import com.qonversion.android.sdk.internal.storage.LaunchResultCacheWrapper
4646
import com.qonversion.android.sdk.internal.storage.PurchasesCache
4747
import com.qonversion.android.sdk.listeners.QEntitlementsUpdateListener
48+
import com.qonversion.android.sdk.listeners.QonversionPurchaseCallback
4849
import com.qonversion.android.sdk.listeners.QonversionUserCallback
4950
import kotlin.math.min
5051
import java.util.Date
@@ -79,7 +80,7 @@ internal class QProductCenterManager internal constructor(
7980

8081
private var productsCallbacks = mutableListOf<QonversionProductsCallback>()
8182
private var entitlementCallbacks = mutableListOf<QonversionEntitlementsCallback>()
82-
private var purchasingCallbacks = mutableMapOf<String, QonversionEntitlementsCallback>()
83+
private var purchasingCallbacks = mutableMapOf<String, QonversionPurchaseCallback>()
8384
private var restoreCallbacks = mutableListOf<QonversionEntitlementsCallback>()
8485

8586
private var processingPartnersIdentityId: String? = null
@@ -292,7 +293,7 @@ internal class QProductCenterManager internal constructor(
292293
fun purchaseProduct(
293294
context: Activity,
294295
purchaseModel: PurchaseModelInternal,
295-
callback: QonversionEntitlementsCallback
296+
callback: QonversionPurchaseCallback
296297
) {
297298
if (internalConfig.isAnalyticsMode) {
298299
logger.warn(
@@ -318,7 +319,7 @@ internal class QProductCenterManager internal constructor(
318319
private fun tryToPurchase(
319320
context: Activity,
320321
purchaseModel: PurchaseModelInternal,
321-
callback: QonversionEntitlementsCallback
322+
callback: QonversionPurchaseCallback
322323
) {
323324
val products = launchResultCache.getActualProducts() ?: run {
324325
callback.onError(launchError ?: QonversionError(QonversionErrorCode.LaunchError))
@@ -337,7 +338,7 @@ internal class QProductCenterManager internal constructor(
337338
private fun processPurchase(
338339
context: Activity,
339340
purchaseModel: PurchaseModelInternalEnriched,
340-
callback: QonversionEntitlementsCallback
341+
callback: QonversionPurchaseCallback
341342
) {
342343
if (purchaseModel.product.storeID == null) {
343344
callback.onError(QonversionError(QonversionErrorCode.ProductNotFound))
@@ -477,7 +478,7 @@ internal class QProductCenterManager internal constructor(
477478

478479
private fun calculatePurchasePermissionsLocally(
479480
purchase: Purchase,
480-
purchaseCallback: QonversionEntitlementsCallback?,
481+
purchaseCallback: QonversionPurchaseCallback?,
481482
purchaseError: QonversionError
482483
) {
483484
val products = launchResultCache.getActualProducts() ?: run {
@@ -505,11 +506,11 @@ internal class QProductCenterManager internal constructor(
505506
purchasedProduct,
506507
productPermissions
507508
)
508-
purchaseCallback?.onSuccess(permissions.toEntitlementsMap())
509+
purchaseCallback?.onSuccess(permissions.toEntitlementsMap(), purchase)
509510
}
510511

511512
private fun failLocallyGrantingPurchasePermissionsWithError(
512-
callback: QonversionEntitlementsCallback?,
513+
callback: QonversionPurchaseCallback?,
513514
error: QonversionError
514515
) {
515516
launchResultCache.clearPermissionsCache()
@@ -999,7 +1000,7 @@ internal class QProductCenterManager internal constructor(
9991000
val entitlements = launchResult.permissions.toEntitlementsMap()
10001001

10011002
removePurchaseOptions(product?.storeID)
1002-
purchaseCallback?.onSuccess(entitlements) ?: run {
1003+
purchaseCallback?.onSuccess(entitlements, purchase) ?: run {
10031004
internalConfig.entitlementsUpdateListener?.onEntitlementsUpdated(
10041005
entitlements
10051006
)

sdk/src/main/java/com/qonversion/android/sdk/internal/QonversionInternal.kt

+37-5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.app.Application
55
import android.os.Handler
66
import android.os.Looper
77
import androidx.lifecycle.ProcessLifecycleOwner
8+
import com.android.billingclient.api.Purchase
89
import com.qonversion.android.sdk.Qonversion
910
import com.qonversion.android.sdk.automations.internal.QAutomationsManager
1011
import com.qonversion.android.sdk.dto.QAttributionProvider
@@ -37,6 +38,7 @@ import com.qonversion.android.sdk.listeners.QonversionRemoteConfigCallback
3738
import com.qonversion.android.sdk.listeners.QonversionEligibilityCallback
3839
import com.qonversion.android.sdk.listeners.QonversionUserCallback
3940
import com.qonversion.android.sdk.listeners.QEntitlementsUpdateListener
41+
import com.qonversion.android.sdk.listeners.QonversionPurchaseCallback
4042
import com.qonversion.android.sdk.listeners.QonversionRemoteConfigListCallback
4143
import com.qonversion.android.sdk.listeners.QonversionRemoteConfigurationAttachCallback
4244
import com.qonversion.android.sdk.listeners.QonversionUserPropertiesCallback
@@ -157,6 +159,7 @@ internal class QonversionInternal(
157159
})
158160
}
159161

162+
@Deprecated("Use the new purchase() method", replaceWith = ReplaceWith("purchase(context, TODO(\"pass product here\"), callback)"))
160163
override fun purchase(
161164
context: Activity,
162165
purchaseModel: QPurchaseModel,
@@ -165,7 +168,7 @@ internal class QonversionInternal(
165168
productCenterManager.purchaseProduct(
166169
context,
167170
PurchaseModelInternal(purchaseModel),
168-
mainEntitlementsCallback(callback)
171+
mainPurchaseCallback(callback)
169172
)
170173
}
171174

@@ -178,7 +181,7 @@ internal class QonversionInternal(
178181
productCenterManager.purchaseProduct(
179182
context,
180183
PurchaseModelInternal(product, options),
181-
mainEntitlementsCallback(callback)
184+
mainPurchaseCallback(callback)
182185
)
183186
}
184187

@@ -190,7 +193,7 @@ internal class QonversionInternal(
190193
productCenterManager.purchaseProduct(
191194
context,
192195
PurchaseModelInternal(product),
193-
mainEntitlementsCallback(callback)
196+
mainPurchaseCallback(callback)
194197
)
195198
}
196199

@@ -203,10 +206,11 @@ internal class QonversionInternal(
203206
productCenterManager.purchaseProduct(
204207
context,
205208
PurchaseModelInternal(product, options),
206-
mainEntitlementsCallback(callback)
209+
mainPurchaseCallback(callback)
207210
)
208211
}
209212

213+
@Deprecated("Use the new updatePurchase() method", replaceWith = ReplaceWith("updatePurchase(context, TODO(\"pass product here\"), TODO(\"pass purchase options here\"), callback)"))
210214
override fun updatePurchase(
211215
context: Activity,
212216
purchaseUpdateModel: QPurchaseUpdateModel,
@@ -215,7 +219,7 @@ internal class QonversionInternal(
215219
productCenterManager.purchaseProduct(
216220
context,
217221
PurchaseModelInternal(purchaseUpdateModel),
218-
mainEntitlementsCallback(callback)
222+
mainPurchaseCallback(callback)
219223
)
220224
}
221225

@@ -395,6 +399,34 @@ internal class QonversionInternal(
395399
postToMainThread { callback.onError(error) }
396400
}
397401

402+
private fun mainPurchaseCallback(callback: QonversionEntitlementsCallback): QonversionPurchaseCallback {
403+
val purchaseCallback = if (callback is QonversionPurchaseCallback) {
404+
callback
405+
} else {
406+
object : QonversionPurchaseCallback {
407+
override fun onSuccess(entitlements: Map<String, QEntitlement>) {
408+
callback.onSuccess(entitlements)
409+
}
410+
411+
override fun onError(error: QonversionError) {
412+
callback.onError(error)
413+
}
414+
}
415+
}
416+
417+
return object : QonversionPurchaseCallback {
418+
override fun onSuccess(entitlements: Map<String, QEntitlement>, purchase: Purchase) {
419+
postToMainThread { purchaseCallback.onSuccess(entitlements, purchase) }
420+
}
421+
422+
override fun onSuccess(entitlements: Map<String, QEntitlement>) =
423+
postToMainThread { purchaseCallback.onSuccess(entitlements) }
424+
425+
override fun onError(error: QonversionError) =
426+
postToMainThread { purchaseCallback.onError(error) }
427+
}
428+
}
429+
398430
private fun mainUserCallback(callback: QonversionUserCallback): QonversionUserCallback =
399431
object : QonversionUserCallback {
400432
override fun onSuccess(user: QUser) =

sdk/src/main/java/com/qonversion/android/sdk/listeners/QonversionCallback.kt

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.qonversion.android.sdk.listeners
22

3+
import com.android.billingclient.api.Purchase
34
import com.qonversion.android.sdk.dto.entitlements.QEntitlement
45
import com.qonversion.android.sdk.dto.QRemoteConfig
56
import com.qonversion.android.sdk.dto.QRemoteConfigList
@@ -46,6 +47,10 @@ interface QonversionRemoteConfigurationAttachCallback {
4647
fun onError(error: QonversionError)
4748
}
4849

50+
interface QonversionPurchaseCallback : QonversionEntitlementsCallback {
51+
fun onSuccess(entitlements: Map<String, QEntitlement>, purchase: Purchase) = onSuccess(entitlements)
52+
}
53+
4954
interface QonversionEntitlementsCallback {
5055
fun onSuccess(entitlements: Map<String, QEntitlement>)
5156
fun onError(error: QonversionError)

0 commit comments

Comments
 (0)