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")) {