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) }