From e44d0ca2956359fceefb94711904f3eb2f4856e5 Mon Sep 17 00:00:00 2001 From: Mygod Date: Sat, 24 Sep 2022 19:34:20 -0400 Subject: [PATCH] Delay init EBegging --- .../src/main/java/be/mygod/vpnhotspot/App.kt | 1 - .../java/be/mygod/vpnhotspot/EBegFragment.kt | 72 +++++++++++-------- 2 files changed, 43 insertions(+), 30 deletions(-) diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/App.kt b/mobile/src/main/java/be/mygod/vpnhotspot/App.kt index 9856e2c9..df318424 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/App.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/App.kt @@ -83,7 +83,6 @@ class App : Application() { } }) ServiceNotification.updateNotificationChannels() - EBegFragment.init() if (DhcpWorkaround.shouldEnable) DhcpWorkaround.enable(true) } diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/EBegFragment.kt b/mobile/src/main/java/be/mygod/vpnhotspot/EBegFragment.kt index afcab8ce..a57715ea 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/EBegFragment.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/EBegFragment.kt @@ -23,28 +23,30 @@ import timber.log.Timber */ class EBegFragment : AppCompatDialogFragment() { companion object : BillingClientStateListener, PurchasesUpdatedListener { - private lateinit var billingClient: BillingClient - - fun init() { - billingClient = BillingClient.newBuilder(app).apply { + private val billingClient by lazy { + BillingClient.newBuilder(app).apply { enablePendingPurchases() - }.setListener(this).build().also { it.startConnection(this) } + }.setListener(this).build() } + private var instance: EBegFragment? = null override fun onBillingSetupFinished(billingResult: BillingResult) { if (billingResult.responseCode != BillingClient.BillingResponseCode.OK) { Timber.e("onBillingSetupFinished: ${billingResult.responseCode}") - } else GlobalScope.launch(Dispatchers.Main.immediate) { - val result = billingClient.queryPurchasesAsync(QueryPurchasesParams.newBuilder().apply { - setProductType(BillingClient.ProductType.INAPP) - }.build()) - onPurchasesUpdated(result.billingResult, result.purchasesList) + } else { + instance?.onBillingConnected() + GlobalScope.launch(Dispatchers.Main.immediate) { + val result = billingClient.queryPurchasesAsync(QueryPurchasesParams.newBuilder().apply { + setProductType(BillingClient.ProductType.INAPP) + }.build()) + onPurchasesUpdated(result.billingResult, result.purchasesList) + } } } override fun onBillingServiceDisconnected() { Timber.e("onBillingServiceDisconnected") - billingClient.startConnection(this) + if (instance != null) billingClient.startConnection(this) } override fun onPurchasesUpdated(billingResult: BillingResult, purchases: List?) { @@ -84,24 +86,6 @@ class EBegFragment : AppCompatDialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) dialog!!.setTitle(R.string.settings_misc_donate) - viewLifecycleOwner.lifecycleScope.launchWhenCreated { - billingClient.queryProductDetails(QueryProductDetailsParams.newBuilder().apply { - setProductList(listOf( - "donate001", "donate002", "donate005", "donate010", "donate020", "donate050", - "donate100", "donate200", "donatemax", - ).map { - QueryProductDetailsParams.Product.newBuilder().apply { - setProductId(it) - setProductType(BillingClient.ProductType.INAPP) - }.build() - }) - }.build()).apply { - if (billingResult.responseCode != BillingClient.BillingResponseCode.OK) { - Timber.e("queryProductDetails: ${billingResult.responseCode}") - SmartSnackbar.make(R.string.donations__google_android_market_not_supported).show() - } else productDetails = productDetailsList - } - } binding.donationsGoogleAndroidMarketDonateButton.setOnClickListener { val product = productDetails?.getOrNull(binding.donationsGoogleAndroidMarketSpinner.selectedItemPosition) if (product != null) billingClient.launchBillingFlow(requireActivity(), BillingFlowParams.newBuilder().apply { @@ -115,4 +99,34 @@ class EBegFragment : AppCompatDialogFragment() { requireContext().launchUrl("https://mygod.be/donate/") } } + + override fun onStart() { + super.onStart() + instance = this + billingClient.startConnection(EBegFragment) + } + + private fun onBillingConnected() = viewLifecycleOwner.lifecycleScope.launchWhenStarted { + billingClient.queryProductDetails(QueryProductDetailsParams.newBuilder().apply { + setProductList(listOf( + "donate001", "donate002", "donate005", "donate010", "donate020", "donate050", + "donate100", "donate200", "donatemax", + ).map { + QueryProductDetailsParams.Product.newBuilder().apply { + setProductId(it) + setProductType(BillingClient.ProductType.INAPP) + }.build() + }) + }.build()).apply { + if (billingResult.responseCode != BillingClient.BillingResponseCode.OK) { + Timber.e("queryProductDetails: ${billingResult.responseCode}") + SmartSnackbar.make(R.string.donations__google_android_market_not_supported).show() + } else productDetails = productDetailsList + } + } + + override fun onStop() { + instance = null + super.onStop() + } }