diff --git a/app/src/gplay/java/eu/darken/capod/common/upgrade/core/client/BillingClientConnectionProvider.kt b/app/src/gplay/java/eu/darken/capod/common/upgrade/core/client/BillingClientConnectionProvider.kt index 58de4a15..1009e324 100644 --- a/app/src/gplay/java/eu/darken/capod/common/upgrade/core/client/BillingClientConnectionProvider.kt +++ b/app/src/gplay/java/eu/darken/capod/common/upgrade/core/client/BillingClientConnectionProvider.kt @@ -14,15 +14,15 @@ import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.common.flow.setupCommonEventHandlers import kotlinx.coroutines.CancellationException import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.channels.trySendBlocking import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.retryWhen +import kotlinx.coroutines.launch import javax.inject.Inject import javax.inject.Singleton -import kotlin.coroutines.resume -import kotlin.coroutines.suspendCoroutine @Singleton class BillingClientConnectionProvider @Inject constructor( @@ -48,36 +48,36 @@ class BillingClientConnectionProvider @Inject constructor( } }.build() - val connectionResult = suspendCoroutine { continuation -> - log(TAG, VERBOSE) { "startConnection(...)" } - client.startConnection(object : BillingClientStateListener { - override fun onBillingSetupFinished(result: BillingResult) { - log(TAG, VERBOSE) { - "onBillingSetupFinished(code=${result.responseCode}, message=${result.debugMessage})" + + log(TAG, VERBOSE) { "startConnection(...)" } + client.startConnection(object : BillingClientStateListener { + override fun onBillingSetupFinished(result: BillingResult) { + log(TAG, VERBOSE) { + "onBillingSetupFinished(code=${result.responseCode}, message=${result.debugMessage})" + } + + val billingClientConnection = when (result.responseCode) { + BillingResponseCode.OK -> BillingClientConnection(client, purchasePublisher) + else -> throw BillingClientException(result) + } + + trySendBlocking(billingClientConnection) + + launch { + try { + purchasePublisher.value = billingClientConnection.queryPurchases() + log(TAG) { "Initial IAP query successful." } + } catch (e: Exception) { + log(TAG, ERROR) { "Initial IAP query failed:\n${e.asLog()}" } } - continuation.resume(result) } + } - override fun onBillingServiceDisconnected() { - log(TAG, VERBOSE) { "onBillingServiceDisconnected() " } - close(CancellationException("Billing service disconnected")) - } - }) - } - - val billingClientConnection = when (connectionResult.responseCode) { - BillingResponseCode.OK -> BillingClientConnection(client, purchasePublisher) - else -> throw BillingClientException(connectionResult) - } - - try { - purchasePublisher.value = billingClientConnection.queryPurchases() - log(TAG) { "Initial IAP query successful." } - } catch (e: Exception) { - log(TAG, ERROR) { "Initial IAP query failed:\n${e.asLog()}" } - } - - send(billingClientConnection) + override fun onBillingServiceDisconnected() { + log(TAG, VERBOSE) { "onBillingServiceDisconnected() " } + error(BillingException("Billing service disconnected")) + } + }) log(TAG) { "Awaiting close." } awaitClose { diff --git a/app/src/gplay/java/eu/darken/capod/common/upgrade/core/client/BillingClientException.kt b/app/src/gplay/java/eu/darken/capod/common/upgrade/core/client/BillingClientException.kt index 44f3b948..f5b7acea 100644 --- a/app/src/gplay/java/eu/darken/capod/common/upgrade/core/client/BillingClientException.kt +++ b/app/src/gplay/java/eu/darken/capod/common/upgrade/core/client/BillingClientException.kt @@ -2,9 +2,7 @@ package eu.darken.capod.common.upgrade.core.client import com.android.billingclient.api.BillingResult -class BillingClientException(val result: BillingResult) : Exception() { - override val message: String? - get() = result.debugMessage +class BillingClientException(val result: BillingResult) : BillingException(result.debugMessage) { override fun toString(): String = "BillingClientException(code=${result.responseCode}, message=${result.debugMessage})" diff --git a/app/src/gplay/java/eu/darken/capod/common/upgrade/core/client/BillingException.kt b/app/src/gplay/java/eu/darken/capod/common/upgrade/core/client/BillingException.kt new file mode 100644 index 00000000..5bda58fa --- /dev/null +++ b/app/src/gplay/java/eu/darken/capod/common/upgrade/core/client/BillingException.kt @@ -0,0 +1,3 @@ +package eu.darken.capod.common.upgrade.core.client + +open class BillingException(override val message: String) : Exception() \ No newline at end of file