package androidx.cardview.widget; import android.annotation.TargetApi; import android.content.Context; import android.content.res.ColorStateList; import android.view.View; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.appcompat.widget.ToggleGroupDelegate; import androidx.appcompat.widget.ToggleGroupImpl; @RequiresApi(21) @TargetApi(21) public class ToggleGroupApi21 implements ToggleGroupImpl { @Override public void initialize(ToggleGroupDelegate groupView, Context context, ColorStateList backgroundColor, float radius, float elevation, float maxElevation) { final RoundRectDrawable background = new RoundRectDrawable(backgroundColor, radius); groupView.setGroupBackground(background); View view = groupView.getToggleGroup(); view.setClipToOutline(true); view.setElevation(elevation); setMaxElevation(groupView, maxElevation); } @Override public void setRadius(ToggleGroupDelegate groupView, float radius) { getCardBackground(groupView).setRadius(radius); } @Override public void initStatic() { } @Override public void setMaxElevation(ToggleGroupDelegate groupView, float maxElevation) { getCardBackground(groupView).setPadding(maxElevation, groupView.getUseCompatPadding(), groupView.getPreventCornerOverlap()); updatePadding(groupView); } @Override public float getMaxElevation(ToggleGroupDelegate groupView) { return getCardBackground(groupView).getPadding(); } @Override public float getMinWidth(ToggleGroupDelegate groupView) { return getRadius(groupView) * 2; } @Override public float getMinHeight(ToggleGroupDelegate groupView) { return getRadius(groupView) * 2; } @Override public float getRadius(ToggleGroupDelegate groupView) { return getCardBackground(groupView).getRadius(); } @Override public void setElevation(ToggleGroupDelegate groupView, float elevation) { groupView.getToggleGroup().setElevation(elevation); } @Override public float getElevation(ToggleGroupDelegate groupView) { return groupView.getToggleGroup().getElevation(); } @Override public void updatePadding(ToggleGroupDelegate groupView) { if (!groupView.getUseCompatPadding()) { groupView.setShadowPadding(0, 0, 0, 0); return; } float elevation = getMaxElevation(groupView); final float radius = getRadius(groupView); int hPadding = (int) Math.ceil(RoundRectDrawableWithShadow .calculateHorizontalPadding(elevation, radius, groupView.getPreventCornerOverlap())); int vPadding = (int) Math.ceil(RoundRectDrawableWithShadow .calculateVerticalPadding(elevation, radius, groupView.getPreventCornerOverlap())); groupView.setShadowPadding(hPadding, vPadding, hPadding, vPadding); } @Override public void onCompatPaddingChanged(ToggleGroupDelegate groupView) { setMaxElevation(groupView, getMaxElevation(groupView)); } @Override public void onPreventCornerOverlapChanged(ToggleGroupDelegate groupView) { setMaxElevation(groupView, getMaxElevation(groupView)); } @Override public void setBackgroundColor(ToggleGroupDelegate groupView, @Nullable ColorStateList color) { getCardBackground(groupView).setColor(color); } @Override public ColorStateList getBackgroundColor(ToggleGroupDelegate groupView) { return getCardBackground(groupView).getColor(); } private RoundRectDrawable getCardBackground(ToggleGroupDelegate groupView) { return ((RoundRectDrawable) groupView.getGroupBackground()); } }