package carbon.widget; import android.annotation.TargetApi; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.os.Build; import android.util.AttributeSet; import android.view.View; import carbon.R; public class Chip extends LinearLayout { private ImageView icon; private TextView title; private ImageView close; private OnRemoveListener onRemoveListener; public interface OnRemoveListener { void onDismiss(); } public Chip(Context context) { super(context, null, R.attr.carbon_chipStyle); initChip(null, R.attr.carbon_chipStyle); } public Chip(Context context, AttributeSet attrs) { super(context, attrs, R.attr.carbon_chipStyle); initChip(attrs, R.attr.carbon_chipStyle); } public Chip(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initChip(attrs, defStyleAttr); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public Chip(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); initChip(attrs, defStyleAttr); } private void initChip(AttributeSet attrs, int defStyleAttr) { inflate(getContext(), R.layout.carbon_chip, this); title = (TextView) findViewById(R.id.carbon_chipText); icon = (ImageView) findViewById(R.id.carbon_chipIcon); close = (ImageView) findViewById(R.id.carbon_chipClose); close.setOnClickListener(v -> { if (onRemoveListener != null) onRemoveListener.onDismiss(); }); TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.Chip, defStyleAttr, R.style.carbon_Chip); setCornerRadius(a.getDimension(R.styleable.Chip_carbon_cornerRadius, 0)); // this shouldn't be necessary setText(a.getString(R.styleable.Chip_android_text)); int iconRes = a.getResourceId(R.styleable.Chip_carbon_icon, 0); if (iconRes != 0) { setIcon(iconRes); } else { setIconVisible(false); } int color = a.getColor(R.styleable.Chip_android_background, 0); setBackgroundColor(color); a.recycle(); } public void setText(String text) { if (text != null) { title.setText(text); title.setVisibility(View.VISIBLE); } else { title.setVisibility(View.GONE); } } public void setText(int resId) { setText(getResources().getString(resId)); } public String getText() { return (String) title.getText(); } public View getTitleView() { return title; } public void setIcon(int iconRes) { icon.setImageResource(iconRes); setIconVisible(iconRes != 0); } public void setIcon(Drawable drawable) { icon.setImageDrawable(drawable); setIconVisible(drawable != null); } public void setIcon(Bitmap bitmap) { icon.setImageBitmap(bitmap); setIconVisible(bitmap != null); } public Drawable getIcon() { return icon.getDrawable(); } public View getIconView() { return icon; } public void setIconVisible(boolean visible) { icon.setVisibility(visible ? VISIBLE : GONE); setPadding(visible ? 0 : (int) getResources().getDimension(R.dimen.carbon_chipPadding), getPaddingTop(), getPaddingRight(), getPaddingBottom()); } public void setRemovable(boolean removable) { close.setVisibility(removable ? VISIBLE : GONE); setPadding(getPaddingLeft(), getPaddingTop(), removable ? 0 : (int) getResources().getDimension(R.dimen.carbon_chipPadding), getPaddingBottom()); } public boolean isRemovable() { return close.getVisibility() == VISIBLE; } public void setOnRemoveListener(OnRemoveListener onRemoveListener) { this.onRemoveListener = onRemoveListener; } }