diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TopSiteViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TopSiteViewHolder.kt index 7f1d9b91e3..8dae733107 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TopSiteViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TopSiteViewHolder.kt @@ -11,6 +11,7 @@ import mozilla.components.feature.top.sites.TopSite import org.mozilla.fenix.R import org.mozilla.fenix.home.sessioncontrol.TopSiteInteractor import org.mozilla.fenix.home.sessioncontrol.viewholders.topsites.TopSitesAdapter +import org.mozilla.fenix.utils.AccessibilityGridLayoutManager class TopSiteViewHolder( view: View, @@ -20,8 +21,12 @@ class TopSiteViewHolder( private val topSitesAdapter = TopSitesAdapter(interactor) init { + val gridLayoutManager = + AccessibilityGridLayoutManager(view.context, SPAN_COUNT) + view.top_sites_list.apply { adapter = topSitesAdapter + layoutManager = gridLayoutManager } } @@ -31,5 +36,6 @@ class TopSiteViewHolder( companion object { const val LAYOUT_ID = R.layout.component_top_sites + const val SPAN_COUNT = 4 } } diff --git a/app/src/main/java/org/mozilla/fenix/utils/AccessibilityGridLayoutManager.kt b/app/src/main/java/org/mozilla/fenix/utils/AccessibilityGridLayoutManager.kt new file mode 100644 index 0000000000..0e8aea0366 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/utils/AccessibilityGridLayoutManager.kt @@ -0,0 +1,32 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.utils + +import android.content.Context +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView + +/** + * A GridLayoutManager that can be used to override methods in Android implementation + * to improve ayy1 or fix a11y issues. + */ +class AccessibilityGridLayoutManager( + context: Context, + spanCount: Int +) : GridLayoutManager( + context, + spanCount +) { + override fun getColumnCountForAccessibility( + recycler: RecyclerView.Recycler, + state: RecyclerView.State + ): Int { + return if (itemCount < spanCount) { + itemCount + } else { + super.getColumnCountForAccessibility(recycler, state) + } + } +} diff --git a/app/src/main/res/layout/component_top_sites.xml b/app/src/main/res/layout/component_top_sites.xml index 41f5a29b7e..74a5bae39c 100644 --- a/app/src/main/res/layout/component_top_sites.xml +++ b/app/src/main/res/layout/component_top_sites.xml @@ -24,7 +24,7 @@ to keep layout_width="match_parent"--> android:clipToPadding="false" android:overScrollMode="never" android:nestedScrollingEnabled="false" - app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" - app:spanCount="4" + tools:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + tools:spanCount="4" tools:listitem="@layout/top_site_item" />