diff --git a/Habitica/res/drawable/circle_gray300.xml b/Habitica/res/drawable/circle_gray300.xml
new file mode 100644
index 000000000..ba3d669da
--- /dev/null
+++ b/Habitica/res/drawable/circle_gray300.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/layout/fragment_skills.xml b/Habitica/res/layout/fragment_skills.xml
index e10ba38a8..22d0a0906 100644
--- a/Habitica/res/layout/fragment_skills.xml
+++ b/Habitica/res/layout/fragment_skills.xml
@@ -5,5 +5,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbarSize="3dp"
+ android:background="@color/white"
android:scrollbarThumbVertical="@color/scrollbarThumb"
android:scrollbars="vertical" />
diff --git a/Habitica/res/layout/skill_list_item.xml b/Habitica/res/layout/skill_list_item.xml
index 78f8dadef..9dc866268 100644
--- a/Habitica/res/layout/skill_list_item.xml
+++ b/Habitica/res/layout/skill_list_item.xml
@@ -1,17 +1,27 @@
-
+
+
-
+ android:layout_gravity="center_vertical"
+ android:layout_marginLeft="8dp"/>
+ android:orientation="vertical"
+ android:layout_marginTop="12dp"
+ android:layout_marginBottom="12dp">
-
+
+
-
\ No newline at end of file
+ android:gravity="center"
+ />
+
\ No newline at end of file
diff --git a/Habitica/res/values/colors.xml b/Habitica/res/values/colors.xml
index a3a799e93..295b8cd59 100644
--- a/Habitica/res/values/colors.xml
+++ b/Habitica/res/values/colors.xml
@@ -125,6 +125,7 @@
#33000000
#89000000
#331a181d
+ #3CA9DCF6
#F6F4F8
#ddc994
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index b1a069c2d..07a4501fe 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -367,7 +367,7 @@
Quests that reward you with pet eggs
The ability to change your class before level 100
Support Habitica
- use
+ Use
Not getting the right drops? Check out the Market!
Need different food? Buy more from the market!
Open Market
@@ -941,4 +941,5 @@
Subscription Reminders
Kicked from group
Guidance with setting up your Habitica Account
+ Skill unlocks at level %d
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt
index 648f0e195..75ec17204 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt
@@ -132,7 +132,6 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
val habitClass = if (user.preferences?.disableClasses == true) "none" else user.stats?.habitClass
return realm.where(Skill::class.java)
.equalTo("habitClass", habitClass)
- .lessThanOrEqualTo("lvl", user.stats?.lvl ?: 0)
.findAll()
.asFlowable()
.filter { it.isLoaded }
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SkillsRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SkillsRecyclerViewAdapter.kt
index 80cfdc999..7f3334777 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SkillsRecyclerViewAdapter.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SkillsRecyclerViewAdapter.kt
@@ -5,7 +5,7 @@ import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import android.view.View
import android.view.ViewGroup
-import android.widget.Button
+import android.widget.ImageView
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
@@ -13,6 +13,7 @@ import com.facebook.drawee.view.SimpleDraweeView
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.inflate
import com.habitrpg.android.habitica.models.Skill
+import com.habitrpg.android.habitica.models.user.SpecialItems
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.helpers.bindView
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
@@ -24,11 +25,21 @@ class SkillsRecyclerViewAdapter : RecyclerView.Adapter()
val useSkillEvents = useSkillSubject.toFlowable(BackpressureStrategy.DROP)
- var mana: Double = 0.toDouble()
- set(value) {
- field = value
- notifyDataSetChanged()
- }
+ var mana: Double = 0.0
+ set(value) {
+ field = value
+ notifyDataSetChanged()
+ }
+ var level: Int = 0
+ set(value) {
+ field = value
+ notifyDataSetChanged()
+ }
+ var specialItems: SpecialItems? = null
+ set(value) {
+ field = value
+ notifyDataSetChanged()
+ }
private var skillList: List = emptyList()
fun setSkillList(skillList: List) {
@@ -51,18 +62,23 @@ class SkillsRecyclerViewAdapter : RecyclerView.Adapter mana) {
+ buttonWrapper.setBackgroundColor(ContextCompat.getColor(context, R.color.gray_600))
+ buttonIconView.alpha = 0.3f
+ priceLabel.alpha = 0.3f
+ } else {
+ buttonWrapper.setBackgroundColor(ContextCompat.getColor(context, R.color.blue_500_24))
+ buttonIconView.alpha = 1.0f
+ priceLabel.alpha = 1.0f
+ }
+ if ((skill.lvl ?: 0) > level) {
+ buttonWrapper.setBackgroundColor(ContextCompat.getColor(context, R.color.gray_600))
+ skillNameTextView.setTextColor(ContextCompat.getColor(context, R.color.task_gray))
+ skillNameTextView.text = context.getString(R.string.skill_unlocks_at, skill.lvl)
+ skillNotesTextView.visibility = View.GONE
+ buttonIconView.setImageDrawable(lockDrawable)
+ priceLabel.visibility = View.GONE
+ }
}
DataBindingUtils.loadImage(skillImageView, "shop_" + skill.key)
- if (skill.mana ?: 0 > mana) {
- priceButton.isEnabled = false
- priceButton.setBackgroundResource(R.color.task_gray)
- skillNameTextView.setTextColor(ContextCompat.getColor(context, R.color.task_gray))
- skillNotesTextView.setTextColor(ContextCompat.getColor(context, R.color.task_gray))
- } else {
- skillNameTextView.setTextColor(ContextCompat.getColor(context, android.R.color.black))
- skillNotesTextView.setTextColor(ContextCompat.getColor(context, android.R.color.black))
- priceButton.isEnabled = true
- }
}
override fun onClick(v: View) {
- skill?.let { useSkillSubject.onNext(it) }
+ if ((skill?.lvl ?: 0) <= level) {
+ skill?.let { useSkillSubject.onNext(it) }
+ }
+ }
+
+ private fun getOwnedCount(key: String): Int {
+ return when (key) {
+ "snowball" -> specialItems?.snowball
+ "shinySeed" -> specialItems?.shinySeed
+ "seafoam" -> specialItems?.seafoam
+ "spookySparkles" -> specialItems?.spookySparkles
+ else -> 0
+ } ?: 0
}
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt
index b2ab0e10b..101dcd56a 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt
@@ -67,8 +67,6 @@ class SkillsFragment : BaseMainFragment() {
resetViews()
- recyclerView.invalidateItemDecorations()
- recyclerView.addItemDecoration(androidx.recyclerview.widget.DividerItemDecoration(getActivity(), androidx.recyclerview.widget.DividerItemDecoration.VERTICAL))
recyclerView.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(activity)
recyclerView.adapter = adapter
recyclerView.itemAnimator = SafeDefaultItemAnimator()
@@ -78,9 +76,12 @@ class SkillsFragment : BaseMainFragment() {
if (user == null || adapter == null) {
return
}
- adapter?.mana = this.user?.stats?.mp ?: 0.toDouble()
+ adapter?.mana = this.user?.stats?.mp ?: 0.0
+ adapter?.level = this.user?.stats?.lvl ?: 0
+ adapter?.specialItems = this.user?.items?.special
user?.let { user ->
- Observable.concat(userRepository.getSkills(user).firstElement().toObservable().flatMap { Observable.fromIterable(it) }, userRepository.getSpecialItems(user).firstElement().toObservable().flatMap { Observable.fromIterable(it) })
+ Observable.concat(userRepository.getSkills(user).firstElement().toObservable().flatMap { Observable.fromIterable(it) },
+ userRepository.getSpecialItems(user).firstElement().toObservable().flatMap { Observable.fromIterable(it) })
.toList()
.subscribe(Consumer { skills -> adapter?.setSkillList(skills) }, RxErrorHandler.handleEmptyError())
}
@@ -121,7 +122,6 @@ class SkillsFragment : BaseMainFragment() {
}
-
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (data != null) {