Skip to content

Commit

Permalink
[NavigationDrawer] Do not count headers for accessibility
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 540975970
  • Loading branch information
paulfthomas authored and raajkumars committed Jun 26, 2023
1 parent 52b7ff2 commit 917da52
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 22 deletions.
Expand Up @@ -132,6 +132,8 @@ public MenuView getMenuView(ViewGroup root) {
headerLayout =
(LinearLayout)
layoutInflater.inflate(R.layout.design_navigation_item_header, menuView, false);
ViewCompat.setImportantForAccessibility(
headerLayout, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO);
menuView.setAdapter(adapter);
}
return menuView;
Expand Down Expand Up @@ -247,7 +249,7 @@ public void addHeaderView(@NonNull View view) {

public void removeHeaderView(@NonNull View view) {
headerLayout.removeView(view);
if (headerLayout.getChildCount() == 0) {
if (!hasHeader()) {
menuView.setPadding(0, paddingTopDefault, 0, menuView.getPaddingBottom());
}
}
Expand All @@ -256,6 +258,10 @@ public int getHeaderCount() {
return headerLayout.getChildCount();
}

private boolean hasHeader() {
return getHeaderCount() > 0;
}

public View getHeaderView(int index) {
return headerLayout.getChildAt(index);
}
Expand Down Expand Up @@ -422,7 +428,7 @@ public boolean isBehindStatusBar() {
private void updateTopPadding() {
int topPadding = 0;
// Set padding if there's no header and we are drawing behind the status bar.
if (headerLayout.getChildCount() == 0 && isBehindStatusBar) {
if (!hasHeader() && isBehindStatusBar) {
topPadding = paddingTopDefault;
}

Expand Down Expand Up @@ -633,11 +639,6 @@ public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
item.getPaddingBottom());
break;
}
case VIEW_TYPE_HEADER:
{
setAccessibilityDelegate(holder.itemView, position, true);
break;
}
}
}

Expand All @@ -653,7 +654,7 @@ public void onInitializeAccessibilityNodeInfo(
CollectionItemInfoCompat.obtain(
/* rowIndex= */ adjustItemPositionForA11yDelegate(position),
/* rowSpan= */ 1,
/* columnIndex =*/ 1,
/* columnIndex= */ 1,
/* columnSpan= */ 1,
/* heading= */ isHeader,
/* selected= */ host.isSelected()));
Expand All @@ -665,13 +666,11 @@ public void onInitializeAccessibilityNodeInfo(
private int adjustItemPositionForA11yDelegate(int position) {
int adjustedPosition = position;
for (int i = 0; i < position; i++) {
if (adapter.getItemViewType(i) == VIEW_TYPE_SEPARATOR) {
if (adapter.getItemViewType(i) == VIEW_TYPE_SEPARATOR
|| adapter.getItemViewType(i) == VIEW_TYPE_HEADER) {
adjustedPosition--;
}
}
if (headerLayout.getChildCount() == 0) { // no header
adjustedPosition--;
}
return adjustedPosition;
}

Expand Down Expand Up @@ -855,7 +854,7 @@ public void setUpdateSuspended(boolean updateSuspended) {

/** Returns the number of rows that will be used for accessibility. */
int getRowCount() {
int itemCount = headerLayout.getChildCount() == 0 ? 0 : 1;
int itemCount = 0;
for (int i = 0; i < adapter.getItemCount(); i++) {
int type = adapter.getItemViewType(i);
if (type == VIEW_TYPE_NORMAL || type == VIEW_TYPE_SUBHEADER) {
Expand Down
Expand Up @@ -56,6 +56,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
Expand Down Expand Up @@ -749,20 +750,25 @@ public void testAccessibility() throws Throwable {
ViewCompat.onInitializeAccessibilityNodeInfo(navigationMenuView, nodeInfo);

CollectionInfoCompat collectionInfo = nodeInfo.getCollectionInfo();
assertEquals(8, collectionInfo.getRowCount());
assertEquals(7, collectionInfo.getRowCount());
assertEquals(1, collectionInfo.getColumnCount());

activityTestRule.runOnUiThread(
() -> {
verifyItemInfo(navigationMenuView.getChildAt(0), 0, true);
verifyItemInfo(navigationMenuView.getChildAt(1), 1, false);
verifyItemInfo(navigationMenuView.getChildAt(2), 2, false);
verifyItemInfo(navigationMenuView.getChildAt(3), 3, false);
verifyItemInfo(navigationMenuView.getChildAt(4), 4, false);
AccessibilityNodeInfoCompat headerNodeInfo = AccessibilityNodeInfoCompat.obtain();
ViewCompat.onInitializeAccessibilityNodeInfo(
navigationMenuView.getChildAt(0), headerNodeInfo);
CollectionItemInfoCompat headerCollectionItemInfo =
headerNodeInfo.getCollectionItemInfo();
assertNull(headerCollectionItemInfo);
verifyItemInfo(navigationMenuView.getChildAt(1), 0, false);
verifyItemInfo(navigationMenuView.getChildAt(2), 1, false);
verifyItemInfo(navigationMenuView.getChildAt(3), 2, false);
verifyItemInfo(navigationMenuView.getChildAt(4), 3, false);
// index 5 = separator
verifyItemInfo(navigationMenuView.getChildAt(6), 5, true);
verifyItemInfo(navigationMenuView.getChildAt(7), 6, false);
verifyItemInfo(navigationMenuView.getChildAt(8), 7, false);
verifyItemInfo(navigationMenuView.getChildAt(6), 4, true);
verifyItemInfo(navigationMenuView.getChildAt(7), 5, false);
verifyItemInfo(navigationMenuView.getChildAt(8), 6, false);
});
}

Expand Down

0 comments on commit 917da52

Please sign in to comment.