[fenix] For https://github.com/mozilla-mobile/fenix/issues/16416: Remove save to collection button from tab a11y list.

pull/600/head
mcarare 4 years ago committed by Mihai Adrian Carare
parent a197281092
commit f535d467cc

@ -8,6 +8,7 @@ import android.graphics.Rect
import android.os.Build import android.os.Build
import android.view.TouchDelegate import android.view.TouchDelegate
import android.view.View import android.view.View
import android.view.accessibility.AccessibilityNodeInfo
import androidx.annotation.Dimension import androidx.annotation.Dimension
import androidx.annotation.Dimension.DP import androidx.annotation.Dimension.DP
import androidx.annotation.VisibleForTesting import androidx.annotation.VisibleForTesting
@ -33,6 +34,38 @@ fun View.removeTouchDelegate() {
} }
} }
/**
* Removes a child view from accessibility node info of an accessibility parent view.
* If the child does not exist in the node, calling this has no effect.
*/
fun View.removeChildFromAccessibilityNodeInfo(child: View) {
this.accessibilityDelegate = object : View.AccessibilityDelegate() {
override fun onInitializeAccessibilityNodeInfo(
host: View?,
info: AccessibilityNodeInfo?
) {
super.onInitializeAccessibilityNodeInfo(host, info)
info?.removeChild(child)
}
}
}
/**
* Add a child view to the accessibility node info of a view that becomes it's accessibility parent.
* If the child already exists in the node, calling this has no effect.
*/
fun View.addChildToAccessibilityNodeInfo(child: View) {
this.accessibilityDelegate = object : View.AccessibilityDelegate() {
override fun onInitializeAccessibilityNodeInfo(
host: View?,
info: AccessibilityNodeInfo?
) {
super.onInitializeAccessibilityNodeInfo(host, info)
info?.addChild(child)
}
}
}
/** /**
* Fills a [Rect] with data about a view's location in the screen. * Fills a [Rect] with data about a view's location in the screen.
* *

@ -7,11 +7,14 @@ package org.mozilla.fenix.tabtray
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.accessibility.AccessibilityNodeInfo
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.ext.addChildToAccessibilityNodeInfo
import org.mozilla.fenix.ext.removeChildFromAccessibilityNodeInfo
import org.mozilla.fenix.tabtray.SaveToCollectionsButtonAdapter.Item import org.mozilla.fenix.tabtray.SaveToCollectionsButtonAdapter.Item
import org.mozilla.fenix.tabtray.SaveToCollectionsButtonAdapter.ViewHolder import org.mozilla.fenix.tabtray.SaveToCollectionsButtonAdapter.ViewHolder
@ -34,6 +37,21 @@ class SaveToCollectionsButtonAdapter(
} }
override fun onBindViewHolder(holder: ViewHolder, position: Int, payloads: MutableList<Any>) { override fun onBindViewHolder(holder: ViewHolder, position: Int, payloads: MutableList<Any>) {
// remove button from node info of tabs list for a11y services,and add it to the tab tray node
holder.itemView.accessibilityDelegate = object : View.AccessibilityDelegate() {
override fun onInitializeAccessibilityNodeInfo(
host: View?,
info: AccessibilityNodeInfo?
) {
super.onInitializeAccessibilityNodeInfo(host, info)
info?.collectionItemInfo = null
(holder.itemView.parentForAccessibility as View).apply {
removeChildFromAccessibilityNodeInfo(holder.itemView)
(this.parentForAccessibility as View).addChildToAccessibilityNodeInfo(holder.itemView)
}
}
}
if (payloads.isNullOrEmpty()) { if (payloads.isNullOrEmpty()) {
onBindViewHolder(holder, position) onBindViewHolder(holder, position)
return return

@ -18,7 +18,6 @@ A FrameLayout here is an efficient way of having a views stack while allowing:
android:layout_height="202dp" android:layout_height="202dp"
android:clipChildren="false" android:clipChildren="false"
android:clipToPadding="false" android:clipToPadding="false"
android:importantForAccessibility="no"
android:padding="8dp"> android:padding="8dp">
<com.google.android.material.card.MaterialCardView <com.google.android.material.card.MaterialCardView

Loading…
Cancel
Save