From 4b356b663d0973c9a85cfdba7e64dfef5e7189bc Mon Sep 17 00:00:00 2001 From: Jayesh Solanki Date: Fri, 28 Jun 2019 15:04:41 +0200 Subject: [PATCH] AP-349 Check and restore subscription if exists for each purchase request (#131) --- .../browser/purchases/PurchaseFragment.kt | 95 ++++++++++++------- .../browser/purchases/PurchasesManager.kt | 5 +- .../browser/starttab/freshtab/FreshTab.kt | 1 + .../lumen/res/layout/fragment_freshtab.xml | 2 +- 4 files changed, 67 insertions(+), 36 deletions(-) diff --git a/app/src/lumen/java/com/cliqz/browser/purchases/PurchaseFragment.kt b/app/src/lumen/java/com/cliqz/browser/purchases/PurchaseFragment.kt index a362c9427..aa3769fdb 100644 --- a/app/src/lumen/java/com/cliqz/browser/purchases/PurchaseFragment.kt +++ b/app/src/lumen/java/com/cliqz/browser/purchases/PurchaseFragment.kt @@ -118,44 +118,75 @@ class PurchaseFragment : DialogFragment(), OnBuyClickListener { } override fun onBuyClicked(position: Int) { + mAdapter.getProduct(position)?.apply { + restoreExistingPurchase({ activeSku -> + Toast.makeText(context, "You are already subscribed to one the packages", Toast.LENGTH_LONG).show() + enableFeatures(activeSku) + }, { + makePurchase(sku) + }) + } + } + + private fun restoreExistingPurchase(success: (sku: String) -> Unit, cannotRestore: () -> Unit) { + Purchases.sharedInstance.restorePurchasesWith( + { + Log.w(TAG, it.message) + cannotRestore() + }, + { + if (it.activeSubscriptions.isEmpty()) { + cannotRestore() + } else { + success(it.activeSubscriptions.first()) + } + } + ) + } + + private fun makePurchase(sku: String) { val oldSku = ArrayList() if (purchasesManager.purchase.sku.isNotEmpty()) { oldSku.add(purchasesManager.purchase.sku) } - mAdapter.getProduct(position)?.apply { - Purchases.sharedInstance.makePurchaseWith(activity as Activity, sku, - BillingClient.SkuType.SUBS, oldSku, - { error, _ -> - Log.e(TAG, error.underlyingErrorMessage) + Purchases.sharedInstance.makePurchaseWith(activity as Activity, sku, + BillingClient.SkuType.SUBS, oldSku, + { error, userCancelled -> + if (!userCancelled) { + Log.e(TAG, "${error.underlyingErrorMessage}") Toast.makeText(context, error.message, Toast.LENGTH_LONG).show() - }, - { purchase, _ -> - when (purchase.sku) { - Product.BASIC_VPN -> { - purchasesManager.purchase.isVpnEnabled = true - purchasesManager.purchase.isDashboardEnabled = true - preferenceManager.isAttrackEnabled = true - preferenceManager.adBlockEnabled = true - } - Product.BASIC -> { - purchasesManager.purchase.isVpnEnabled = false - purchasesManager.purchase.isDashboardEnabled = true - preferenceManager.isAttrackEnabled = true - preferenceManager.adBlockEnabled = true - } - Product.VPN -> { - purchasesManager.purchase.isVpnEnabled = true - purchasesManager.purchase.isDashboardEnabled = false - preferenceManager.isAttrackEnabled = false - preferenceManager.adBlockEnabled = false - } - } - purchasesManager.purchase.sku = purchase.sku - purchasesManager.purchase.isASubscriber = true - bus.post(Messages.PurchaseCompleted()) - this@PurchaseFragment.dismiss() } - ) + }, + { purchase, _ -> + enableFeatures(purchase.sku) + } + ) + } + + private fun enableFeatures(sku: String) { + when (sku) { + Product.BASIC_VPN -> { + purchasesManager.purchase.isVpnEnabled = true + purchasesManager.purchase.isDashboardEnabled = true + preferenceManager.isAttrackEnabled = true + preferenceManager.adBlockEnabled = true + } + Product.BASIC -> { + purchasesManager.purchase.isVpnEnabled = false + purchasesManager.purchase.isDashboardEnabled = true + preferenceManager.isAttrackEnabled = true + preferenceManager.adBlockEnabled = true + } + Product.VPN -> { + purchasesManager.purchase.isVpnEnabled = true + purchasesManager.purchase.isDashboardEnabled = false + preferenceManager.isAttrackEnabled = false + preferenceManager.adBlockEnabled = false + } } + purchasesManager.purchase.sku = sku + purchasesManager.purchase.isASubscriber = true + bus.post(Messages.PurchaseCompleted()) + this@PurchaseFragment.dismiss() } } diff --git a/app/src/lumen/java/com/cliqz/browser/purchases/PurchasesManager.kt b/app/src/lumen/java/com/cliqz/browser/purchases/PurchasesManager.kt index 484be83c7..addcf73e7 100644 --- a/app/src/lumen/java/com/cliqz/browser/purchases/PurchasesManager.kt +++ b/app/src/lumen/java/com/cliqz/browser/purchases/PurchasesManager.kt @@ -62,10 +62,9 @@ class PurchasesManager( isLoading = false } else { purchase.isASubscriber = false - // Check if in trial period. - this.loadTrialPeriodInfo(this@PurchasesManager) } - + // Get Trial Period data and vpn username, password. + this.loadTrialPeriodInfo(this@PurchasesManager) } override fun onError(error: PurchasesError) { diff --git a/app/src/lumen/java/com/cliqz/browser/starttab/freshtab/FreshTab.kt b/app/src/lumen/java/com/cliqz/browser/starttab/freshtab/FreshTab.kt index 9d7329e8b..f34ce0e90 100644 --- a/app/src/lumen/java/com/cliqz/browser/starttab/freshtab/FreshTab.kt +++ b/app/src/lumen/java/com/cliqz/browser/starttab/freshtab/FreshTab.kt @@ -93,6 +93,7 @@ internal class FreshTab : StartTabFragment() { @Subscribe fun getTrialPeriod(onTrialPeriodResponse: Messages.OnTrialPeriodResponse) { + if (purchasesManager.purchase.isASubscriber) return if (purchasesManager.serverData != null) { purchasesManager.serverData?.apply { if (isInTrial) { diff --git a/app/src/lumen/res/layout/fragment_freshtab.xml b/app/src/lumen/res/layout/fragment_freshtab.xml index 2a000828f..c2aa1ae53 100644 --- a/app/src/lumen/res/layout/fragment_freshtab.xml +++ b/app/src/lumen/res/layout/fragment_freshtab.xml @@ -11,7 +11,7 @@ layout="@layout/fragment_freshtab_welcome_msg" android:layout_width="wrap_content" android:layout_height="wrap_content" - app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintBottom_toBottomOf="@id/trial_over_lumen_upgrade" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"