Bug 1870335 - Merge content descriptions in the Add-ons details screen.

fenix/124.1.0
Arturo Mejia 5 months ago committed by mergify[bot]
parent 3470a4e951
commit 2b48fa54b3

@ -10,6 +10,8 @@ import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan import android.text.style.ClickableSpan
import android.text.style.URLSpan import android.text.style.URLSpan
import android.view.View import android.view.View
import android.widget.TextView
import androidx.annotation.VisibleForTesting
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.core.text.HtmlCompat import androidx.core.text.HtmlCompat
import androidx.core.text.getSpans import androidx.core.text.getSpans
@ -62,7 +64,6 @@ class AddonDetailsBindingDelegate(
addon.rating?.let { rating -> addon.rating?.let { rating ->
val resources = binding.root.resources val resources = binding.root.resources
val ratingContentDescription = resources.getString(R.string.mozac_feature_addons_rating_content_description) val ratingContentDescription = resources.getString(R.string.mozac_feature_addons_rating_content_description)
binding.ratingView.contentDescription = String.format(ratingContentDescription, rating.average)
binding.ratingView.rating = rating.average binding.ratingView.rating = rating.average
binding.reviewCount.text = numberFormatter.format(rating.reviews) binding.reviewCount.text = numberFormatter.format(rating.reviews)
@ -73,6 +74,7 @@ class AddonDetailsBindingDelegate(
interactor.openWebsite(addon.ratingUrl.toUri()) interactor.openWebsite(addon.ratingUrl.toUri())
} }
} }
binding.ratingLabel.joinContextDescriptions(String.format(ratingContentDescription, rating.average))
} }
} }
@ -96,7 +98,9 @@ class AddonDetailsBindingDelegate(
return return
} }
binding.lastUpdatedText.text = dateFormatter.format(addon.updatedAtDate) val formattedDate = dateFormatter.format(addon.updatedAtDate)
binding.lastUpdatedText.text = formattedDate
binding.lastUpdatedLabel.joinContextDescriptions(formattedDate)
} }
private fun bindVersion(addon: Addon) { private fun bindVersion(addon: Addon) {
@ -114,6 +118,7 @@ class AddonDetailsBindingDelegate(
} else { } else {
binding.versionText.setOnLongClickListener(null) binding.versionText.setOnLongClickListener(null)
} }
binding.versionLabel.joinContextDescriptions(version)
} }
private fun bindAuthor(addon: Addon) { private fun bindAuthor(addon: Addon) {
@ -133,6 +138,7 @@ class AddonDetailsBindingDelegate(
interactor.openWebsite(author.url.toUri()) interactor.openWebsite(author.url.toUri())
} }
} }
binding.authorLabel.joinContextDescriptions(author.name)
} }
private fun bindDetails(addon: Addon) { private fun bindDetails(addon: Addon) {
@ -179,4 +185,9 @@ class AddonDetailsBindingDelegate(
interactor.openWebsite(addon.detailUrl.toUri()) interactor.openWebsite(addon.detailUrl.toUri())
} }
} }
@VisibleForTesting
internal fun TextView.joinContextDescriptions(text: String) {
this.contentDescription = "${this.text} $text"
}
} }

@ -49,6 +49,7 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/author_label" app:layout_constraintStart_toEndOf="@+id/author_label"
app:layout_constraintTop_toBottomOf="@+id/details" app:layout_constraintTop_toBottomOf="@+id/details"
android:importantForAccessibility="no"
tools:text="@tools:sample/full_names" /> tools:text="@tools:sample/full_names" />
<View <View
@ -83,6 +84,7 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/version_label" app:layout_constraintStart_toEndOf="@+id/version_label"
app:layout_constraintTop_toBottomOf="@+id/author_divider" app:layout_constraintTop_toBottomOf="@+id/author_divider"
android:importantForAccessibility="no"
tools:text="1.2.3" /> tools:text="1.2.3" />
<View <View
@ -116,6 +118,7 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/last_updated_label" app:layout_constraintStart_toEndOf="@+id/last_updated_label"
app:layout_constraintTop_toBottomOf="@+id/version_divider" app:layout_constraintTop_toBottomOf="@+id/version_divider"
android:importantForAccessibility="no"
tools:text="Oct 16, 2019" /> tools:text="Oct 16, 2019" />
<View <View
@ -178,6 +181,7 @@
app:layout_constraintHorizontal_bias="1" app:layout_constraintHorizontal_bias="1"
app:layout_constraintHorizontal_chainStyle="packed" app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toEndOf="@+id/rating_label" app:layout_constraintStart_toEndOf="@+id/rating_label"
android:importantForAccessibility="no"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView

