From fcc5da1da52a9ace31e34430728fc44b77dc8efa Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 6 Nov 2017 12:49:28 +0100 Subject: [PATCH] fix shop equipment header. Fixes #856. Fixes #857. Fixes #858 --- .../layout/class_spinner_dropdown_item.xml | 20 +++++++ Habitica/res/layout/shop_section_header.xml | 12 ++-- Habitica/res/values/strings.xml | 1 + .../android/habitica/models/shops/ShopItem.kt | 5 +- .../inventory/HabiticaClassArrayAdapter.kt | 59 +++++++++++++++++++ .../adapter/inventory/ShopRecyclerAdapter.kt | 11 ++-- .../tasks/RewardsRecyclerViewAdapter.java | 2 +- .../ui/views/shops/PurchaseDialog.java | 7 ++- 8 files changed, 101 insertions(+), 16 deletions(-) create mode 100644 Habitica/res/layout/class_spinner_dropdown_item.xml create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/HabiticaClassArrayAdapter.kt diff --git a/Habitica/res/layout/class_spinner_dropdown_item.xml b/Habitica/res/layout/class_spinner_dropdown_item.xml new file mode 100644 index 000000000..402616780 --- /dev/null +++ b/Habitica/res/layout/class_spinner_dropdown_item.xml @@ -0,0 +1,20 @@ + + + + + \ No newline at end of file diff --git a/Habitica/res/layout/shop_section_header.xml b/Habitica/res/layout/shop_section_header.xml index f1426159f..6678ea373 100644 --- a/Habitica/res/layout/shop_section_header.xml +++ b/Habitica/res/layout/shop_section_header.xml @@ -11,24 +11,26 @@ android:layout_marginTop="12dp"/> + android:layout_height="wrap_content" + android:gravity="center_vertical" + android:layout_marginTop="12dp" + android:layout_marginBottom="12dp"> + android:layout_marginLeft="24dp" + android:layout_marginRight="24dp" /> \ No newline at end of file diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index e54ef5b52..ae812cb04 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -714,4 +714,5 @@ Allocating Points Class Equipment You already have all equipment! More will be released during the Grand Galas, near the solstices and equinoxes. + Classless diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt index 99480335b..397e9cc4e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt @@ -52,10 +52,7 @@ open class ShopItem : RealmObject() { val isTypeAnimal: Boolean get() = "pets" == purchaseType || "mounts" == purchaseType - fun canBuy(user: User?): Boolean { - if (locked) { - return false - } + fun canAfford(user: User?): Boolean { return when(currency) { "gold" -> value <= user?.stats?.getGp() ?: 0.0 "gems" -> value <= user?.balance ?: 0.0 * 4 diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/HabiticaClassArrayAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/HabiticaClassArrayAdapter.kt new file mode 100644 index 000000000..3eef63aeb --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/HabiticaClassArrayAdapter.kt @@ -0,0 +1,59 @@ +package com.habitrpg.android.habitica.ui.adapter.inventory + +import android.content.Context +import android.support.v4.content.ContextCompat +import android.view.View +import android.view.ViewGroup +import android.widget.ArrayAdapter +import android.widget.ImageView +import android.widget.TextView +import com.habitrpg.android.habitica.R +import com.habitrpg.android.habitica.extensions.inflate +import com.habitrpg.android.habitica.models.user.Stats +import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper + + +class HabiticaClassArrayAdapter(context: Context?, resource: Int, objects: List?) : ArrayAdapter(context, resource, R.id.textView, objects) { + + override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup?): View = + getView(position, convertView, parent) + + override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { + val row = convertView ?: parent?.inflate(R.layout.class_spinner_dropdown_item, false) + + val textView: TextView? = row?.findViewById(R.id.textView) + val imageView: ImageView? = row?.findViewById(R.id.classIconView) + + when (getItem(position)) { + Stats.WARRIOR -> { + textView?.text = context.getString(R.string.warrior) + textView?.setTextColor(ContextCompat.getColor(context, R.color.red_10)) + imageView?.setImageBitmap(HabiticaIconsHelper.imageOfWarriorLightBg()) + } + Stats.MAGE -> { + textView?.text = context.getString(R.string.mage) + textView?.setTextColor(ContextCompat.getColor(context, R.color.blue_10)) + imageView?.setImageBitmap(HabiticaIconsHelper.imageOfMageLightBg()) + } + Stats.HEALER -> { + textView?.text = context.getString(R.string.healer) + textView?.setTextColor(ContextCompat.getColor(context, R.color.yellow_10)) + imageView?.setImageBitmap(HabiticaIconsHelper.imageOfHealerLightBg()) + } + Stats.ROGUE -> { + textView?.text = context.getString(R.string.rogue) + textView?.setTextColor(ContextCompat.getColor(context, R.color.brand_300)) + imageView?.setImageBitmap(HabiticaIconsHelper.imageOfRogueLightBg()) + } + else -> { + textView?.text = context.getString(R.string.classless) + textView?.setTextColor(ContextCompat.getColor(context, R.color.textColorLight)) + imageView?.setImageBitmap(null) + } + } + + + return row ?: View(context) + } + +} \ No newline at end of file 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 4df643bef..402ffb20d 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 @@ -10,7 +10,6 @@ import android.text.Html import android.text.method.LinkMovementMethod import android.view.View import android.view.ViewGroup -import android.widget.ArrayAdapter import android.widget.Button import android.widget.ImageView import android.widget.TextView @@ -128,7 +127,7 @@ class ShopRecyclerAdapter : RecyclerView.Adapter() { val category = obj as ShopCategory (holder as SectionViewHolder).bind((category).text) if (gearCategories.contains(category)) { - val adapter = ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, gearCategories.map { it.identifier }) + val adapter = HabiticaClassArrayAdapter(context, R.layout.class_spinner_dropdown_item, gearCategories.map { it.identifier }) holder.spinnerAdapter = adapter holder.selectedItem = gearCategories.indexOf(category) holder.spinnerSelectionChanged = { @@ -140,7 +139,7 @@ class ShopRecyclerAdapter : RecyclerView.Adapter() { } ShopItem::class.java -> { val item = obj as ShopItem - (holder as ShopItemViewHolder).bind(item, item.canBuy(user)) + (holder as ShopItemViewHolder).bind(item, item.canAfford(user)) if (ownedItems.containsKey(item.key)) { holder.itemCount = ownedItems[item.key]?.owned ?: 0 } @@ -160,7 +159,11 @@ class ShopRecyclerAdapter : RecyclerView.Adapter() { } if (position <= getGearItemCount()) { return when { - position == 1 -> getSelectedShopCategory() + position == 1 -> { + val category = getSelectedShopCategory() + category?.text = context?.getString(R.string.class_equipment) ?: "" + category + } getSelectedShopCategory()?.items?.size ?: 0 <= position-2 -> return context?.getString(R.string.equipment_empty) else -> getSelectedShopCategory()?.items?.get(position-2) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RewardsRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RewardsRecyclerViewAdapter.java index 5f25175a6..f2d585cbe 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RewardsRecyclerViewAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RewardsRecyclerViewAdapter.java @@ -61,7 +61,7 @@ public class RewardsRecyclerViewAdapter extends RecyclerView.Adapter observable; if ((shopIdentifier != null && shopIdentifier.equals(Shop.TIME_TRAVELERS_SHOP)) || "mystery_set".equals(shopItem.getPurchaseType())) { if (shopItem.getPurchaseType().equals("gear")) {