Implements billing service disconnection logic

dev
Laurent 7 years ago
parent ff8e2cdbae
commit 7448d73b19
  1. 28
      app/src/main/java/net/pokeranalytics/android/util/billing/AppGuard.kt

@ -35,28 +35,40 @@ object AppGuard : PurchasesUpdatedListener {
billingClient = BillingClient.newBuilder(context).setListener(this).build() billingClient = BillingClient.newBuilder(context).setListener(this).build()
this.startConnection(Runnable {
this.restorePurchases() this.restorePurchases()
})
}
private fun startConnection(executeOnSuccess: Runnable) {
billingClient.startConnection(object : BillingClientStateListener { billingClient.startConnection(object : BillingClientStateListener {
override fun onBillingSetupFinished(@BillingClient.BillingResponse billingResponseCode: Int) { override fun onBillingSetupFinished(@BillingClient.BillingResponse billingResponseCode: Int) {
if (billingResponseCode == BillingClient.BillingResponse.OK) { if (billingResponseCode == BillingClient.BillingResponse.OK) {
// The BillingClient is ready. You can query purchases here. // The BillingClient is ready. You can query purchases here.
billingClientAvailable = true billingClientAvailable = true
executeOnSuccess.run()
} }
} }
override fun onBillingServiceDisconnected() { override fun onBillingServiceDisconnected() {
billingClientAvailable = false billingClientAvailable = false
// Try to restart the connection on the next request to
// Google Play by calling the startConnection() method.
} }
}) })
} }
private fun executeServiceRequest(runnable: Runnable) {
if (billingClientAvailable) {
runnable.run()
} else {
this.startConnection(runnable)
}
}
/** /**
* Restore purchases * Restore purchases
*/ */
@ -81,7 +93,10 @@ object AppGuard : PurchasesUpdatedListener {
val params = SkuDetailsParams.newBuilder() val params = SkuDetailsParams.newBuilder()
params.setSkusList(skuList).setType(BillingClient.SkuType.SUBS) params.setSkusList(skuList).setType(BillingClient.SkuType.SUBS)
this.executeServiceRequest(Runnable {
billingClient.querySkuDetailsAsync(params.build(), listener) billingClient.querySkuDetailsAsync(params.build(), listener)
})
return true return true
} }
return false return false
@ -95,7 +110,10 @@ object AppGuard : PurchasesUpdatedListener {
val flowParams = BillingFlowParams.newBuilder() val flowParams = BillingFlowParams.newBuilder()
.setSkuDetails(skuDetails) .setSkuDetails(skuDetails)
.build() .build()
this.executeServiceRequest(Runnable {
val responseCode = billingClient.launchBillingFlow(activity, flowParams) val responseCode = billingClient.launchBillingFlow(activity, flowParams)
})
} }

Loading…
Cancel
Save