From d4c2c9549051d706d91dcd96ceb79c52e1aedd30 Mon Sep 17 00:00:00 2001 From: pfthomas Date: Wed, 11 May 2022 10:53:13 -0400 Subject: [PATCH] [Chip][a11y] Make multi-selection Chips announced as Buttons PiperOrigin-RevId: 447993125 --- lib/java/com/google/android/material/chip/Chip.java | 4 +--- .../google/android/material/chip/ChipGroupTest.java | 13 +++++++++++++ .../com/google/android/material/chip/ChipTest.java | 12 ++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/lib/java/com/google/android/material/chip/Chip.java b/lib/java/com/google/android/material/chip/Chip.java index 8a8b83e02cd..a1e03a08b38 100644 --- a/lib/java/com/google/android/material/chip/Chip.java +++ b/lib/java/com/google/android/material/chip/Chip.java @@ -165,8 +165,6 @@ public class Chip extends AppCompatCheckBox @Nullable private CharSequence accessibilityClassName; private static final String BUTTON_ACCESSIBILITY_CLASS_NAME = "android.widget.Button"; - private static final String COMPOUND_BUTTON_ACCESSIBILITY_CLASS_NAME = - "android.widget.CompoundButton"; private static final String RADIO_BUTTON_ACCESSIBILITY_CLASS_NAME = "android.widget.RadioButton"; private static final String GENERIC_VIEW_ACCESSIBILITY_CLASS_NAME = "android.view.View"; @@ -2335,7 +2333,7 @@ public CharSequence getAccessibilityClassName() { if (parent instanceof ChipGroup && ((ChipGroup) parent).isSingleSelection()) { return RADIO_BUTTON_ACCESSIBILITY_CLASS_NAME; } else { - return COMPOUND_BUTTON_ACCESSIBILITY_CLASS_NAME; + return BUTTON_ACCESSIBILITY_CLASS_NAME; } } else if (isClickable()) { return BUTTON_ACCESSIBILITY_CLASS_NAME; diff --git a/lib/javatests/com/google/android/material/chip/ChipGroupTest.java b/lib/javatests/com/google/android/material/chip/ChipGroupTest.java index a0b43b679d9..031f3ad0c23 100644 --- a/lib/javatests/com/google/android/material/chip/ChipGroupTest.java +++ b/lib/javatests/com/google/android/material/chip/ChipGroupTest.java @@ -260,4 +260,17 @@ public void isNotSingleLine_initializesAccessibilityNodeInfo() { assertEquals(1, itemInfo.getRowIndex()); assertTrue(itemInfo.isSelected()); } + + @Test + public void getChipAccessibilityClassName_multipleChecked_buttonName() { + Chip chip = (Chip) chipgroup.getChildAt(0); + assertEquals("android.widget.Button", chip.getAccessibilityClassName().toString()); + } + + @Test + public void getChipAccessibilityClassName_singleChecked_radioButtonName() { + chipgroup.setSingleSelection(true); + Chip chip = (Chip) chipgroup.getChildAt(0); + assertEquals("android.widget.RadioButton", chip.getAccessibilityClassName().toString()); + } } diff --git a/lib/javatests/com/google/android/material/chip/ChipTest.java b/lib/javatests/com/google/android/material/chip/ChipTest.java index b8fd5765828..97326bd6380 100644 --- a/lib/javatests/com/google/android/material/chip/ChipTest.java +++ b/lib/javatests/com/google/android/material/chip/ChipTest.java @@ -19,6 +19,7 @@ import static com.google.android.material.internal.ViewUtils.dpToPx; import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertEquals; import android.content.Context; import android.graphics.RectF; @@ -225,4 +226,15 @@ public void testZeroChipCornerRadius() { .isWithin(DELTA) .of(0); } + + @Test + public void getChipAccessibilityClassName_clickable_buttonName() { + assertEquals("android.widget.Button", chip.getAccessibilityClassName().toString()); + } + + @Test + public void getChipAccessibilityClassName_nonClickable_viewName() { + chip.setClickable(false); + assertEquals("android.view.View", chip.getAccessibilityClassName().toString()); + } }