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