From cd9361e5c83a1595ec2f0d24138c8ce38aa47021 Mon Sep 17 00:00:00 2001
From: Anita W <1918555+anitawoodruff@users.noreply.github.com>
Date: Mon, 4 May 2020 16:21:18 +0100
Subject: [PATCH] Talkback improvements for main stats panel (#1308)
* Rename unlock_level_short string to level_unabbreviated
* Refactor: extract methods for setting user level within avatar
* Set content description of 'Lvl ..' text view to 'Level ..'
* Set content description of value bar to null
---
Habitica/res/layout/value_bar.xml | 2 +-
Habitica/res/values/strings.xml | 3 +-
.../android/habitica/models/shops/ShopItem.kt | 2 +-
.../habitica/ui/AvatarWithBarsViewModel.kt | 38 +++++++++++++------
4 files changed, 30 insertions(+), 15 deletions(-)
diff --git a/Habitica/res/layout/value_bar.xml b/Habitica/res/layout/value_bar.xml
index cdd3d63ba..007b0c45f 100644
--- a/Habitica/res/layout/value_bar.xml
+++ b/Habitica/res/layout/value_bar.xml
@@ -15,7 +15,7 @@
android:layout_alignTop="@+id/progressBar"
android:layout_marginEnd="@dimen/bar_icon_padding"
android:layout_marginRight="@dimen/bar_icon_padding"
- android:contentDescription="Bar Icon"
+ android:contentDescription="@null"
android:scaleType="center"
android:visibility="gone"/>
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index f92e40b8d..60c915f7b 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -293,6 +293,7 @@
You don\'t have any %s
Lvl %d
Lvl %1$d %2$s
+ Level %1$d %2$s
Warrior
Rogue
Mage
@@ -953,7 +954,7 @@
Unlock by finishing Quest %d
Unlock by reaching level %d
Finish Quest %d
- Level %d
+ Level %d
You are not participating
Quest completed!
Using Habitica
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 543fc0994..a619c621b 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
@@ -101,7 +101,7 @@ open class ShopItem : RealmObject() {
}
}
level != null -> {
- context.getString(R.string.unlock_level_short, level ?: 0)
+ context.getString(R.string.level_unabbreviated, level ?: 0)
}
else -> null
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarWithBarsViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarWithBarsViewModel.kt
index efecd2c3f..8186be945 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarWithBarsViewModel.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarWithBarsViewModel.kt
@@ -6,6 +6,7 @@ import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import android.os.Build
import android.view.View
+import android.widget.TextView
import androidx.core.os.bundleOf
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.data.UserRepository
@@ -63,19 +64,9 @@ class AvatarWithBarsViewModel(private val context: Context, private val binding:
binding.mpBar.visibility = if (stats.habitClass == null || stats.lvl ?: 0 < 10 || user.preferences?.disableClasses == true) View.GONE else View.VISIBLE
if (!user.hasClass()) {
- binding.lvlTv.text = context.getString(R.string.user_level, stats.lvl)
- binding.lvlTv.setCompoundDrawables(null, null, null, null)
+ setUserLevel(context, binding.lvlTv, stats.lvl)
} else {
- binding.lvlTv.text = context.getString(R.string.user_level_with_class, stats.lvl, userClass.substring(0, 1).toUpperCase(Locale.getDefault()) + userClass.substring(1))
- var drawable: Drawable? = null
- when (stats.habitClass) {
- Stats.WARRIOR -> drawable = BitmapDrawable(context.resources, HabiticaIconsHelper.imageOfWarriorDarkBg())
- Stats.ROGUE -> drawable = BitmapDrawable(context.resources, HabiticaIconsHelper.imageOfRogueDarkBg())
- Stats.MAGE -> drawable = BitmapDrawable(context.resources, HabiticaIconsHelper.imageOfMageDarkBg())
- Stats.HEALER -> drawable = BitmapDrawable(context.resources, HabiticaIconsHelper.imageOfHealerDarkBg())
- }
- drawable?.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight)
- binding.lvlTv.setCompoundDrawables(drawable, null, null, null)
+ setUserLevelWithClass(context, binding.lvlTv, stats.lvl, capitalize(userClass), stats.habitClass)
}
setHpBarData(stats.hp?.toFloat() ?: 0.toFloat(), stats.maxHealth ?: 0)
@@ -144,5 +135,28 @@ class AvatarWithBarsViewModel(private val context: Context, private val binding:
val hp = stats.hp?.let { HealthFormatter.format(it) } ?: 0.0
valueBar.set(hp, maxHP.toDouble())
}
+
+ private fun setUserLevel(context: Context, textView: TextView, level: Int?) {
+ textView.text = context.getString(R.string.user_level, level)
+ textView.contentDescription = context.getString(R.string.level_unabbreviated, level)
+ textView.setCompoundDrawables(null, null, null, null)
+ }
+
+ private fun setUserLevelWithClass(context: Context, textView: TextView, level: Int?, userClassString: String, habitClass: String?) {
+ textView.text = context.getString(R.string.user_level_with_class, level, userClassString)
+ textView.contentDescription = context.getString(R.string.user_level_with_class_unabbreviated, level, userClassString)
+ var drawable: Drawable? = null
+ when (habitClass) {
+ Stats.WARRIOR -> drawable = BitmapDrawable(context.resources, HabiticaIconsHelper.imageOfWarriorDarkBg())
+ Stats.ROGUE -> drawable = BitmapDrawable(context.resources, HabiticaIconsHelper.imageOfRogueDarkBg())
+ Stats.MAGE -> drawable = BitmapDrawable(context.resources, HabiticaIconsHelper.imageOfMageDarkBg())
+ Stats.HEALER -> drawable = BitmapDrawable(context.resources, HabiticaIconsHelper.imageOfHealerDarkBg())
+ }
+ drawable?.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight)
+ textView.setCompoundDrawables(drawable, null, null, null)
+ }
+
+ private fun capitalize(s: String) =
+ s.substring(0, 1).toUpperCase(Locale.getDefault()) + s.substring(1)
}
}