diff --git a/Habitica/build.gradle b/Habitica/build.gradle index dac857d95..af0b9166f 100644 --- a/Habitica/build.gradle +++ b/Habitica/build.gradle @@ -151,7 +151,7 @@ android { multiDexEnabled true 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 2336 + versionCode 2338 versionName "2.4.1" } diff --git a/Habitica/res/xml/remote_config_defaults.xml b/Habitica/res/xml/remote_config_defaults.xml index 587ca97c1..b93a3b929 100644 --- a/Habitica/res/xml/remote_config_defaults.xml +++ b/Habitica/res/xml/remote_config_defaults.xml @@ -68,5 +68,9 @@ useNewMysteryBenefits false + + insufficientGemPurchaseAdjust + false + \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AppConfigManager.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AppConfigManager.kt index b09824ff7..d12edf8cd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AppConfigManager.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/AppConfigManager.kt @@ -67,6 +67,10 @@ class AppConfigManager { return remoteConfig.getBoolean("insufficientGemPurchase") } + fun insufficientGemPurchaseAdjust(): Boolean { + return remoteConfig.getBoolean("insufficientGemPurchaseAdjust") + } + fun showSubscriptionBanner(): Boolean { return remoteConfig.getBoolean("showSubscriptionBanner") } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Customization.java b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Customization.java index 1bffe35f8..d8dad2205 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Customization.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Customization.java @@ -147,7 +147,6 @@ public class Customization extends RealmObject { } public String getImageName(String userSize, String hairColor) { - switch (this.type) { case "skin": return "skin_" + this.identifier; diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt index 5c764c460..fba4ebacf 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt @@ -139,8 +139,11 @@ class CustomizationRecyclerViewAdapter : androidx.recyclerview.widget.RecyclerVi fun bind(customization: Customization) { this.customization = customization - - DataBindingUtils.loadImage(this.imageView, customization.getImageName(userSize, hairColor)) + if (customization.customizationSet?.contains("timeTravel") == true) { + DataBindingUtils.loadImage(this.imageView, customization.getImageName(userSize, hairColor), imageFormat = "gif") + } else { + DataBindingUtils.loadImage(this.imageView, customization.getImageName(userSize, hairColor)) + } cardView.setCardBackgroundColor(ContextCompat.getColor(itemView.context, android.R.color.white)) if (customization.isUsable) { imageView.alpha = 1.0f diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt index a890a1b2f..32db4757f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/insufficientCurrency/InsufficientGemsDialog.kt @@ -7,6 +7,7 @@ import android.widget.Button import android.widget.LinearLayout import android.widget.TextView import androidx.core.os.bundleOf +import com.google.firebase.analytics.FirebaseAnalytics import com.habitrpg.android.habitica.HabiticaBaseApplication import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.events.ConsumablePurchasedEvent @@ -24,7 +25,7 @@ import javax.inject.Inject * Created by phillip on 27.09.17. */ -class InsufficientGemsDialog(context: Context) : InsufficientCurrencyDialog(context) { +class InsufficientGemsDialog(context: Context, var gemPrice: Int) : InsufficientCurrencyDialog(context) { private var purchaseButton: Button? = null @Inject @@ -38,6 +39,8 @@ class InsufficientGemsDialog(context: Context) : InsufficientCurrencyDialog(cont return R.layout.dialog_insufficient_gems } + var sku: String? = "" + override fun onCreate(savedInstanceState: Bundle?) { HabiticaBaseApplication.userComponent?.inject(this) super.onCreate(savedInstanceState) @@ -54,6 +57,15 @@ class InsufficientGemsDialog(context: Context) : InsufficientCurrencyDialog(cont purchaseHandler = PurchaseHandler(it, crashlyticsProxy) purchaseHandler?.startListening() purchaseHandler?.whenCheckoutReady = { + sku = if (configManager.insufficientGemPurchaseAdjust()) { + if (gemPrice > 4) { + PurchaseTypes.Purchase21Gems + } else { + PurchaseTypes.Purchase4Gems + } + } else { + PurchaseTypes.Purchase4Gems + } purchaseHandler?.getInAppPurchaseSKU(PurchaseTypes.Purchase4Gems) { sku -> val purchaseTextView = contentView.findViewById(R.id.purchase_textview) purchaseTextView.text = sku.displayTitle @@ -62,6 +74,7 @@ class InsufficientGemsDialog(context: Context) : InsufficientCurrencyDialog(cont } purchaseButton?.setOnClickListener { + FirebaseAnalytics.getInstance(context).logEvent("purchased_gems_from_insufficient", bundleOf(Pair("gemPrice", gemPrice), Pair("sku", ""))) purchaseHandler?.purchaseGems(PurchaseTypes.Purchase4Gems) } addButton(R.string.see_other_options, false) { _, _ -> MainNavigationController.navigate(R.id.gemPurchaseActivity, bundleOf(Pair("openSubscription", false))) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt index c9e4941ba..f0114ca20 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt @@ -268,7 +268,7 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop when { "gems" == shopItem.purchaseType -> InsufficientSubscriberGemsDialog(context) "gold" == shopItem.currency -> InsufficientGoldDialog(context) - "gems" == shopItem.currency -> InsufficientGemsDialog(context) + "gems" == shopItem.currency -> InsufficientGemsDialog(context, shopItem.value) "hourglasses" == shopItem.currency -> InsufficientHourglassesDialog(context) else -> null }?.show() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogContent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogContent.kt index 7b1945f62..b4189d4bd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogContent.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogContent.kt @@ -5,6 +5,7 @@ import android.util.AttributeSet import android.view.Gravity import android.widget.LinearLayout import android.widget.TextView +import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.drawee.view.SimpleDraweeView import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.models.inventory.QuestContent @@ -36,7 +37,15 @@ abstract class PurchaseDialogContent : LinearLayout { open fun setItem(item: ShopItem) { - DataBindingUtils.loadImage(imageView, item.imageName) + if (item.path?.contains("timeTravelBackgrounds") == true) { + val controller = Fresco.newDraweeControllerBuilder() + .setUri("https://habitica-assets.s3.amazonaws.com/mobileApp/images/${item.imageName?.replace("icon_", "")}.gif") + .setAutoPlayAnimations(true) + .build() + imageView.controller = controller + } else { + DataBindingUtils.loadImage(imageView, item.imageName) + } titleTextView.text = item.text } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/CustomizationDeserializer.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/CustomizationDeserializer.kt index 54fb3c286..d1416bc31 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/CustomizationDeserializer.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/CustomizationDeserializer.kt @@ -130,7 +130,7 @@ class CustomizationDeserializer : JsonDeserializer> { customization.isBuyable = false } else if ("timeTravelBackgrounds" == setName) { customization.customizationSetName = "Time Travel Backgrounds" - customization.price = 0 + customization.price = 1 customization.setPrice = 0 customization.isBuyable = false } else {