package ru.shutoff.cgstarter;
import android.content.Context;
import android.content.res.TypedArray;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.RadioGroup;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
public class DaysPreference extends DialogPreference {
int value;
RadioGroup days;
boolean no_clear;
CheckBox[] wd;
public DaysPreference(Context ctxt, AttributeSet attrs) {
super(ctxt, attrs);
setPositiveButtonText(ctxt.getString(R.string.set));
setNegativeButtonText(ctxt.getString(R.string.cancel));
}
@Override
protected View onCreateDialogView() {
LayoutInflater layoutInflater = LayoutInflater.from(getContext());
View view = layoutInflater.inflate(R.layout.days, null);
days = (RadioGroup) view.findViewById(R.id.days);
wd = new CheckBox[7];
String[] names = view.getContext().getResources().getStringArray(R.array.days);
TableLayout table = (TableLayout) view.findViewById(R.id.week_table);
TableRow tr1 = new TableRow(view.getContext());
table.addView(tr1);
TableRow tr2 = new TableRow(view.getContext());
table.addView(tr2);
CheckBox.OnCheckedChangeListener listener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (no_clear)
return;
no_clear = true;
days.check(R.id.weekdays);
no_clear = false;
}
};
for (int i = 0; i < 7; i++) {
wd[i] = new CheckBox(view.getContext());
wd[i].setOnCheckedChangeListener(listener);
tr1.addView(wd[i]);
TextView tv = new TextView(view.getContext());
tv.setText(names[i]);
tr2.addView(tv);
}
days.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if ((checkedId != R.id.weekdays) && !no_clear) {
no_clear = true;
clearDays();
no_clear = false;
}
}
});
return view;
}
@Override
protected void onBindDialogView(View v) {
if (value == 0)
value = State.ALLDAYS;
clearDays();
if ((value & State.ALLDAYS) == State.ALLDAYS) {
days.check(R.id.alldays);
} else if ((value & State.WORKDAYS) == State.WORKDAYS) {
days.check(R.id.workdays);
} else if ((value & State.HOLIDAYS) == State.HOLIDAYS) {
days.check(R.id.holidays);
} else {
days.check(R.id.weekdays);
for (int i = 0; i < 7; i++) {
int m = (1 << (i + 2));
wd[i].setChecked((value & m) == m);
}
}
super.onBindDialogView(v);
}
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if (positiveResult) {
switch (days.getCheckedRadioButtonId()) {
case R.id.alldays:
value = State.ALLDAYS;
break;
case R.id.workdays:
value = State.WORKDAYS;
break;
case R.id.holidays:
value = State.HOLIDAYS;
break;
default:
value = 0;
for (int i = 0; i < 7; i++) {
if (wd[i].isChecked())
value |= (1 << (i + 2));
}
}
if (callChangeListener(value))
persistInt(value);
}
}
@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
return (a.getString(index));
}
@Override
protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
if (restoreValue) {
if (defaultValue == null)
defaultValue = 0;
value = getPersistedInt((Integer) defaultValue);
} else {
value = (Integer) defaultValue;
}
}
void clearDays() {
for (CheckBox b : wd) {
b.setChecked(false);
}
}
static String getSummary(Context context, int value) {
if (value == 0)
value = State.ALLDAYS;
if ((value & State.ALLDAYS) == State.ALLDAYS)
return context.getString(R.string.alldays);
if ((value & State.WORKDAYS) == State.WORKDAYS)
return context.getString(R.string.workdays);
if ((value & State.HOLIDAYS) == State.HOLIDAYS)
return context.getString(R.string.holidays);
String[] days = context.getResources().getStringArray(R.array.days);
String res = null;
for (int i = 0; i < 7; i++) {
int m = (1 << (i + 2));
if ((value & m) == m) {
if (res == null) {
res = days[i];
continue;
}
res += ", " + days[i];
}
}
return res;
}
}