@@ -2,7 +2,6 @@ package xyz.flipchat.services.billing
22
33import android.app.Activity
44import android.content.Context
5- import android.util.Base64
65import com.android.billingclient.api.AcknowledgePurchaseParams
76import com.android.billingclient.api.BillingClient
87import com.android.billingclient.api.BillingClient.BillingResponseCode
@@ -20,12 +19,7 @@ import com.android.billingclient.api.QueryProductDetailsParams
2019import com.android.billingclient.api.QueryPurchasesParams
2120import com.android.billingclient.api.acknowledgePurchase
2221import com.android.billingclient.api.consumePurchase
23- import com.codeinc.gen.user.v1.user
2422import com.getcode.model.uuid
25- import com.getcode.services.utils.base64EncodedData
26- import com.getcode.utils.base58
27- import com.getcode.utils.base64
28- import com.getcode.utils.encodeBase64
2923import com.google.common.collect.ImmutableList
3024import dagger.hilt.android.qualifiers.ApplicationContext
3125import kotlinx.coroutines.CoroutineScope
@@ -80,6 +74,7 @@ class GooglePlayBillingController(
8074 billingResult : BillingResult ,
8175 purchases : MutableList <Purchase >?
8276 ) {
77+ println (" GPBC onPurchasesUpdated c=${billingResult.responseCode} m=${billingResult.debugMessage} ; p=${purchases?.count()} " )
8378 if (billingResult.responseCode == BillingResponseCode .OK && purchases != null ) {
8479 for (purchase in purchases) {
8580 completePurchase(purchase)
@@ -123,10 +118,10 @@ class GooglePlayBillingController(
123118 )
124119 )
125120 }
126- return " ERROR "
121+ return " "
127122 }
128123
129- return details.oneTimePurchaseOfferDetails?.formattedPrice ? : " $0.99 "
124+ return details.oneTimePurchaseOfferDetails?.formattedPrice ? : " "
130125 }
131126
132127 override suspend fun purchase (activity : Activity , product : IapProduct ) {
@@ -161,19 +156,30 @@ class GooglePlayBillingController(
161156 }
162157
163158 private fun completePurchase (item : Purchase ) {
159+ println (" GPBC complete purchase ${item.orderId} ack=${item.isAcknowledged} " )
164160 if (! item.isAcknowledged) {
165161 acknowledgeOrConsume(item)
162+ } else {
163+ val productId = item.products.first()
164+ val product = IapProduct .entries.firstOrNull { it.productId == productId }
165+ if (product != null ) {
166+ scope.launch {
167+ _eventFlow .emit(IapPaymentEvent .OnSuccess (productId))
168+ }
169+ }
166170 }
167171
168172 purchases[item.products.first()] = item.purchaseState
169173 }
170174
171175 private fun acknowledgeOrConsume (item : Purchase ) {
176+ println (" GPBC ack or consume purchase" )
172177 val productId = item.products.first()
173178 val product = IapProduct .entries.firstOrNull { it.productId == productId }
174179 if (product != null ) {
175180 scope.launch {
176181 if (product.isConsumable) {
182+ println (" GPBC consumable" )
177183 val consumeResult = withContext(Dispatchers .IO ) {
178184 client.consumePurchase(
179185 ConsumeParams .newBuilder()
@@ -188,6 +194,7 @@ class GooglePlayBillingController(
188194 _eventFlow .emit(IapPaymentEvent .OnError (productId, IapPaymentError (consumeResult.billingResult)))
189195 }
190196 } else {
197+ println (" GPBC non-consumable" )
191198 val acknowledgeResult = withContext(Dispatchers .IO ) {
192199 client.acknowledgePurchase(
193200 AcknowledgePurchaseParams .newBuilder()
@@ -239,11 +246,12 @@ class GooglePlayBillingController(
239246
240247 client.queryPurchasesAsync(
241248 queryPurchasesParams,
242- purchasesListener
249+ restorePurchasesListener
243250 )
244251 }
245252
246- private val purchasesListener = PurchasesResponseListener { _, purchases ->
253+ private val restorePurchasesListener = PurchasesResponseListener { _, purchases ->
254+ println (" GPBC restore ${purchases.count()} " )
247255 purchases.onEach { completePurchase(it) }
248256 }
249257
@@ -252,15 +260,18 @@ class GooglePlayBillingController(
252260 billingResult : BillingResult
253261 ) {
254262 if (billingResult.responseCode == BillingResponseCode .OK ) {
263+ println (" GPBC connected!" )
255264 _stateFlow .update { BillingClientState .Connected }
256265 queryProducts()
257266 restorePurchases()
258267 } else {
268+ println (" GPBC connection failed" )
259269 _stateFlow .update { BillingClientState .Failed }
260270 }
261271 }
262272
263273 override fun onBillingServiceDisconnected () {
274+ println (" GPBC connection lost" )
264275 _stateFlow .update { BillingClientState .ConnectionLost }
265276 }
266277 }
0 commit comments