diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index f5815e615..846d8d164 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -1510,6 +1510,10 @@ Switches in %s Refresh for new items Monthly Backgrounds + Winter + Spring + Summer + Fall You 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 d7fc41c2d..c6515e354 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 @@ -145,6 +145,7 @@ class AppConfigManager(contentRepository: ContentRepository?) : return promo } + fun knownIssues(): List> { val type = object : TypeToken>>() {}.type return Gson().fromJson(remoteConfig.getString("knownIssues"), type) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/WorldState.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/WorldState.kt index 374a80999..dc70a6295 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/WorldState.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/WorldState.kt @@ -36,4 +36,8 @@ open class WorldState : RealmObject(), BaseObject { } return null } + + fun getCurrentSeason(): String? { + return events.firstOrNull { it?.season != null }?.season ?: currentEvent?.season + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/WorldStateEvent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/WorldStateEvent.kt index 35f06d6f4..4cef7e160 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/WorldStateEvent.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/WorldStateEvent.kt @@ -19,6 +19,7 @@ open class WorldStateEvent : RealmObject(), BaseMainObject { var start: Date? = null var end: Date? = null var promo: String? = null + var season: String? = null var npcImageSuffix: String? = null var aprilFools: String? = null var gear: Boolean = false diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt index 04c9117da..1c23263d7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt @@ -160,11 +160,11 @@ class NavigationDrawerFragment : DialogFragment() { .combine( inventoryRepository.getAvailableLimitedItems(), ) { state, items -> Pair(state, items) } - .collect { pair -> - val gearEvent = pair.first.events.firstOrNull { it.gear } + .collect { (worldState, items) -> + val gearEvent = worldState.events.firstOrNull { it.gear } createUpdatingJob("seasonal", { if (gearEvent?.isValid == false) return@createUpdatingJob false - gearEvent?.isCurrentlyActive == true || pair.second.isNotEmpty() + gearEvent?.isCurrentlyActive == true || items.isNotEmpty() }, { val diff = (gearEvent?.end?.time ?: 0) - Date().time if (diff < (1.toDuration(DurationUnit.HOURS).inWholeMilliseconds)) { @@ -175,7 +175,7 @@ class NavigationDrawerFragment : DialogFragment() { 1.toDuration(DurationUnit.MINUTES) } }) { - updateSeasonalMenuEntries(gearEvent, pair.second) + updateSeasonalMenuEntries(gearEvent, items) } val event = configManager.getBirthdayEvent() @@ -194,6 +194,21 @@ class NavigationDrawerFragment : DialogFragment() { adapter.updateItem(item) (activity as? MainActivity)?.showBirthdayIcon = false } + + val season = worldState.getCurrentSeason() + if (season != null) { + getItemWithIdentifier(SIDEBAR_SHOPS_SEASONAL)?.let { seasonalItem -> + val seasonID = when (season) { + "winter" -> R.string.winter + "spring" -> R.string.spring + "summer" -> R.string.summer + "fall" -> R.string.fall + else -> R.string.open + } + seasonalItem.pillText = requireContext().getString(seasonID) + adapter.updateItem(seasonalItem) + } + } } } @@ -257,7 +272,7 @@ class NavigationDrawerFragment : DialogFragment() { adapter.updateItem(market) val shop = getItemWithIdentifier(SIDEBAR_SHOPS_SEASONAL) ?: return - shop.pillText = context?.getString(R.string.open) + shop.subtitle = gearEvent?.end?.getRemainingString(requireContext().resources) adapter.updateItem(shop) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/SectionViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/SectionViewHolder.kt index 3d8cf8dfa..71e739e3e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/SectionViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/SectionViewHolder.kt @@ -56,9 +56,9 @@ class SectionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { try { val stringID = context.resources.getIdentifier("section$title", "string", context.packageName) - this.label.text = context.getString(stringID) + this.label.text = context.getString(stringID).uppercase() } catch (e: Exception) { - this.label.text = title + this.label.text = title.uppercase() } } diff --git a/common/src/main/res/values/colors.xml b/common/src/main/res/values/colors.xml index 675b352d3..86f6dce95 100644 --- a/common/src/main/res/values/colors.xml +++ b/common/src/main/res/values/colors.xml @@ -129,7 +129,7 @@ #26221C #26201C - #B3432874 + @color/brand_300 #AB6565 #AB6570 #AB8165