package net.basilwang;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import net.basilwang.dao.AccountService;
import net.basilwang.dao.CurriculumService;
import net.basilwang.dao.Preferences;
import net.basilwang.entity.Semester;
import net.basilwang.listener.ActionModeListener;
import net.basilwang.listener.AddSubMenuListener;
import net.basilwang.listener.SendStudentNumListener;
import net.basilwang.listener.ShowTipListener;
import net.basilwang.sever.SendStudentNumberTask;
import net.basilwang.utils.PreferenceUtils;
import net.basilwang.utils.TipUtils;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import br.com.dina.ui.model.BasicItem;
import br.com.dina.ui.model.ViewItem;
import br.com.dina.ui.widget.UITableView;
import br.com.dina.ui.widget.UITableView.ClickListener;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.view.ActionMode;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
public class DownloadCurriculumFragment extends SherlockFragment implements
ActionModeListener, AddSubMenuListener, ShowTipListener,
SendStudentNumListener {
private View downCurriculumView;
private UITableView tableView;
private ActionMode mode;
private String semesterToSelected;
private List<Semester> semesters;
@Override
public void onPause() {
if (mode != null) {
mode.finish();
mode = null;
}
super.onPause();
}
@Override
public void onCreate(Bundle savedInstanceState) {
this.setHasOptionsMenu(true);
super.onCreate(savedInstanceState);
if (new AccountService(getActivity()).getAccounts().size() <= 0) {
Toast.makeText(getActivity(), "请绑定您的学号", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getActivity(),
LogonPreferenceActivity.class);
startActivity(intent);
}
}
@Override
public void onResume() {
refresh();
super.onResume();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
AddSubMenu subMenu = new AddSubMenu(menu, getActivity(), this);
subMenu.setTipPhotoAndPreferKey(R.drawable.curriculumdownload_tip,
Preferences.CURRICULUM_DOWNLOAD_TIP);
subMenu.setSubMenuItemListener(new OnItemSelectedListenerImpl(),
new DownloadOnClickListener(this, "task", "curriculum"));
super.onCreateOptionsMenu(menu, inflater);
}
public int getSpinnerDefaultPosition() {
return -1;
}
public void onActivityResult(int request, int result, Intent intent) {
switch (request) {
default:
refresh();
break;
}
}
private void refresh() {
populateList(tableView, downCurriculumView);
}
private void initView(LayoutInflater inflater, ViewGroup container) {
downCurriculumView = inflater.inflate(
R.layout.download_curriculm_fragment, container, false);
tableView = (UITableView) downCurriculumView
.findViewById(R.id.downloaded_curriculum_view);
}
private List<Semester> getDownloadedSemesters() {
return new CurriculumService(getActivity()).getDownloaedSemesters();
}
private void setSemesterToSelected(List<Semester> semesters) {
semesterToSelected = PreferenceUtils.getPreferSemester(getActivity());
if (semesters.size() == 1) {
semesterToSelected = semesters.get(0).getName();
setPerferSemester();
}
}
public String getSubTitle(Semester semester) {
if (semester.getBeginDate() != 0 && semester.getEndDate() != 0) {
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd ");
String subtitle = getStringBeginDate(dateFormat, semester) + "-"
+ getStringEndDate(dateFormat, semester);
return subtitle;
}
return "";
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
showTipIfNecessary();
initView(inflater, container);
populateList(tableView, downCurriculumView);
return downCurriculumView;
}
private void populateList(UITableView tableView, View parent) {
tableView.clear();
semesters = getDownloadedSemesters();
setSemesterToSelected(semesters);
if (semesters.size() == 0) {
tableView.addBasicItem(new BasicItem(getResources().getString(
R.string.nocurriculum), "", false));
} else {
sendSteudentNum();
}
tableView.setClickListener(new TableViewClickListener());
for (Semester s : semesters) {
CurriculumItem item = new CurriculumItem(s.getName());
if (s.getName().equals(semesterToSelected)) {
item.setSubtitle(getSubTitle(s));
item.setMark();
}
RelativeLayout view = item.getRelativeLayout();
ViewItem viewItem = new ViewItem(view);
tableView.addViewItem(viewItem);
}
tableView.commit();
}
private Date getBeginDate(long beginDate) {
return new Date(beginDate);
}
private Date getEndDate(long endDate) {
return new Date(endDate);
}
private String getStringBeginDate(DateFormat dateFormat, Semester semester) {
return dateFormat.format(getBeginDate(semester.getBeginDate()));
}
private String getStringEndDate(DateFormat dateFormat, Semester semester) {
return dateFormat.format(getEndDate(semester.getEndDate()));
}
/**
* Example:Modify 2009-2010学年第二学期 to 2009-2010|2
*
*
*/
public String convertSemesterFormatBack(String value) {
value = value.replace("第", "|");
value = value.replace("学期", "");
return value;
}
/**
* Example:Modify 2009-2010|2 to 2009-2010学年第二学期
*/
public String ModifySemesterName(String value) {
if (value.equals(""))
return "";
value = value.replace("|", "第");
value += "学期";
return value;
}
public void modeAction() {
String[] titles = { "选中", "编辑" };
if (mode == null) {
mode = this.getSherlockActivity().startActionMode(
new AddActionMode(titles, DownloadCurriculumFragment.this));
}
}
public void onActionItemClickedListener(String title) {
if (title.equals("编辑")) {
Intent intent = new Intent();
intent.setClass(getSherlockActivity(),
EditSemesterBeginAndEndDateActivity.class);
intent.putExtra("semester", semesterToSelected);
startActivity(intent);
} else if (title.equals("选中")) {
setPerferSemester();
refresh();
mode.finish();
}
}
public void setSemesterToShow(String semesterName) {
this.semesterToSelected = semesterName;
}
public void setPerferSemester() {
PreferenceUtils.modifyStringValueInPreferences(getActivity(),
Preferences.CURRICULUM_TO_SHOW, semesterToSelected);
}
public void finishActionMode() {
mode = null;
}
@Override
public void showTipIfNecessary() {
int curriculumTip = PreferenceManager.getDefaultSharedPreferences(
this.getActivity()).getInt(Preferences.CURRICULUM_TIP_SHOW, 0);
if (curriculumTip == 0) {
TipUtils.showTipIfNecessary(this.getActivity(),
R.drawable.curriculumsetting_tip, this);
}
}
@Override
public void dismissTip() {
PreferenceUtils.modifyIntValueInPreferences(getActivity(),
Preferences.CURRICULUM_TIP_SHOW, 1);
}
private class OnItemSelectedListenerImpl implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
String value = parent.getItemAtPosition(position).toString();
value = convertSemesterFormatBack(value);
PreferenceUtils.modifyStringValueInPreferences(getActivity(),
Preferences.CURRICULUM_TO_DOWNLOAD, value);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
}
private class TableViewClickListener implements ClickListener {
@Override
public void onClick(int index) {
String semester = semesters.get(index).getName();
setSemesterToShow(semester);
modeAction();
}
}
private class CurriculumItem {
private TextView title;
private TextView subTitle;
private ImageView mark;
private RelativeLayout v;
private String semester;
public CurriculumItem(String semester) {
initTextViews();
this.semester = semester;
this.title.setText(ModifySemesterName(semester));
}
private void initTextViews() {
LayoutInflater mInflater = (LayoutInflater) getActivity()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = (RelativeLayout) mInflater.inflate(
R.layout.download_curriculum_item, null);
this.title = (TextView) v.findViewById(R.id.item_title);
this.subTitle = (TextView) v.findViewById(R.id.item_subTitle);
}
public void setMark() {
this.mark = (ImageView) v.findViewById(R.id.item_mark);
this.mark.setImageResource(R.drawable.mark);
}
public void setSubtitle(String subTitle) {
this.subTitle.setText(subTitle);
}
public RelativeLayout getRelativeLayout() {
return v;
}
}
@Override
public void sendSteudentNum() {
if (!PreferenceUtils.getPreferHadSendUserNo(getActivity())) {
String token = PreferenceUtils.getPreferToken(getActivity());
String userno = getStudentNum();
SendStudentNumberTask sendTask = new SendStudentNumberTask();
sendTask.execute(token, userno);
PreferenceUtils.modifyBooleanValueInPreferences(getActivity(),
Preferences.HAD_SEND_USERNO, true);
}
}
@Override
public String getStudentNum() {
return new AccountService(getActivity()).getAccountById(
PreferenceUtils.getPreferAccountId(getActivity())).getUserno();
}
}