package kz.virtex.htc.tweaker.preference; import java.util.ArrayList; import com.htc.preference.HtcDialogPreference; import com.htc.widget.HtcCheckBox; import kz.virtex.htc.tweaker.Main; import kz.virtex.htc.tweaker.Misc; import kz.virtex.htc.tweaker.R; import kz.virtex.htc.tweaker.interfaces.CheckboxPreferenceView; import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; import android.content.res.TypedArray; import android.graphics.Typeface; import android.util.AttributeSet; import android.util.TypedValue; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; public class MultiCheckPreference extends HtcDialogPreference implements CheckboxPreferenceView.OnCheckListener { public CharSequence[] titles; public CharSequence[] keys; public CharSequence[] summs; public String mKey; public ArrayList<Row> rows; public SharedPreferences prefs; public boolean useAtLeastOne = true; public MultiCheckPreference(Context paramContext, AttributeSet paramAttributeSet) { super(paramContext, paramAttributeSet); prefs = Main.preferences; mKey = paramAttributeSet.getAttributeValue("http://schemas.android.com/apk/res/android", "key"); TypedArray a = paramContext.obtainStyledAttributes(paramAttributeSet, R.styleable.MultiCheckbox); titles = a.getTextArray(R.styleable.MultiCheckbox_entryTitles); keys = a.getTextArray(R.styleable.MultiCheckbox_entryKeys); summs = a.getTextArray(R.styleable.MultiCheckbox_entrySummaries); if (summs == null) { summs = new CharSequence[titles.length]; } a.recycle(); rows = new ArrayList<Row>(); for (int i = 0; i < titles.length; i++) { rows.add(new Row(titles[i], summs[i], keys[i])); } } public void setAllChecked() { for (int i = 0; i < rows.size(); i++) { rows.get(i).setState(true); } callChangeListener(rows); } public void setAllUnChecked() { for (int i = 0; i < rows.size(); i++) { rows.get(i).setState(false); } callChangeListener(rows); } public void setChecked(int i) { rows.get(i).setState(true); callChangeListener(rows); } public void unsetMinimum() { useAtLeastOne = false; } public void setMinimum() { useAtLeastOne = true; } @Override public void onCheck(String key, HtcCheckBox checkBox) { rows.get(checkBox.getId()).setState(checkBox.isChecked()); if (useAtLeastOne) { if (checkBox.isChecked() == false) { boolean found = false; for (int i = 0; i < rows.size(); i++) { if (rows.get(i).getState() == true) { found = true; } } if (found == false) { rows.get(checkBox.getId()).setState(true); checkBox.setChecked(true); return; } } } } public void onClick(DialogInterface paramDialogInterface, int paramInt) { super.onClick(paramDialogInterface, paramInt); if (paramInt == DialogInterface.BUTTON_POSITIVE) { for (int i = 0; i < rows.size(); i++) { Main.putBoolean(mKey + "_" + rows.get(i).getKey(), rows.get(i).getState()); } } callChangeListener(rows); } protected View onCreateDialogView() { ListView list = new ListView(getContext()); list.setAdapter(new CheckPreferenceAdapter(this, rows)); list.setDividerHeight(2); return list; } public class Row { public String mTitle; public String mSummary; public String mKey; public boolean mState; public Row(CharSequence title, CharSequence summary, CharSequence key) { mTitle = title.toString(); mSummary = summary == null ? null : summary.toString(); mKey = key.toString(); mState = MultiCheckPreference.this.prefs.getBoolean(MultiCheckPreference.this.mKey + "_" + mKey, true); } public String getKey() { return mKey; } public String getSummary() { return mSummary; } public String getTitle() { return mTitle; } public boolean getState() { return mState; } public void setState(boolean state) { mState = state; } } public class CheckPreferenceAdapter extends BaseAdapter { ArrayList<Row> data = new ArrayList<Row>(); Context context; public CheckPreferenceAdapter(MultiCheckPreference multiCheckPreference, ArrayList<Row> paramRow) { if (paramRow != null) { data = paramRow; } this.context = multiCheckPreference.getContext(); } public int getCount() { return data.size(); } public Object getItem(int paramInt) { return data.get(paramInt); } public long getItemId(int paramInt) { return paramInt; } public View getView(int position, View convertView, ViewGroup parent) { CheckboxPreferenceView returnView = new CheckboxPreferenceView(context); returnView.setOnCheckListener(MultiCheckPreference.this); returnView.checkBox.setChecked(data.get(position).mState); returnView.checkBox.setId(position); TextView title = returnView.textTitle; title.setText(data.get(position).mTitle); title.setTypeface(Typeface.create("sans-serif-condensed", Typeface.NORMAL)); if (data.get(position).mSummary != null) { TextView summary = returnView.textSummary; summary.setText(data.get(position).mSummary); summary.setTextSize(TypedValue.COMPLEX_UNIT_SP, Misc.densify(5)); } returnView.key = data.get(position).mKey; return returnView; } } }