diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/trial/PurchaseDialogFragment.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/trial/PurchaseDialogFragment.kt index 69c4cb260..5f352cc1a 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/trial/PurchaseDialogFragment.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/trial/PurchaseDialogFragment.kt @@ -2,6 +2,7 @@ package com.simplecityapps.shuttle.ui.screens.trial import android.app.Dialog import android.os.Bundle +import android.widget.Toast import androidx.core.content.res.ResourcesCompat import androidx.fragment.app.DialogFragment import androidx.fragment.app.FragmentManager @@ -58,8 +59,16 @@ class PurchaseDialogFragment : DialogFragment() { productDetails, object : SkuBinder.Listener { override fun onClick(productDetails: ProductDetails) { - billingManager.launchPurchaseFlow(requireActivity(), productDetails) - dismiss() + val launched = billingManager.launchPurchaseFlow(requireActivity(), productDetails) + if (launched) { + dismiss() + } else { + Toast.makeText( + requireContext(), + "Unable to connect to Google Play. Please try again.", + Toast.LENGTH_SHORT + ).show() + } } } ) diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/trial/TrialDialogFragment.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/trial/TrialDialogFragment.kt index dc1395c7e..9406ed3d0 100644 --- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/trial/TrialDialogFragment.kt +++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/screens/trial/TrialDialogFragment.kt @@ -45,8 +45,9 @@ class TrialDialogFragment : DialogFragment() { var touchTime = 0L icon.setOnTouchListener { v, event -> if (event.action == MotionEvent.ACTION_UP) { - if (touchTime == 0L || System.currentTimeMillis() - touchTime > 2000) { - touchTime = System.currentTimeMillis() + val now = System.currentTimeMillis() + if (touchTime == 0L || now - touchTime > 2000) { + touchTime = now touchCount = 1 } else { touchCount++ @@ -60,7 +61,8 @@ class TrialDialogFragment : DialogFragment() { dismiss() } } - true + // Only consume if we're in an active tap sequence + touchCount > 0 && System.currentTimeMillis() - touchTime <= 2000 } val upgradeButton: Button = view.findViewById(R.id.upgradeButton) diff --git a/android/trial/src/main/java/com/simplecityapps/trial/BillingManager.kt b/android/trial/src/main/java/com/simplecityapps/trial/BillingManager.kt index 555450354..7d75bfa11 100644 --- a/android/trial/src/main/java/com/simplecityapps/trial/BillingManager.kt +++ b/android/trial/src/main/java/com/simplecityapps/trial/BillingManager.kt @@ -119,10 +119,10 @@ class BillingManager( fun launchPurchaseFlow( activity: FragmentActivity, productDetails: ProductDetails - ) { + ): Boolean { if (!billingClient.isReady) { Timber.e("Failed to launch purchase flow: BillingClient not ready") - return + return false } val productDetailsParamsList = listOf( @@ -137,6 +137,7 @@ class BillingManager( .setProductDetailsParamsList(productDetailsParamsList) .build() ) + return true } suspend fun queryProductDetails() {