Bug 1870339 - Make list of add-ons more accessible

fenix/125.0
William Durand 3 months ago committed by mergify[bot]
parent dea7509173
commit cc83d5c472

@ -36,6 +36,7 @@ import org.mozilla.fenix.helpers.Constants.RETRY_COUNT
import org.mozilla.fenix.helpers.Constants.TAG
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper.assertUIObjectExists
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResIdContainingText
import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
import org.mozilla.fenix.helpers.TestAssetHelper.waitingTime
import org.mozilla.fenix.helpers.TestAssetHelper.waitingTimeLong
@ -43,7 +44,6 @@ import org.mozilla.fenix.helpers.TestHelper.appName
import org.mozilla.fenix.helpers.TestHelper.mDevice
import org.mozilla.fenix.helpers.TestHelper.packageName
import org.mozilla.fenix.helpers.TestHelper.restartApp
import org.mozilla.fenix.helpers.TestHelper.scrollToElementByText
import org.mozilla.fenix.helpers.click
import org.mozilla.fenix.helpers.ext.waitNotNull
@ -120,7 +120,7 @@ class SettingsSubMenuAddonsManagerRobot {
homeScreen {
}.openThreeDotMenu {
}.openAddonsManagerMenu {
scrollToElementByText(addonName)
scrollToAddon(addonName)
clickInstallAddon(addonName)
verifyAddonPermissionPrompt(addonName)
acceptPermissionToInstallAddon()
@ -152,7 +152,7 @@ class SettingsSubMenuAddonsManagerRobot {
}
fun verifyAddonIsInstalled(addonName: String) {
scrollToElementByText(addonName)
scrollToAddon(addonName)
Log.i(TAG, "verifyAddonIsInstalled: Trying to verify that the $addonName add-on was installed")
onView(
allOf(
@ -199,7 +199,7 @@ class SettingsSubMenuAddonsManagerRobot {
Log.i(TAG, "verifyAddonsItems: Verified that all uBlock Origin items are completely displayed")
}
fun verifyAddonCanBeInstalled(addonName: String) {
scrollToElementByText(addonName)
scrollToAddon(addonName)
mDevice.waitNotNull(Until.findObject(By.text(addonName)), waitingTime)
Log.i(TAG, "verifyAddonCanBeInstalled: Trying to verify that the install $addonName button is visible")
onView(
@ -250,7 +250,7 @@ class SettingsSubMenuAddonsManagerRobot {
addonName: String,
interact: SettingsSubMenuAddonsManagerAddonDetailedMenuRobot.() -> Unit,
): SettingsSubMenuAddonsManagerAddonDetailedMenuRobot.Transition {
scrollToElementByText(addonName)
scrollToAddon(addonName)
Log.i(TAG, "openDetailedMenuForAddon: Trying to verify that the $addonName add-on is visible")
addonItem(addonName).check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
Log.i(TAG, "openDetailedMenuForAddon: Verified that the $addonName add-on is visible")
@ -297,6 +297,17 @@ fun addonsMenu(interact: SettingsSubMenuAddonsManagerRobot.() -> Unit): Settings
return SettingsSubMenuAddonsManagerRobot.Transition()
}
private fun scrollToAddon(addonName: String) {
Log.i(TAG, "scrollToAddon: Trying to scroll into view add-on: $addonName")
addonsList().scrollIntoView(
itemWithResIdContainingText(
resourceId = "$packageName:id/add_on_name",
text = addonName,
),
)
Log.i(TAG, "scrollToAddon: Scrolled into view add-on: $addonName")
}
private fun addonItem(addonName: String) =
onView(
allOf(

@ -11,6 +11,7 @@ import android.os.Build
import android.os.Bundle
import android.view.View
import android.view.accessibility.AccessibilityEvent
import android.view.accessibility.AccessibilityNodeInfo
import androidx.annotation.VisibleForTesting
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
@ -115,6 +116,29 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management)
binding?.addOnsEmptyMessage?.isVisible = false
recyclerView?.adapter = adapter
recyclerView?.accessibilityDelegate = object : View.AccessibilityDelegate() {
override fun onInitializeAccessibilityNodeInfo(host: View, info: AccessibilityNodeInfo) {
super.onInitializeAccessibilityNodeInfo(host, info)
adapter?.let {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
info.collectionInfo = AccessibilityNodeInfo.CollectionInfo(
it.itemCount,
1,
false,
)
} else {
@Suppress("DEPRECATION")
info.collectionInfo = AccessibilityNodeInfo.CollectionInfo.obtain(
it.itemCount,
1,
false,
)
}
}
}
}
if (shouldRefresh) {
adapter?.updateAddons(addons)
}

Loading…
Cancel
Save