Skip to content

Commit 58b97d1

Browse files
committed
Support concurrent pending callbacks in IapBillingService
1 parent 830f426 commit 58b97d1

1 file changed

Lines changed: 8 additions & 6 deletions

File tree

presentation/src/playstoreiap/java/org/cryptomator/presentation/service/IapBillingService.kt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ class IapBillingService : Service(), PurchasesUpdatedListener, AcknowledgePurcha
3232
private lateinit var sharedPreferencesHandler: SharedPreferencesHandler
3333

3434
private val productDetailsMap = ConcurrentHashMap<String, ProductDetails>()
35-
@Volatile
36-
private var pendingProductDetailsCallback: ((List<ProductInfo>) -> Unit)? = null
35+
private val pendingProductDetailsCallbacks = mutableListOf<(List<ProductInfo>) -> Unit>()
3736

3837
private fun initBillingClient(context: Context) {
3938
this.sharedPreferencesHandler = SharedPreferencesHandler(context)
@@ -51,9 +50,12 @@ class IapBillingService : Service(), PurchasesUpdatedListener, AcknowledgePurcha
5150
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
5251
Timber.tag("IapBillingService").d("Billing setup successful")
5352
queryExistingPurchases()
54-
pendingProductDetailsCallback?.let { callback ->
55-
pendingProductDetailsCallback = null
56-
queryProductDetails(callback)
53+
if (pendingProductDetailsCallbacks.isNotEmpty()) {
54+
val callbacks = ArrayList(pendingProductDetailsCallbacks)
55+
pendingProductDetailsCallbacks.clear()
56+
queryProductDetails { products ->
57+
callbacks.forEach { it(products) }
58+
}
5759
}
5860
} else {
5961
Timber.tag("IapBillingService").e("Billing setup not successful, error: %d", billingResult.responseCode)
@@ -141,7 +143,7 @@ class IapBillingService : Service(), PurchasesUpdatedListener, AcknowledgePurcha
141143

142144
fun queryProductDetails(callback: (List<ProductInfo>) -> Unit) {
143145
if (!billingClient.isReady) {
144-
pendingProductDetailsCallback = callback
146+
pendingProductDetailsCallbacks.add(callback)
145147
return
146148
}
147149
val lock = Any()

0 commit comments

Comments
 (0)