diff --git a/catalog/java/io/material/catalog/button/ButtonToggleGroupDemoFragment.java b/catalog/java/io/material/catalog/button/ButtonToggleGroupDemoFragment.java index 9540dd201bf..3711035d40b 100644 --- a/catalog/java/io/material/catalog/button/ButtonToggleGroupDemoFragment.java +++ b/catalog/java/io/material/catalog/button/ButtonToggleGroupDemoFragment.java @@ -25,6 +25,8 @@ import android.view.View; import android.view.ViewGroup; import com.google.android.material.button.MaterialButtonToggleGroup; +import com.google.android.material.button.MaterialButtonToggleGroup.OnButtonCheckedListener; +import com.google.android.material.snackbar.Snackbar; import com.google.android.material.switchmaterial.SwitchMaterial; import io.material.catalog.feature.DemoFragment; import io.material.catalog.feature.DemoUtils; @@ -42,7 +44,7 @@ public class ButtonToggleGroupDemoFragment extends DemoFragment { public View onCreateDemoView( LayoutInflater layoutInflater, @Nullable ViewGroup viewGroup, @Nullable Bundle bundle) { View view = - layoutInflater.inflate(getButtonToggleGroupContent(), viewGroup, /* attachToRoot= */false); + layoutInflater.inflate(getButtonToggleGroupContent(), viewGroup, /* attachToRoot= */ false); SwitchMaterial requireSelectionToggle = view.findViewById(R.id.switch_toggle); requireSelectionToggle.setOnCheckedChangeListener( @@ -54,6 +56,20 @@ public View onCreateDemoView( } }); + List toggleGroups = + DemoUtils.findViewsWithType(view, MaterialButtonToggleGroup.class); + for (MaterialButtonToggleGroup toggleGroup : toggleGroups) { + toggleGroup.addOnButtonCheckedListener( + new OnButtonCheckedListener() { + @Override + public void onButtonChecked( + MaterialButtonToggleGroup group, int checkedId, boolean isChecked) { + String message = "button" + (isChecked ? " checked" : " unchecked"); + Snackbar.make(view, message, Snackbar.LENGTH_SHORT).show(); + } + }); + } + ; return view; } diff --git a/lib/java/com/google/android/material/button/MaterialButtonToggleGroup.java b/lib/java/com/google/android/material/button/MaterialButtonToggleGroup.java index 44865468733..5b41ae051c4 100644 --- a/lib/java/com/google/android/material/button/MaterialButtonToggleGroup.java +++ b/lib/java/com/google/android/material/button/MaterialButtonToggleGroup.java @@ -818,7 +818,6 @@ private class PressedStateTracker implements OnPressedChangeListener { @Override public void onPressedChanged(@NonNull MaterialButton button, boolean isPressed) { - updateCheckedStates(button.getId(), button.isChecked()); invalidate(); } } diff --git a/lib/javatests/com/google/android/material/button/MaterialButtonToggleGroupTest.java b/lib/javatests/com/google/android/material/button/MaterialButtonToggleGroupTest.java index 2efa24038e4..56d3e82631f 100644 --- a/lib/javatests/com/google/android/material/button/MaterialButtonToggleGroupTest.java +++ b/lib/javatests/com/google/android/material/button/MaterialButtonToggleGroupTest.java @@ -238,4 +238,24 @@ public void onButtonChecked( child.performClick(); assertThat(checkedChangeCallCount).isEqualTo(1); } + + @Test + public void singleSelection_withSelectionRequired_callsListenerOnFirstPressAndClick() { + int id = singleSelection_withSelectedRequired_setup(); + View child = toggleGroup.findViewById(id); + checkedChangeCallCount = 0; + + OnButtonCheckedListener listener = + new OnButtonCheckedListener() { + @Override + public void onButtonChecked( + MaterialButtonToggleGroup group, int checkedId, boolean isChecked) { + checkedChangeCallCount++; + } + }; + toggleGroup.addOnButtonCheckedListener(listener); + child.setPressed(true); + child.performClick(); + assertThat(checkedChangeCallCount).isEqualTo(1); + } }