package net.basilwang;
import net.basilwang.dao.ArrayWheelAdapter;
import net.basilwang.dao.NumericWheelAdapter;
import net.basilwang.entity.Curriculum;
import net.basilwang.listener.OnWheelChangedListener;
import net.basilwang.ui.widget.WheelView;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class EditCurriculumFragment extends Fragment {
private Curriculum curriculum;
private EditText className;
private EditText teacherName;
private TextView semesterPeriod;
private RadioGroup intervaltype;
private RelativeLayout classTime;
private TextView classWeekTime;
private TextView classNumTime;
private EditText classLocation;
private LinearLayout timePicker;
private LinearLayout weekPicker;
private final String[] weekDays = { "周一", "周二", "周三", "周四", "周五", "周六",
"周日" };
private View mView;
private int classStart, classEnd;
private int week_start, week_end;
private WheelView wv_week;
private WheelView wv_start;
private WheelView wv_end;
private WheelView wv_week_start;
private WheelView wv_week_end;
private PickerOnFocusChangeListener pickerOnFocusChange;
public EditCurriculumFragment(Curriculum c) {
this.curriculum = c;
}
public EditCurriculumFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.editcurriculum, container, false);
initView();
initTextView();
initEditText();
closePicker();
return mView;
}
private void initEditText() {
if (pickerOnFocusChange == null) {
pickerOnFocusChange = new PickerOnFocusChangeListener();
}
className = (EditText) mView.findViewById(R.id.classname_edt);
className.setText(getClassname());
className.setOnFocusChangeListener(pickerOnFocusChange);
className.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
timePicker.setVisibility(View.GONE);
weekPicker.setVisibility(View.GONE);
return false;
}
});
teacherName = (EditText) mView.findViewById(R.id.teachername_edt);
teacherName.setText(getTeacherName());
teacherName.setOnFocusChangeListener(pickerOnFocusChange);
classLocation = (EditText) mView.findViewById(R.id.class_location_edt);
classLocation.setText(getClassLocation());
teacherName.setOnFocusChangeListener(pickerOnFocusChange);
}
private void initTextView() {
semesterPeriod = (TextView) mView.findViewById(R.id.week_to_week_edt);
setSemesterPeriodText();
semesterPeriod.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
className.requestFocus();
getInpuMethodManager().hideSoftInputFromWindow(
getActivity().getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
timePicker.setVisibility(View.GONE);
showWeekPicker();
}
});
classWeekTime = (TextView) mView.findViewById(R.id.class_week_tv);
classWeekTime.setText(getDayOfWeek());
classNumTime = (TextView) mView.findViewById(R.id.class_num_tv);
classStart = curriculum.getCurriculumIndex();
classEnd = classStart + curriculum.getTimeSpan() - 1;
setClassNumTime();
}
private InputMethodManager getInpuMethodManager() {
return (InputMethodManager) this.getActivity().getSystemService(
Activity.INPUT_METHOD_SERVICE);
}
private int getWeekStart() {
return Integer.valueOf(curriculum.getSemesterid().split("-")[0]);
}
private int getWeekEnd() {
return Integer.parseInt(curriculum.getSemesterPeriod().split("-")[1]);
}
private void initView() {
timePicker = (LinearLayout) mView.findViewById(R.id.timePicker);
weekPicker = (LinearLayout) mView.findViewById(R.id.weekPicker);
week_start = getWeekStart();
week_end = getWeekEnd();
intervaltype = (RadioGroup) mView.findViewById(R.id.intervaltype);
intervaltype.check(getCheckedRadio());
classTime = (RelativeLayout) mView.findViewById(R.id.class_time);
classTime.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
className.requestFocus();
getInpuMethodManager().hideSoftInputFromWindow(
getActivity().getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
weekPicker.setVisibility(View.GONE);
showTimePicker();
Log.v("classTime", "" + classTime.hasFocus());
Log.v("className", "" + className.hasFocus());
}
});
}
private void showTimePicker() {
initTimePickerDate();
timePicker.setVisibility(View.VISIBLE);
}
private void showWeekPicker() {
initWeekPickerDate();
weekPicker.setVisibility(View.VISIBLE);
}
private void closePicker() {
mView.findViewById(R.id.class_time_out).setOnTouchListener(
new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
timePicker.setVisibility(View.GONE);
weekPicker.setVisibility(View.GONE);
return false;
}
});
}
private void initTimePickerDate() {
// 周
wv_week = (WheelView) mView.findViewById(R.id.week);
wv_week.setAdapter(new ArrayWheelAdapter<String>(weekDays));// 设置"周"的显示数据
// wv_year.setCyclic(true);// 可循环滚动
// wv_year.setLabel("年");// 添加文字
// wv_year.setCurrentItem(year - START_YEAR);// 初始化时显示的数据
// 开始节数
wv_start = (WheelView) mView.findViewById(R.id.start);
wv_start.setAdapter(new NumericWheelAdapter(1, 16, "第%d节"));
// wv_start.setCyclic(true);
// wv_month.setLabel("月");
wv_start.setCurrentItem(classStart - 1);
// 结束节树
wv_end = (WheelView) mView.findViewById(R.id.end);
wv_end.setAdapter(new NumericWheelAdapter(1, 16, "到%d节"));
// wv_month.setCyclic(true);
// wv_month.setLabel("月");
wv_end.setCurrentItem(classEnd - 1);
wv_week.TEXT_SIZE = getTextSizeForWheel();
wv_start.TEXT_SIZE = getTextSizeForWheel();
wv_end.TEXT_SIZE = getTextSizeForWheel();
OnWheelChangedListener wheelListener_week = new OnWheelChangedListener() {
@Override
public void onChanged(WheelView wheel, int oldValue, int newValue) {
classWeekTime.setText(weekDays[wv_week.getCurrentItem()]);
}
};
OnWheelChangedListener wheelListener_start = new OnWheelChangedListener() {
@Override
public void onChanged(WheelView wheel, int oldValue, int newValue) {
classStart = wv_start.getCurrentItem() + 1;
if (wv_start.getCurrentItem() >= wv_end.getCurrentItem()) {
wv_end.setCurrentItem(wv_start.getCurrentItem() + 1);
}
setClassNumTime();
}
};
OnWheelChangedListener wheelListener_end = new OnWheelChangedListener() {
@Override
public void onChanged(WheelView wheel, int oldValue, int newValue) {
if (wv_start.getCurrentItem() > wv_end.getCurrentItem()) {
wv_end.setCurrentItem(wv_start.getCurrentItem());
}
classEnd = wv_end.getCurrentItem() + 1;
setClassNumTime();
}
};
wv_week.addChangingListener(wheelListener_week);
wv_start.addChangingListener(wheelListener_start);
wv_end.addChangingListener(wheelListener_end);
}
private void initWeekPickerDate() {
// 开始周
wv_week_start = (WheelView) mView.findViewById(R.id.week_start);
wv_week_start.setAdapter(new NumericWheelAdapter(1, 24, "第%d周"));// 设置"周"的显示数据
// wv_year.setCyclic(true);// 可循环滚动
// wv_year.setLabel("年");// 添加文字
wv_week_start.setCurrentItem(week_start - 1);// 初始化时显示的数据
// 结束周
wv_week_end = (WheelView) mView.findViewById(R.id.week_end);
wv_week_end.setAdapter(new NumericWheelAdapter(1, 24, "到%d周"));
// wv_month.setCyclic(true);
// wv_month.setLabel("月");
wv_week_end.setCurrentItem(week_end - 1);
wv_week_start.TEXT_SIZE = getTextSizeForWheel();
wv_week_end.TEXT_SIZE = getTextSizeForWheel();
OnWheelChangedListener wheelListener_week_start = new OnWheelChangedListener() {
@Override
public void onChanged(WheelView wheel, int oldValue, int newValue) {
week_start = wv_week_start.getCurrentItem() + 1;
if (wv_week_start.getCurrentItem() >= wv_week_end
.getCurrentItem()) {
wv_week_end
.setCurrentItem(wv_week_start.getCurrentItem() + 1);
}
setSemesterPeriodText();
}
};
OnWheelChangedListener wheelListener_week_end = new OnWheelChangedListener() {
@Override
public void onChanged(WheelView wheel, int oldValue, int newValue) {
if (wv_week_start.getCurrentItem() > wv_week_end
.getCurrentItem()) {
wv_week_end.setCurrentItem(wv_week_start.getCurrentItem());
}
week_end = wv_week_end.getCurrentItem() + 1;
setSemesterPeriodText();
}
};
wv_week_start.addChangingListener(wheelListener_week_start);
wv_week_end.addChangingListener(wheelListener_week_end);
}
private void setClassNumTime() {
if (classStart == classEnd)
classNumTime.setText("第" + classEnd + "节");
else
classNumTime.setText(classStart + "-" + classEnd + "节");
}
private void setSemesterPeriodText() {
if (week_start == week_end)
semesterPeriod.setText("第" + week_end + "周");
else
semesterPeriod.setText(week_start + "-" + week_end + "周");
}
private int getCheckedRadio() {
Log.v("selectedClass", curriculum.getIntervalType());
int selectedClass = Integer.parseInt(curriculum.getIntervalType());
switch (selectedClass) {
case 0:
return R.id.both;
case 1:
return R.id.even;
case 2:
return R.id.odd;
default:
break;
}
return 0;
}
private String getDayOfWeek() {
switch (curriculum.getDayOfWeek()) {
case 1:
return "周一";
case 2:
return "周二";
case 3:
return "周三";
case 4:
return "周四";
case 5:
return "周五";
case 6:
return "周六";
case 7:
return "周日";
default:
break;
}
return null;
}
private String[] getRawInfos() {
return curriculum.getRawInfo().split("\\n");
}
private String getClassname() {
return getRawInfos()[0];
}
private String getClassTime() {
return getRawInfos()[1];
}
private String getTeacherName() {
return getRawInfos()[2];
}
private String getClassLocation() {
return getRawInfos()[3];
}
private int getTextSizeForWheel() {
return 30;
}
private class PickerOnFocusChangeListener implements OnFocusChangeListener {
@Override
public void onFocusChange(View v, boolean hasFocus) {
Log.v("className", String.valueOf(className.hasFocus()));
timePicker.setVisibility(View.GONE);
weekPicker.setVisibility(View.GONE);
}
}
}