From 91dd28d4ec855c7883f0272009fda004b4def9c9 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 16 May 2024 17:55:18 +0200 Subject: [PATCH] Improve empty states for shop categories --- Habitica/res/layout/shop_section_empty.xml | 33 +++++++++++++++++++ Habitica/res/values/strings.xml | 5 +++ .../models/shops/EmptyShopCategory.kt | 19 +++++++++++ .../adapter/inventory/ShopRecyclerAdapter.kt | 15 +++++++-- .../fragments/inventory/shops/ShopFragment.kt | 2 +- .../ui/viewHolders/EmptySectionViewHolder.kt | 15 +++++++++ 6 files changed, 85 insertions(+), 4 deletions(-) create mode 100644 Habitica/res/layout/shop_section_empty.xml create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/EmptyShopCategory.kt create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/EmptySectionViewHolder.kt 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 + } +}