Skip to content

Commit

Permalink
[MaterialButtonToggleGroup] Do not update the checked state of any ch…
Browse files Browse the repository at this point in the history
…ild buttons during onPressedChanged callback.

Resolves #1365

PiperOrigin-RevId: 314798502
(cherry picked from commit 15c048c)
  • Loading branch information
wcshi authored and hunterstich committed Jul 15, 2020
1 parent f5708f7 commit ed66710
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 2 deletions.
Expand Up @@ -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;
Expand All @@ -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(
Expand All @@ -54,6 +56,20 @@ public View onCreateDemoView(
}
});

List<MaterialButtonToggleGroup> 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;
}

Expand Down
Expand Up @@ -818,7 +818,6 @@ private class PressedStateTracker implements OnPressedChangeListener {

@Override
public void onPressedChanged(@NonNull MaterialButton button, boolean isPressed) {
updateCheckedStates(button.getId(), button.isChecked());
invalidate();
}
}
Expand Down
Expand Up @@ -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);
}
}

0 comments on commit ed66710

Please sign in to comment.