mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-05-21 13:19:02 +00:00
Merge branch 'version/4.2' of https://github.com/HabitRPG/habitica-android into version/4.2
This commit is contained in:
commit
2c1102da55
6 changed files with 47 additions and 11 deletions
|
|
@ -62,5 +62,6 @@
|
|||
<color name="text_green10_green500">@color/green_500</color>
|
||||
<color name="gray200_gray400">@color/gray_400</color>
|
||||
<color name="gray700_gray10">@color/gray_10</color>
|
||||
<color name="maroon100_red100">@color/red_100</color>
|
||||
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -129,4 +129,5 @@
|
|||
<color name="text_green10_green500">@color/green_10</color>
|
||||
<color name="gray200_gray400">@color/gray_200</color>
|
||||
<color name="gray700_gray10">@color/gray_700</color>
|
||||
<color name="maroon100_red100">@color/maroon_100</color>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -632,6 +632,7 @@
|
|||
<string name="equipment_empty">You already have all equipment! More will be released during the Grand Galas, near the solstices and equinoxes.</string>
|
||||
<string name="classless">Classless</string>
|
||||
<string name="class_equipment_shop_dialog">This item is only available to a specific class.\nYou can change your class from Settings.</string>
|
||||
<string name="insufficient_level_equipment_dialog">This item is only available to a specific class.\nYou can select a class after level 10.</string>
|
||||
<string name="class_gear_disclaimer">You can only purchase gear for your current class</string>
|
||||
<string name="tavern_description">Welcome to the Inn! Pull up a chair to chat.</string>
|
||||
<string name="check_into_inn">Check into Inn</string>
|
||||
|
|
|
|||
|
|
@ -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<FragmentRefreshRecyclerviewBinding>()
|
|||
|
||||
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)
|
||||
}
|
||||
|
|
@ -215,17 +226,33 @@ open class ShopFragment : BaseMainFragment<FragmentRefreshRecyclerviewBinding>()
|
|||
}
|
||||
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue