/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.ui.view;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.Checkable;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import com.galaxy.meetup.client.android.R;
/**
*
* @author sihai
*
*/
public abstract class CheckableListItemView extends ViewGroup implements Checkable,
OnCheckedChangeListener {
protected static final StyleSpan sBoldSpan = new StyleSpan(1);
private static Drawable sCheckedStateBackground;
protected static ForegroundColorSpan sColorSpan;
protected CheckBox mCheckBox;
protected boolean mCheckBoxVisible;
protected boolean mChecked;
private OnItemCheckedChangeListener mListener;
public CheckableListItemView(Context context) {
this(context, null);
}
public CheckableListItemView(Context context, AttributeSet attributeset) {
super(context, attributeset);
if(sCheckedStateBackground == null)
{
Resources resources = context.getApplicationContext().getResources();
sCheckedStateBackground = resources.getDrawable(R.drawable.list_selected_holo);
sColorSpan = new ForegroundColorSpan(resources.getColor(R.color.search_query_highlight_color));
}
}
protected void drawBackground(Canvas canvas, Drawable drawable)
{
drawable.setBounds(0, 0, getWidth(), getHeight());
drawable.draw(canvas);
}
public boolean isChecked()
{
boolean flag;
if(mCheckBoxVisible)
flag = mCheckBox.isChecked();
else
flag = mChecked;
return flag;
}
public void onCheckedChanged(CompoundButton compoundbutton, boolean flag) {
mListener.onItemCheckedChanged(this, mCheckBox.isChecked());
}
protected void onDraw(Canvas canvas) {
if(!mCheckBoxVisible && mChecked)
drawBackground(canvas, sCheckedStateBackground);
super.onDraw(canvas);
}
public void setCheckBoxVisible(boolean flag) {
mCheckBoxVisible = flag;
if(!mCheckBoxVisible) {
if(mCheckBox != null)
mCheckBox.setVisibility(8);
} else {
if(mCheckBox == null) {
mCheckBox = new CheckBox(getContext());
mCheckBox.setOnCheckedChangeListener(this);
mCheckBox.setFocusable(false);
addView(mCheckBox);
}
mCheckBox.setVisibility(0);
}
}
public void setChecked(boolean flag) {
if(!mCheckBoxVisible) {
if(flag != mChecked) {
mChecked = flag;
boolean flag1;
if(!flag)
flag1 = true;
else
flag1 = false;
setWillNotDraw(flag1);
invalidate();
}
} else {
mCheckBox.setChecked(flag);
}
}
public void setEnabled(boolean flag)
{
super.setEnabled(flag);
mCheckBox.setEnabled(flag);
}
public void setOnItemCheckedChangeListener(OnItemCheckedChangeListener onitemcheckedchangelistener)
{
mListener = onitemcheckedchangelistener;
}
public void toggle()
{
if(mCheckBoxVisible && mCheckBox.isEnabled())
{
mCheckBox.toggle();
} else
{
boolean flag;
if(!mChecked)
flag = true;
else
flag = false;
mChecked = flag;
}
}
public static interface OnItemCheckedChangeListener {
void onItemCheckedChanged(CheckableListItemView checkablelistitemview, boolean flag);
}
}