@ -8,6 +8,7 @@ import android.net.Uri
import android.text.method.LinkMovementMethod import android.text.method.LinkMovementMethod
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.View.IMPORTANT_FOR_ACCESSIBILITY_NO
import androidx.core.view.isVisible import androidx.core.view.isVisible
import io.mockk.mockk import io.mockk.mockk
import io.mockk.verify import io.mockk.verify
@ -66,9 +67,14 @@ class AddonDetailsBindingDelegateTest {
), ),
), ),
) )
assertEquals("4.30/5", binding.ratingView.contentDescription)
assertEquals(4.5f, binding.ratingView.rating) assertEquals(4.5f, binding.ratingView.rating)
assertEquals("100", binding.reviewCount.text) assertEquals("100", binding.reviewCount.text)
val ratingContentDescription = testContext.getString(R.string.mozac_feature_addons_rating_content_description)
val formattedRatting = String.format(ratingContentDescription, 4.3f)
val expectedContentDescription = binding.ratingLabel.text.toString() + " " + formattedRatting
assertEquals(expectedContentDescription, binding.ratingLabel.contentDescription)
assertEquals(IMPORTANT_FOR_ACCESSIBILITY_NO, binding.ratingView.importantForAccessibility)
} }
@Test @Test
@ -104,6 +110,9 @@ class AddonDetailsBindingDelegateTest {
detailsBindingDelegate.bind(baseAddon) detailsBindingDelegate.bind(baseAddon)
assertEquals("Nov 23, 2020", binding.lastUpdatedText.text) assertEquals("Nov 23, 2020", binding.lastUpdatedText.text)
val expectedContentDescription = binding.lastUpdatedLabel.text.toString() + " " + "Nov 23, 2020"
assertEquals(expectedContentDescription, binding.lastUpdatedLabel.contentDescription)
assertEquals(IMPORTANT_FOR_ACCESSIBILITY_NO, binding.lastUpdatedText.importantForAccessibility)
} }
@Test @Test
@ -130,6 +139,9 @@ class AddonDetailsBindingDelegateTest {
assertEquals("2.0.0", binding.versionText.text) assertEquals("2.0.0", binding.versionText.text)
binding.versionText.performLongClick() binding.versionText.performLongClick()
verify { interactor.showUpdaterDialog(addon2) } verify { interactor.showUpdaterDialog(addon2) }
val expectedContentDescription = binding.versionLabel.text.toString() + " 2.0.0"
assertEquals(expectedContentDescription, binding.versionLabel.contentDescription)
assertEquals(IMPORTANT_FOR_ACCESSIBILITY_NO, binding.versionText.importantForAccessibility)
} }
@Test @Test
@ -140,6 +152,9 @@ class AddonDetailsBindingDelegateTest {
assertEquals("Sarah Jane", binding.authorText.text) assertEquals("Sarah Jane", binding.authorText.text)
assertNotEquals(testContext.getColorFromAttr(R.attr.textAccent), binding.authorText.currentTextColor) assertNotEquals(testContext.getColorFromAttr(R.attr.textAccent), binding.authorText.currentTextColor)
val expectedContentDescription = binding.authorLabel.text.toString() + " Sarah Jane"
assertEquals(expectedContentDescription, binding.authorLabel.contentDescription)
assertEquals(IMPORTANT_FOR_ACCESSIBILITY_NO, binding.authorText.importantForAccessibility)
} }
@Test @Test

Loading…
Cancel
Save