diff --git a/Habitica/res/layout/dialog_purchase_shopitem_header.xml b/Habitica/res/layout/dialog_purchase_shopitem_header.xml
index 739fe7053..e4ddec070 100644
--- a/Habitica/res/layout/dialog_purchase_shopitem_header.xml
+++ b/Habitica/res/layout/dialog_purchase_shopitem_header.xml
@@ -22,8 +22,8 @@
android:paddingEnd="8dp">
{
- return unlockPath(customization.path, customization.price ?: 0)
+ return unlockPath(customization.unlockPath, customization.price ?: 0)
}
override fun runCron() {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Customization.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Customization.kt
index 0067c44a3..8c61295ad 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Customization.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/Customization.kt
@@ -78,6 +78,18 @@ open class Customization : RealmObject(), BaseObject {
}
val path: String
+ get() {
+ var path = if (type == "background") "backgrounds" else type
+ if (this.customizationSet != null) {
+ path = path + "." + this.customizationSet
+ } else if (this.category != null) {
+ path = path + "." + this.category
+ }
+ path = "$path.$identifier"
+ return path
+ }
+
+ val unlockPath: String
get() {
var path = type
if (this.category != null) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt
index 8471395f0..85fb907af 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/CustomizationRecyclerViewAdapter.kt
@@ -41,6 +41,7 @@ class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.Recycler
}
var ownedCustomizations: List = listOf()
+ private var pinnedItemKeys: List = ArrayList()
private val selectCustomizationEvents = PublishSubject.create()
@@ -143,6 +144,11 @@ class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.Recycler
return selectCustomizationEvents.toFlowable(BackpressureStrategy.DROP)
}
+ fun setPinnedItemKeys(pinnedItemKeys: List) {
+ this.pinnedItemKeys = pinnedItemKeys
+ if (customizationList.size > 0) this.notifyDataSetChanged()
+ }
+
internal inner class CustomizationViewHolder(itemView: View) : androidx.recyclerview.widget.RecyclerView.ViewHolder(itemView), View.OnClickListener {
private val binding = CustomizationGridItemBinding.bind(itemView)
@@ -194,6 +200,7 @@ class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.Recycler
} else {
customization?.let {
val dialog = PurchaseDialog(itemView.context, HabiticaBaseApplication.userComponent, ShopItem.fromCustomization(it, userSize, hairColor))
+ if (it.type == "background") dialog.isPinned = pinnedItemKeys.contains(ShopItem.fromCustomization(it, userSize, hairColor).key)
dialog.show()
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt
index 8fa175255..17bf14d5a 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt
@@ -87,6 +87,12 @@ class AvatarCustomizationFragment :
.subscribe({ }, RxErrorHandler.handleEmptyError())
)
+ compositeSubscription.add(
+ this.inventoryRepository.getInAppRewards()
+ .map { rewards -> rewards.map { it.key } }
+ .subscribe({ adapter.setPinnedItemKeys(it) }, RxErrorHandler.handleEmptyError())
+ )
+
return super.onCreateView(inflater, container, savedInstanceState)
}