From e56b141dd5e63c4dcba2ed7ad06d30d3ee5c59cd Mon Sep 17 00:00:00 2001 From: marianomartin Date: Thu, 30 Jan 2020 09:19:25 -0500 Subject: [PATCH] [MaterialButtonToggleGroup] SelectionRequired attribute doesn`t enforce checkedButtonId to be a valid id (returns -1) Resolves https://github.com/material-components/material-components-android/issues/956 PiperOrigin-RevId: 292334820 --- .../button/MaterialButtonToggleGroup.java | 1 + .../button/MaterialButtonToggleGroupTest.java | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/lib/java/com/google/android/material/button/MaterialButtonToggleGroup.java b/lib/java/com/google/android/material/button/MaterialButtonToggleGroup.java index 9e43026e6..f38b5648c 100644 --- a/lib/java/com/google/android/material/button/MaterialButtonToggleGroup.java +++ b/lib/java/com/google/android/material/button/MaterialButtonToggleGroup.java @@ -702,6 +702,7 @@ public class MaterialButtonToggleGroup extends LinearLayout { if (selectionRequired && checkedButtonIds.isEmpty()) { // undo deselection setCheckedStateForView(childId, true); + checkedId = childId; return; } diff --git a/lib/javatests/com/google/android/material/button/MaterialButtonToggleGroupTest.java b/lib/javatests/com/google/android/material/button/MaterialButtonToggleGroupTest.java index 8a3f017c2..d08e6b54a 100644 --- a/lib/javatests/com/google/android/material/button/MaterialButtonToggleGroupTest.java +++ b/lib/javatests/com/google/android/material/button/MaterialButtonToggleGroupTest.java @@ -180,4 +180,21 @@ public class MaterialButtonToggleGroupTest { assertThat(((Checkable) first).isChecked()).isTrue(); assertThat(((Checkable) second).isChecked()).isFalse(); } + + + @Test + public void singleSelection_withSelectionRequired_correctCheckedIdWithTwoTaps() { + toggleGroup.setSingleSelection(true); + toggleGroup.setSelectionRequired(true); + + View child = toggleGroup.getChildAt(1); + int id = ViewCompat.generateViewId(); + child.setId(id); + + child.performClick(); + child.performClick(); + + // child button is selected + assertThat(toggleGroup.getCheckedButtonId()).isEqualTo(id); + } }