diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/FenixTabsAdapter.kt b/app/src/main/java/org/mozilla/fenix/tabtray/FenixTabsAdapter.kt index 23a08374a..1610ffd91 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/FenixTabsAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/FenixTabsAdapter.kt @@ -6,6 +6,7 @@ package org.mozilla.fenix.tabtray import android.content.Context import android.view.LayoutInflater +import mozilla.components.browser.tabstray.TabViewHolder import mozilla.components.browser.tabstray.TabsAdapter import mozilla.components.concept.tabstray.Tabs import mozilla.components.support.images.loader.ImageLoader @@ -26,9 +27,17 @@ class FenixTabsAdapter( } ) { var onTabsUpdated: (() -> Unit)? = null + var tabCount = 0 override fun updateTabs(tabs: Tabs) { super.updateTabs(tabs) onTabsUpdated?.invoke() + tabCount = tabs.list.size + } + + override fun onBindViewHolder(holder: TabViewHolder, position: Int) { + super.onBindViewHolder(holder, position) + val newIndex = tabCount - position - 1 + (holder as TabTrayViewHolder).updateAccessibilityRowIndex(holder.itemView, newIndex) } } diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt index 5c5bc09c3..89863db6e 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt @@ -117,6 +117,9 @@ class TabTrayView( TabsTouchHelper(tray.tabsAdapter).attachToRecyclerView(tray) (tray.tabsAdapter as? FenixTabsAdapter)?.also { adapter -> adapter.onTabsUpdated = { + if (hasAccessibilityEnabled) { + adapter.notifyDataSetChanged() + } if (!hasLoaded) { hasLoaded = true tray.layoutManager?.scrollToPosition(selectedBrowserTabIndex) diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayViewHolder.kt b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayViewHolder.kt index 2e4e5b770..697c0d423 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayViewHolder.kt @@ -5,6 +5,7 @@ package org.mozilla.fenix.tabtray import android.view.View +import android.view.accessibility.AccessibilityNodeInfo import android.widget.ImageButton import android.widget.TextView import androidx.annotation.VisibleForTesting @@ -176,6 +177,28 @@ class TabTrayViewHolder( closeView.context.getString(R.string.close_tab_title, title) } + internal fun updateAccessibilityRowIndex(item: View, newIndex: Int) { + item.setAccessibilityDelegate(object : View.AccessibilityDelegate() { + override fun onInitializeAccessibilityNodeInfo( + host: View?, + info: AccessibilityNodeInfo? + ) { + super.onInitializeAccessibilityNodeInfo(host, info) + info?.let { + val initialInfo = info.collectionItemInfo + info.collectionItemInfo = AccessibilityNodeInfo.CollectionItemInfo.obtain( + newIndex, + initialInfo.rowSpan, + initialInfo.columnIndex, + initialInfo.columnSpan, + false, + initialInfo.isSelected + ) + } + } + }) + } + companion object { private const val PLAY_PAUSE_BUTTON_EXTRA_DPS = 24 }