From f4179c575044f0a5a789ac0101b01150e2b94054 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 7 Oct 2021 17:20:52 +0200 Subject: [PATCH] small changes to IAP code --- Habitica/build.gradle | 4 ++-- .../habitica/HabiticaPurchaseVerifier.kt | 16 +++++++-------- .../habitica/helpers/PurchaseHandler.kt | 20 +++++++++++-------- .../equipment/EquipmentOverviewFragment.kt | 19 +++++++----------- .../purchases/GemsPurchaseFragment.kt | 7 +++++-- .../purchases/GiftPurchaseGemsFragment.kt | 7 +++++-- .../purchases/SubscriptionFragment.kt | 14 ++++++++----- 7 files changed, 48 insertions(+), 39 deletions(-) diff --git a/Habitica/build.gradle b/Habitica/build.gradle index ae8b8bdab..c861e0679 100644 --- a/Habitica/build.gradle +++ b/Habitica/build.gradle @@ -155,8 +155,8 @@ android { buildConfigField "String", "TESTING_LEVEL", "\"production\"" resConfigs "en", "bg", "de", "en-rGB", "es", "fr", "hr-rHR", "in", "it", "iw", "ja", "ko", "lt", "nl", "pl", "pt-rBR", "pt-rPT", "ru", "tr", "zh", "zh-rTW" - versionCode 3059 - versionName "3.4" + versionCode 3063 + versionName "3.4.0.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaPurchaseVerifier.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaPurchaseVerifier.kt index 52e234277..a357088b1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaPurchaseVerifier.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaPurchaseVerifier.kt @@ -2,6 +2,7 @@ package com.habitrpg.android.habitica import android.content.Context import android.content.SharedPreferences +import androidx.core.content.edit import androidx.preference.PreferenceManager import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.crashlytics.FirebaseCrashlytics @@ -76,10 +77,9 @@ class HabiticaPurchaseVerifier(context: Context, apiClient: ApiClient) : BasePur } } } - val edit = preferences?.edit() - edit?.putStringSet(PURCHASED_PRODUCTS_KEY, purchasedOrderList) - edit?.apply() - savePendingGifts() + preferences?.edit { + edit?.putStringSet(PURCHASED_PRODUCTS_KEY, purchasedOrderList) + } } private fun processedPurchase( @@ -154,6 +154,7 @@ class HabiticaPurchaseVerifier(context: Context, apiClient: ApiClient) : BasePur private const val PENDING_GIFTS_KEY = "PENDING_GIFTS" private var pendingGifts: MutableMap = HashMap() private var preferences: SharedPreferences? = null + fun addGift(sku: String?, userID: String?) { pendingGifts[sku] = userID savePendingGifts() @@ -168,10 +169,9 @@ class HabiticaPurchaseVerifier(context: Context, apiClient: ApiClient) : BasePur private fun savePendingGifts() { val jsonObject = JSONObject(pendingGifts as Map<*, *>) val jsonString = jsonObject.toString() - val editor = preferences?.edit() - editor?.remove(PENDING_GIFTS_KEY) - editor?.putString(PENDING_GIFTS_KEY, jsonString) - editor?.apply() + preferences?.edit { + putString(PENDING_GIFTS_KEY, jsonString) + } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PurchaseHandler.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PurchaseHandler.kt index 45a415a1e..65fb1736b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PurchaseHandler.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PurchaseHandler.kt @@ -4,6 +4,8 @@ import android.app.Activity import android.content.Intent import com.habitrpg.android.habitica.HabiticaBaseApplication import com.habitrpg.android.habitica.proxy.AnalyticsManager +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext import org.solovyev.android.checkout.* import java.util.* import kotlin.coroutines.resume @@ -74,16 +76,18 @@ open class PurchaseHandler(activity: Activity, val analyticsManager: AnalyticsMa return purchases.skus.firstOrNull() } - private suspend fun loadInventory(type: String, skus: List): Inventory.Products? = suspendCoroutine { cont -> - val request = Inventory.Request.create().loadAllPurchases().loadSkus(type, skus) - try { - inventory?.load(request) { - cont.resume(it) + private suspend fun loadInventory(type: String, skus: List): Inventory.Products? = withContext(Dispatchers.Main) { + suspendCoroutine { cont -> + val request = Inventory.Request.create().loadAllPurchases().loadSkus(type, skus) + try { + inventory?.load(request) { + cont.resume(it) + } + } catch (e: NullPointerException) { + cont.resumeWithException(e) } - } catch (e: NullPointerException) { - cont.resumeWithException(e) + if (inventory == null) cont.resume(null) } - if (inventory == null) cont.resume(null) } fun purchaseSubscription(sku: Sku, onSuccess: (() -> Unit)) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentOverviewFragment.kt index 6a015a12f..2d0fb80de 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentOverviewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentOverviewFragment.kt @@ -12,6 +12,7 @@ import com.habitrpg.android.habitica.models.user.Gear import com.habitrpg.android.habitica.models.user.Outfit import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment import com.habitrpg.android.habitica.ui.viewmodels.inventory.equipment.EquipmentOverviewViewModel +import com.habitrpg.android.habitica.ui.views.equipment.EquipmentOverviewView class EquipmentOverviewFragment : BaseMainFragment() { @@ -47,13 +48,7 @@ class EquipmentOverviewFragment : BaseMainFragment(), GemPurchaseActivity.CheckoutFragment { @@ -98,8 +99,10 @@ class GemsPurchaseFragment : BaseFragment(), GemPurc override fun setupCheckout() { CoroutineScope(Dispatchers.IO).launch { val skus = purchaseHandler?.getAllGemSKUs() - for (sku in skus ?: emptyList()) { - updateButtonLabel(sku.id.code, sku.price) + withContext(Dispatchers.Main) { + for (sku in skus ?: emptyList()) { + updateButtonLabel(sku.id.code, sku.price) + } } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftPurchaseGemsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftPurchaseGemsFragment.kt index d8f400fb5..d77903a25 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftPurchaseGemsFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GiftPurchaseGemsFragment.kt @@ -18,6 +18,7 @@ import com.habitrpg.android.habitica.ui.fragments.BaseFragment import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import javax.inject.Inject class GiftPurchaseGemsFragment : BaseFragment() { @@ -63,8 +64,10 @@ class GiftPurchaseGemsFragment : BaseFragment() fun setupCheckout() { CoroutineScope(Dispatchers.IO).launch { val skus = purchaseHandler?.getAllGemSKUs() - for (sku in skus ?: emptyList()) { - updateButtonLabel(sku.id.code, sku.price) + withContext(Dispatchers.Main) { + for (sku in skus ?: emptyList()) { + updateButtonLabel(sku.id.code, sku.price) + } } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/SubscriptionFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/SubscriptionFragment.kt index ba4a1381d..d35565f89 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/SubscriptionFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/SubscriptionFragment.kt @@ -35,6 +35,7 @@ import com.habitrpg.android.habitica.ui.views.subscriptions.SubscriptionOptionVi import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import org.greenrobot.eventbus.Subscribe import org.solovyev.android.checkout.Inventory import org.solovyev.android.checkout.Purchase @@ -145,12 +146,15 @@ class SubscriptionFragment : BaseFragment(), GemPur override fun setupCheckout() { CoroutineScope(Dispatchers.IO).launch { val subscriptions = purchaseHandler?.getAllSubscriptionProducts() ?: return@launch - for (sku in subscriptions.skus) { - updateButtonLabel(sku, sku.price, subscriptions) + skus = subscriptions.skus + withContext(Dispatchers.Main) { + for (sku in subscriptions.skus) { + updateButtonLabel(sku, sku.price, subscriptions) + } + selectSubscription(PurchaseTypes.Subscription1Month) + hasLoadedSubscriptionOptions = true + updateSubscriptionInfo() } - selectSubscription(PurchaseTypes.Subscription1Month) - hasLoadedSubscriptionOptions = true - updateSubscriptionInfo() } }