From e4bf648095d60338018fe77af835483510511beb Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 31 Oct 2024 13:16:07 +0100 Subject: [PATCH] subscription display fixes --- Habitica/res/layout/fragment_gem_purchase.xml | 4 ++-- Habitica/res/layout/fragment_promo_info.xml | 3 ++- .../layout/fragment_subscription_content.xml | 4 ++-- .../RealmContentLocalRepository.kt | 1 + .../RealmInventoryLocalRepository.kt | 1 - .../android/habitica/helpers/PurchaseHandler.kt | 17 ++++++++++++++--- .../android/habitica/models/ContentResult.kt | 2 ++ .../GiftOneGetOneHabiticaPromotion.kt | 8 ++++---- .../habitica/modules/UserRepositoryModule.kt | 3 ++- .../ui/activities/GemPurchaseActivity.kt | 1 + .../habitica/ui/activities/TaskFormActivity.kt | 7 ++++--- .../fragments/purchases/GemsPurchaseFragment.kt | 4 +++- .../fragments/purchases/SubscriptionFragment.kt | 4 +++- .../habitica/utils/ContentDeserializer.kt | 7 +++++++ version.properties | 2 +- 15 files changed, 48 insertions(+), 20 deletions(-) diff --git a/Habitica/res/layout/fragment_gem_purchase.xml b/Habitica/res/layout/fragment_gem_purchase.xml index 15677b8706..7b4526c486 100644 --- a/Habitica/res/layout/fragment_gem_purchase.xml +++ b/Habitica/res/layout/fragment_gem_purchase.xml @@ -76,7 +76,7 @@ android:layout_marginEnd="84dp" android:gravity="center" android:textColor="@color/white" - android:layout_marginBottom="6dp" /> + android:layout_marginBottom="4dp" /> + xmlns:tools="http://schemas.android.com/tools" + android:background="?colorContentBackground"> + android:layout_marginBottom="4dp" /> diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmContentLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmContentLocalRepository.kt index 0ac2bfd101..6f46e610e0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmContentLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmContentLocalRepository.kt @@ -33,6 +33,7 @@ open class RealmContentLocalRepository(realm: Realm) : realm1.insertOrUpdate(contentResult.appearances) realm1.insertOrUpdate(contentResult.backgrounds) realm1.insertOrUpdate(contentResult.faq) + realm1.insertOrUpdate(contentResult.mystery) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.kt index 8a15cd5b3f..261491e5d3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.kt @@ -464,7 +464,6 @@ class RealmInventoryLocalRepository(realm: Realm) : private fun getLatestMysterySet(): Flow { return realm.where(EquipmentSet::class.java) - .equalTo("pinType", "mystery_set") .sort("key", Sort.DESCENDING) .findAll() .toFlow() 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 e2c2a46d63..fbee31fb08 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 @@ -57,6 +57,7 @@ class PurchaseHandler( private val context: Context, private val apiClient: ApiClient, private val userViewModel: MainUserViewModel, + private val configManager: AppConfigManager ) : PurchasesUpdatedListener, PurchasesResponseListener { private var billingClient = BillingClient.newBuilder(context).setListener(this).enablePendingPurchases().build() @@ -383,7 +384,7 @@ class PurchaseHandler( consume(purchase) } if (response != null) { - displayConfirmationDialog(purchase, gift?.third) + displayConfirmationDialog(purchase, gift?.second, gift?.third) } } catch (throwable: Throwable) { handleError(throwable, purchase) @@ -402,7 +403,7 @@ class PurchaseHandler( consume(purchase) } if (response != null) { - displayConfirmationDialog(purchase, gift?.third) + displayConfirmationDialog(purchase, gift?.second, gift?.third) } } catch (throwable: Throwable) { handleError(throwable, purchase) @@ -574,6 +575,7 @@ class PurchaseHandler( private fun displayConfirmationDialog( purchase: Purchase, + giftedToID: String? = null, giftedTo: String? = null, ) { if (displayedConfirmations.contains(purchase.orderId)) { @@ -591,7 +593,11 @@ class PurchaseHandler( PurchaseTypes.allSubscriptionNoRenewTypes.contains(sku) -> { title = context.getString(R.string.gift_confirmation_title) context.getString( - R.string.gift_confirmation_text_sub, + if (configManager.activePromo()?.identifier == "g1g1" && giftedToID != userViewModel.user.value?.id) { + R.string.gift_confirmation_text_sub_g1g1 + } else { + R.string.gift_confirmation_text_sub + }, giftedTo, durationString(sku), ) @@ -629,6 +635,11 @@ class PurchaseHandler( message?.let { alert.setMessage(it) } alert.addOkButton { dialog, _ -> dialog.dismiss() + if (giftedTo != null) { + if (activity is PurchaseActivity) { + activity.finish() + } + } } alert.enqueue() } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/ContentResult.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/ContentResult.kt index dae7f480ff..002b2130af 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/ContentResult.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/ContentResult.kt @@ -3,6 +3,7 @@ package com.habitrpg.android.habitica.models import com.habitrpg.android.habitica.models.inventory.Customization import com.habitrpg.android.habitica.models.inventory.Egg import com.habitrpg.android.habitica.models.inventory.Equipment +import com.habitrpg.android.habitica.models.inventory.EquipmentSet import com.habitrpg.android.habitica.models.inventory.Food import com.habitrpg.android.habitica.models.inventory.HatchingPotion import com.habitrpg.android.habitica.models.inventory.Mount @@ -29,4 +30,5 @@ class ContentResult { var backgrounds = RealmList() var faq = RealmList() var special = RealmList() + var mystery = RealmList() } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/promotions/GiftOneGetOneHabiticaPromotion.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/promotions/GiftOneGetOneHabiticaPromotion.kt index b3c2a612f4..5b0c8e901e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/promotions/GiftOneGetOneHabiticaPromotion.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/promotions/GiftOneGetOneHabiticaPromotion.kt @@ -81,13 +81,13 @@ class GiftOneGetOneHabiticaPromotion(startDate: Date?, endDate: Date?) : Habitic binding.promoBannerLeftImage.setImageDrawable( ContextCompat.getDrawable( context, - R.drawable.g1g1_promo_left_small, + R.drawable.g1g1_promo_left, ), ) binding.promoBannerRightImage.setImageDrawable( ContextCompat.getDrawable( context, - R.drawable.g1g1_promo_right_small, + R.drawable.g1g1_promo_right, ), ) binding.promoBannerTitleImage.visibility = View.GONE @@ -107,13 +107,13 @@ class GiftOneGetOneHabiticaPromotion(startDate: Date?, endDate: Date?) : Habitic binding.content.promoBannerLeftImage.setImageDrawable( ContextCompat.getDrawable( context, - R.drawable.g1g1_promo_left_small, + R.drawable.g1g1_promo_left, ), ) binding.content.promoBannerRightImage.setImageDrawable( ContextCompat.getDrawable( context, - R.drawable.g1g1_promo_right_small, + R.drawable.g1g1_promo_right, ), ) binding.content.promoBannerTitleImage.visibility = View.GONE diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserRepositoryModule.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserRepositoryModule.kt index f64f9938de..e705899b59 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserRepositoryModule.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/UserRepositoryModule.kt @@ -215,7 +215,8 @@ class UserRepositoryModule { @ApplicationContext context: Context, apiClient: ApiClient, userViewModel: MainUserViewModel, + appConfigManager: AppConfigManager ): PurchaseHandler { - return PurchaseHandler(context, apiClient, userViewModel) + return PurchaseHandler(context, apiClient, userViewModel, appConfigManager) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GemPurchaseActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GemPurchaseActivity.kt index 10d258c06e..1b2fc57233 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GemPurchaseActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GemPurchaseActivity.kt @@ -7,6 +7,7 @@ import androidx.appcompat.widget.Toolbar import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import com.habitrpg.android.habitica.R +import com.habitrpg.android.habitica.extensions.hideKeyboard import com.habitrpg.android.habitica.extensions.updateStatusBarColor import com.habitrpg.android.habitica.ui.fragments.purchases.GemsPurchaseFragment import com.habitrpg.android.habitica.ui.fragments.purchases.SubscriptionFragment diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt index d7bb4bc37c..2c7a63e29e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt @@ -211,16 +211,17 @@ class TaskFormActivity : BaseActivity() { setSupportActionBar(binding.toolbar) supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true) + tintColor = getThemeColor(R.attr.taskFormTint) + val upperTintColor = + if (forcedTheme == "taskform") getThemeColor(R.attr.taskFormTint) else getThemeColor(R.attr.colorAccent) if (forcedTheme == "taskform" || forcedTheme == "maroon") { ToolbarColorHelper.colorizeToolbar( binding.toolbar, this, ContextCompat.getColor(this, R.color.white), + upperTintColor ) } - tintColor = getThemeColor(R.attr.taskFormTint) - val upperTintColor = - if (forcedTheme == "taskform") getThemeColor(R.attr.taskFormTint) else getThemeColor(R.attr.colorAccent) supportActionBar?.setBackgroundDrawable(ColorDrawable(upperTintColor)) binding.upperTextWrapper.setBackgroundColor(upperTintColor) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GemsPurchaseFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GemsPurchaseFragment.kt index 5213f16f01..0feeca78af 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GemsPurchaseFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/purchases/GemsPurchaseFragment.kt @@ -12,6 +12,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.dp import androidx.core.view.isVisible import androidx.fragment.app.Fragment +import androidx.fragment.app.replace import androidx.lifecycle.lifecycleScope import com.android.billingclient.api.ProductDetails import com.habitrpg.android.habitica.R @@ -98,7 +99,8 @@ class GemsPurchaseFragment : BaseFragment() { val fragment = PromoInfoFragment() parentFragmentManager .beginTransaction() - .add(R.id.fragment_container, fragment as Fragment) + .replace(R.id.fragment_container, fragment as Fragment) + .addToBackStack(null) .commit() } } else { 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 d8f2a47c4b..4b0de43e73 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 @@ -14,6 +14,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.dp import androidx.core.view.isVisible import androidx.fragment.app.Fragment +import androidx.fragment.app.replace import androidx.lifecycle.lifecycleScope import com.android.billingclient.api.ProductDetails import com.habitrpg.android.habitica.R @@ -121,7 +122,8 @@ class SubscriptionFragment : BaseFragment() { val fragment = PromoInfoFragment() parentFragmentManager .beginTransaction() - .add(R.id.fragment_container, fragment as Fragment) + .replace(R.id.fragment_container, fragment as Fragment) + .addToBackStack(null) .commit() } } else { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ContentDeserializer.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ContentDeserializer.kt index 4b971c74a7..5f252039b7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ContentDeserializer.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/ContentDeserializer.kt @@ -14,6 +14,7 @@ import com.habitrpg.android.habitica.models.Skill import com.habitrpg.android.habitica.models.inventory.Customization import com.habitrpg.android.habitica.models.inventory.Egg import com.habitrpg.android.habitica.models.inventory.Equipment +import com.habitrpg.android.habitica.models.inventory.EquipmentSet import com.habitrpg.android.habitica.models.inventory.Food import com.habitrpg.android.habitica.models.inventory.HatchingPotion import com.habitrpg.android.habitica.models.inventory.Mount @@ -112,6 +113,12 @@ class ContentDeserializer : JsonDeserializer { } } + if (obj.has("mystery")) { + for (entry in obj.get("mystery").asJsonObject.entrySet()) { + result.mystery.add(context.deserialize(entry.value, EquipmentSet::class.java)) + } + } + result.appearances = context.deserialize( obj.get("appearances"), diff --git a/version.properties b/version.properties index 2bf1c83d38..c77ca90839 100644 --- a/version.properties +++ b/version.properties @@ -1,2 +1,2 @@ NAME=4.5.0 -CODE=8711 \ No newline at end of file +CODE=8771 \ No newline at end of file