From dcd690104543b5fddbc72bc7d6b6e2a5c59f4545 Mon Sep 17 00:00:00 2001 From: Hafiz Date: Mon, 1 May 2023 17:37:02 -0400 Subject: [PATCH 1/3] Sync up the change class confirmation messages in Market --- .../fragments/inventory/shops/ShopFragment.kt | 45 +++++++++++++++---- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt index 0b9357a18..24579f59b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.kt @@ -1,9 +1,11 @@ package com.habitrpg.android.habitica.ui.fragments.inventory.shops +import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.runtime.mutableStateOf @@ -21,6 +23,7 @@ import com.habitrpg.android.habitica.models.shops.Shop import com.habitrpg.android.habitica.models.shops.ShopCategory import com.habitrpg.android.habitica.models.shops.ShopItem import com.habitrpg.android.habitica.models.social.Group +import com.habitrpg.android.habitica.ui.activities.ClassSelectionActivity import com.habitrpg.android.habitica.ui.adapter.inventory.ShopRecyclerAdapter import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator @@ -28,6 +31,7 @@ import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel import com.habitrpg.android.habitica.ui.views.CurrencyText import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.getTranslatedClassName +import com.habitrpg.android.habitica.ui.views.insufficientCurrency.InsufficientGemsDialog import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog import com.habitrpg.common.habitica.helpers.ExceptionHandler import com.habitrpg.common.habitica.helpers.RecyclerViewState @@ -65,6 +69,13 @@ open class ShopFragment : BaseMainFragment() override var binding: FragmentRefreshRecyclerviewBinding? = null + private val classSelectionResult = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { + lifecycleScope.launch(ExceptionHandler.coroutine()) { + userRepository.retrieveUser(true, true) + } + } + override fun createBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentRefreshRecyclerviewBinding { return FragmentRefreshRecyclerviewBinding.inflate(inflater, container, false) } @@ -212,17 +223,33 @@ open class ShopFragment : BaseMainFragment() } private fun showClassChangeDialog(classIdentifier: String) { - context?.let { context -> - val alert = HabiticaAlertDialog(context) - alert.setTitle(getString(R.string.class_confirmation_price, getTranslatedClassName(requireContext().resources, classIdentifier), 3)) - alert.addButton(R.string.choose_class, true) { _, _ -> - lifecycleScope.launch(ExceptionHandler.coroutine()) { - userRepository.changeClass(classIdentifier) - loadMarketGear() + lifecycleScope.launch(ExceptionHandler.coroutine()) { + val user = userViewModel.user.value ?: return@launch + val bundle = Bundle() + bundle.putBoolean("isInitialSelection", user.flags?.classSelected == false) + val intent = Intent(activity, ClassSelectionActivity::class.java) + intent.putExtras(bundle) + if (user.flags?.classSelected == true && user.preferences?.disableClasses == false) { + if ((user.gemCount ?: 0) >= 3) { + context?.let { context -> + val dialog = HabiticaAlertDialog(context) + dialog.setTitle(R.string.change_class_confirmation) + dialog.addButton(R.string.change_class, true, true) { _, _ -> + classSelectionResult.launch( + intent + ) + } + dialog.addButton(R.string.dialog_go_back, false) + dialog.enqueue() + } + } else { + val dialog = context?.let { InsufficientGemsDialog(it, 3) } + dialog?.show() } + } else { + classSelectionResult.launch(intent) } - alert.addButton(R.string.dialog_go_back, false) - alert.show() + loadMarketGear() } } From e142e3960b13da487eedb07a515b2deb6a9aabb2 Mon Sep 17 00:00:00 2001 From: Hafiz Date: Tue, 2 May 2023 13:24:40 -0400 Subject: [PATCH 2/3] Update todo text colors When the date is gray, use the lighter gray we use for things like alarms and streaks (Gray300 in light mode) When the date is red, it should be red100 in dark mode (showing as the darker maroon we use in light mode) --- Habitica/res/values-night/colors.xml | 1 + Habitica/res/values/colors.xml | 1 + .../android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Habitica/res/values-night/colors.xml b/Habitica/res/values-night/colors.xml index b5db0e555..8b3ad7f16 100644 --- a/Habitica/res/values-night/colors.xml +++ b/Habitica/res/values-night/colors.xml @@ -62,5 +62,6 @@ @color/green_500 @color/gray_400 @color/gray_10 + @color/red_100 diff --git a/Habitica/res/values/colors.xml b/Habitica/res/values/colors.xml index 9ce855bde..6c9806637 100644 --- a/Habitica/res/values/colors.xml +++ b/Habitica/res/values/colors.xml @@ -129,4 +129,5 @@ @color/green_10 @color/gray_200 @color/gray_700 + @color/maroon_100 diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt index c948f2173..cd92725ab 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt @@ -40,9 +40,10 @@ class TodoViewHolder( specialTaskTextView?.text = context.getString(R.string.today) } else if (task.isDayOrMorePastDue() == true) { task.dueDate?.let { specialTaskTextView?.text = dateFormatter.format(it) } - specialTaskTextView?.setTextColor(ContextCompat.getColor(context, R.color.maroon_100)) + specialTaskTextView?.setTextColor(ContextCompat.getColor(context, R.color.maroon100_red100)) } else { task.dueDate?.let { specialTaskTextView?.text = dateFormatter.format(it) } + specialTaskTextView?.setTextColor(ContextCompat.getColor(context, R.color.gray_300)) } this.specialTaskTextView?.visibility = View.VISIBLE calendarIconView?.visibility = View.VISIBLE From cadbcd17bd2b6ee0a7db7a8c52b0009aab094401 Mon Sep 17 00:00:00 2001 From: Hafiz Date: Tue, 2 May 2023 13:39:46 -0400 Subject: [PATCH 3/3] When user is below level 10, update locked class gear message Over level 10: This item is only available to a specific class. You can change your class from Settings. Below level 10: This item is only available to a specific class. You can select a class after level 10. --- Habitica/res/values/strings.xml | 1 + .../android/habitica/ui/views/shops/PurchaseDialog.kt | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 6cba30562..6a4a76836 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -632,6 +632,7 @@ You already have all equipment! More will be released during the Grand Galas, near the solstices and equinoxes. Classless This item is only available to a specific class.\nYou can change your class from Settings. + This item is only available to a specific class.\nYou can select a class after level 10. You can only purchase gear for your current class Welcome to the Inn! Pull up a chair to chat. Check into Inn 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 920862c54..408c00f17 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 @@ -173,8 +173,13 @@ class PurchaseDialog(context: Context, private val userRepository : UserReposito private fun setLimitedTextView() { if (user == null) return + val userLvl = user?.stats?.lvl ?: 0 if (shopItem.habitClass != null && shopItem.habitClass != "special" && shopItem.habitClass != "armoire" && user?.stats?.habitClass != shopItem.habitClass) { - limitedTextView.text = context.getString(R.string.class_equipment_shop_dialog) + limitedTextView.text = if (userLvl >= 10) { + context.getString(R.string.class_equipment_shop_dialog) + } else { + context.getString(R.string.insufficient_level_equipment_dialog) + } limitedTextView.visibility = View.VISIBLE limitedTextView.setBackgroundColor(ContextCompat.getColor(context, R.color.inverted_background)) } else if (shopItem.event?.end != null) {