diff --git a/Habitica/res/layout/shop_section_empty.xml b/Habitica/res/layout/shop_section_empty.xml
new file mode 100644
index 000000000..efbd66572
--- /dev/null
+++ b/Habitica/res/layout/shop_section_empty.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index 3512f9a27..eb23b2de3 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -1515,6 +1515,11 @@
Summer
Fall
Animal Tails
+ You own all of these items
+ You can try them on by customizing your avatar. Be sure to check back later for next month’s options!
+ You can try them on by customizing your avatar. Be sure to check back later for next season’s options!
+ "You can try them on by customizing your avatar. "
+ "You can try them on by Equipment. Be sure to check back later for next month’s options! "
- You
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/EmptyShopCategory.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/EmptyShopCategory.kt
new file mode 100644
index 000000000..f3c425251
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/EmptyShopCategory.kt
@@ -0,0 +1,19 @@
+package com.habitrpg.android.habitica.models.shops
+
+import android.content.Context
+import com.habitrpg.android.habitica.R
+
+class EmptyShopCategory(categoryIdentifier: String, context: Context?) {
+ val title: String = context?.getString(R.string.you_own_all_items) ?: ""
+ val description: String
+ init {
+ val stringId = when (categoryIdentifier) {
+ "background" -> R.string.try_on_next_month
+ "color" -> R.string.try_on_next_season
+ "skin" -> R.string.try_on_next_season
+ "mystery_sets" -> R.string.try_on_equipment
+ else -> R.string.try_on_customize
+ }
+ description = context?.getString(stringId) ?: ""
+ }
+}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.kt
index 2ec3463f3..130bc49ec 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ShopRecyclerAdapter.kt
@@ -14,12 +14,14 @@ import com.habitrpg.android.habitica.extensions.inflate
import com.habitrpg.android.habitica.helpers.Analytics
import com.habitrpg.android.habitica.helpers.EventCategory
import com.habitrpg.android.habitica.helpers.HitType
+import com.habitrpg.android.habitica.models.shops.EmptyShopCategory
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.user.OwnedItem
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.activities.MainActivity
+import com.habitrpg.android.habitica.ui.viewHolders.EmptyShopSectionViewHolder
import com.habitrpg.android.habitica.ui.viewHolders.SectionViewHolder
import com.habitrpg.android.habitica.ui.viewHolders.ShopItemViewHolder
import com.habitrpg.android.habitica.ui.views.getTranslatedClassName
@@ -89,8 +91,11 @@ class ShopRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter 0) {
- items.add(category)
+ items.add(category)
+ if (category.items.isEmpty()) {
+ items.add(EmptyShopCategory(category.identifier, context))
+
+ } else {
for (item in category.items) {
item.categoryIdentifier = category.identifier
items.add(item)
@@ -115,6 +120,7 @@ class ShopRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter EmptyShopSectionViewHolder(parent.inflate(R.layout.shop_section_empty))
else -> {
val view = parent.inflate(R.layout.row_shopitem)
@@ -212,6 +218,8 @@ class ShopRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter (holder as? EmptyShopSectionViewHolder)?.bind(obj)
+
is String -> (holder as? EmptyStateViewHolder)?.text = obj
is Pair<*, *> ->
(holder as? ArmoireGearViewHolder)?.bind(
@@ -264,7 +272,8 @@ class ShopRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter 0
is ShopCategory -> 1
is Pair<*, *> -> 3
- is ShopItem -> 4
+ is EmptyShopCategory -> 4
+ is ShopItem -> 5
else -> 2
}
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 a484465c1..05ffdb7a3 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
@@ -176,7 +176,7 @@ open class ShopFragment : BaseMainFragment()
layoutManager?.spanSizeLookup =
object : GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
- return if ((adapter?.getItemViewType(position) ?: 0) < 4) {
+ return if ((adapter?.getItemViewType(position) ?: 0) < 5) {
layoutManager?.spanCount ?: 1
} else {
1
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/EmptySectionViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/EmptySectionViewHolder.kt
new file mode 100644
index 000000000..9dd9f5318
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/EmptySectionViewHolder.kt
@@ -0,0 +1,15 @@
+package com.habitrpg.android.habitica.ui.viewHolders
+
+import android.view.View
+import androidx.recyclerview.widget.RecyclerView
+import com.habitrpg.android.habitica.databinding.ShopSectionEmptyBinding
+import com.habitrpg.android.habitica.models.shops.EmptyShopCategory
+
+class EmptyShopSectionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ private val binding = ShopSectionEmptyBinding.bind(itemView)
+
+ fun bind(emptyShopCategory: EmptyShopCategory) {
+ binding.titleView.text = emptyShopCategory.title
+ binding.descriptionView.text = emptyShopCategory.description
+ }
+}