in TrivialDriveKotlin/app/src/main/java/com/sample/android/trivialdrivesample/billing/BillingDataSource.kt [628:666]
fun launchBillingFlow(activity: Activity?, sku: String, vararg upgradeSkusVarargs: String) {
val skuDetails = skuDetailsMap[sku]?.value
if (null != skuDetails) {
val billingFlowParamsBuilder = BillingFlowParams.newBuilder()
billingFlowParamsBuilder.setSkuDetails(skuDetails)
val upgradeSkus = arrayOf(*upgradeSkusVarargs)
defaultScope.launch {
val heldSubscriptions = getPurchases(upgradeSkus, BillingClient.SkuType.SUBS)
when (heldSubscriptions.size) {
1 -> {
val purchase = heldSubscriptions[0]
billingFlowParamsBuilder.setSubscriptionUpdateParams(
BillingFlowParams.SubscriptionUpdateParams.newBuilder()
.setOldSkuPurchaseToken(purchase.purchaseToken)
.build()
)
}
0 -> {
}
else -> Log.e(
TAG,
heldSubscriptions.size.toString() +
" subscriptions subscribed to. Upgrade not possible."
)
}
val br = billingClient.launchBillingFlow(
activity!!,
billingFlowParamsBuilder.build()
)
if (br.responseCode == BillingClient.BillingResponseCode.OK) {
billingFlowInProcess.emit(true)
} else {
Log.e(TAG, "Billing failed: + " + br.debugMessage)
}
}
} else {
Log.e(TAG, "SkuDetails not found for: $sku")
}
}