package zenproject.meditation.android.ui.menu.dialogs.brush.color; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.LinearLayout; import com.novoda.notils.caster.Views; import de.hdodenhof.circleimageview.CircleImageView; import zenproject.meditation.android.ContextRetriever; import zenproject.meditation.android.R; import zenproject.meditation.android.preferences.BrushOptionsPreferences; import zenproject.meditation.android.sketch.painting.ink.BrushColor; import zenproject.meditation.android.ui.menu.dialogs.brush.ColorSelectedListener; @SuppressWarnings("PMD.TooManyMethods") public class ColorListView extends LinearLayout { private static final int UNSELECTED_BORDER_SIZE = ContextRetriever.INSTANCE.getResources().getDimensionPixelSize(R.dimen.divider_weight); private static final int SELECTED_BORDER_SIZE = ContextRetriever.INSTANCE.getResources().getDimensionPixelSize(R.dimen.color_selected_weight); private static final int DIVIDER = ContextRetriever.INSTANCE.getResources().getColor(R.color.divider); private CircleImageView darkColor; private CircleImageView amberColor; private CircleImageView eraseColor; private CircleImageView primaryColor; private CircleImageView accentColor; private ColorSelectedListener colorSelectedListener; public ColorListView(Context context) { super(context); } public ColorListView(Context context, AttributeSet attrs) { super(context, attrs); } public ColorListView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onFinishInflate() { darkColor = Views.findById(this, R.id.dark_brush); amberColor = Views.findById(this, R.id.amber_brush); eraseColor = Views.findById(this, R.id.erase_brush); primaryColor = Views.findById(this, R.id.primary_brush); accentColor = Views.findById(this, R.id.accent_brush); setSelectedFrom(BrushOptionsPreferences.newInstance().getBrushColor()); } private boolean hasColorSelectedListener() { return colorSelectedListener != null; } public void setColorSelectedListener(ColorSelectedListener colorSelectedListener) { this.colorSelectedListener = colorSelectedListener; } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); darkColor.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { setSelected((CircleImageView) v); notifyColorSelected(BrushColor.DARK); } }); amberColor.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { setSelected((CircleImageView) v); notifyColorSelected(BrushColor.AMBER); } }); eraseColor.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { setSelected((CircleImageView) v); notifyColorSelected(BrushColor.ERASE); } }); primaryColor.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { setSelected((CircleImageView) v); notifyColorSelected(BrushColor.PRIMARY); } }); accentColor.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { setSelectedWithColor((CircleImageView) v, BrushColor.PRIMARY.toAndroidColor()); notifyColorSelected(BrushColor.ACCENT); } }); } private void setSelectedFrom(BrushColor brushColor) { if (BrushColor.DARK == brushColor) { setSelected(darkColor); } else if (BrushColor.AMBER == brushColor) { setSelected(amberColor); } else if (BrushColor.ERASE == brushColor) { setSelected(eraseColor); } else if (BrushColor.PRIMARY == brushColor) { setSelected(primaryColor); } else if (BrushColor.ACCENT == brushColor) { setSelectedWithColor(accentColor, BrushColor.PRIMARY.toAndroidColor()); } } private void setSelected(CircleImageView circleImageView) { deselectAll(); circleImageView.setBorderColor(BrushColor.ACCENT.toAndroidColor()); circleImageView.setBorderWidth(SELECTED_BORDER_SIZE); } private void setSelectedWithColor(CircleImageView circleImageView, int color) { deselectAll(); circleImageView.setBorderColor(color); circleImageView.setBorderWidth(SELECTED_BORDER_SIZE); } private void deselectAll() { darkColor.setBorderColor(DIVIDER); amberColor.setBorderColor(DIVIDER); eraseColor.setBorderColor(DIVIDER); primaryColor.setBorderColor(DIVIDER); accentColor.setBorderColor(DIVIDER); darkColor.setBorderWidth(UNSELECTED_BORDER_SIZE); amberColor.setBorderWidth(UNSELECTED_BORDER_SIZE); eraseColor.setBorderWidth(UNSELECTED_BORDER_SIZE); primaryColor.setBorderWidth(UNSELECTED_BORDER_SIZE); accentColor.setBorderWidth(UNSELECTED_BORDER_SIZE); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); darkColor.setOnClickListener(null); amberColor.setOnClickListener(null); eraseColor.setOnClickListener(null); primaryColor.setOnClickListener(null); accentColor.setOnClickListener(null); } private void notifyColorSelected(BrushColor color) { if (hasColorSelectedListener()) { colorSelectedListener.onColorSelected(color); } } }