package com.brady.jlulife.Fragments;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.GridView;
import android.widget.RelativeLayout;
import com.brady.jlulife.Activities.EditCourseActivity;
import com.brady.jlulife.Activities.SlidingMenuMainActivity;
import com.brady.jlulife.Entities.CourseSpec;
import com.brady.jlulife.Models.db.DBManager;
import com.brady.jlulife.MyHorizontalScrollView;
import com.brady.jlulife.MyVerticalScrollView;
import com.brady.jlulife.OnScrollListener;
import com.brady.jlulife.R;
import com.brady.jlulife.Utils.Utils;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* A simple {@link Fragment} subclass.
*/
public class CourseListFragment extends BaseFragment {
private RelativeLayout mCourseContent;
private DBManager dbManager;
private Context mContext;
private MyHorizontalScrollView horizontalScrollView;
private MyVerticalScrollView scrollView;
private float x_tmp1;
private float x_tmp2;
private static CourseListFragment mfragment;
GridView head;
GridView courseNum;
public CourseListFragment() {
mfragment = this;
}
public static CourseListFragment getInstance() {
if (mfragment == null)
mfragment = new CourseListFragment();
return mfragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_course_list, container, false);
initBaseComponents(view);
refreshClassView(view);
return view;
}
@Override
public void onViewCreated(final View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mContext = getActivity().getApplicationContext();
// initActionBar();
}
private void refreshClassView(View view){
dbManager = new DBManager(getActivity());
long currentWeek = getCurrentWeek();
showCourses(currentWeek);
initScrollMethod(view);
getActivity().invalidateOptionsMenu();
getActivity().getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL);
setTitle("我的课表");
}
private void initScrollMethod(final View view) {
horizontalScrollView = (MyHorizontalScrollView) view.findViewById(R.id.horizon_scrollview);
scrollView = (MyVerticalScrollView) view.findViewById(R.id.scrollview);
horizontalScrollView.setOnScrollListener(new OnScrollListener() {
@Override
public void OnScrollChanged(int x, int y, int oldx, int oldy) {
head.scrollTo(x, 0);
}
});
scrollView.setOnScrollListener(new OnScrollListener() {
@Override
public void OnScrollChanged(int x, int y, int oldx, int oldy) {
courseNum.scrollTo(0, y);
}
});
horizontalScrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//获取当前坐标
float x = event.getRawX();
float y = event.getRawY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
x_tmp1 = x;
break;
}
case MotionEvent.ACTION_UP: {
x_tmp2 = x;
if (((x_tmp1 - x_tmp2) < 8) && horizontalScrollView.getScrollX() == 0) {
((SlidingMenuMainActivity) getActivity()).getMenu().showMenu();
}
break;
}
}
return false;
}
});
courseNum.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
}
@Override
public void onResume() {
refreshClassView(getView());
super.onResume();
}
private long getCurrentWeek() {
SharedPreferences sf = getActivity().getSharedPreferences("com.brady.jlulife_preferences",Context.MODE_PRIVATE);
String week = sf.getString("currentweek", "");
if(week.equals("")) {
SharedPreferences.Editor editor = sf.edit();
editor.putString("currentweek","第1周");
editor.putLong("savedtime", Utils.getFirstDayOfWeek(new Date()).getTime());
editor.commit();
return 1;
}
String regEx="[^0-9]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(week);
int savedWeek = Integer.parseInt(m.replaceAll("").trim());
long savedDate = sf.getLong("savedtime", 0);
long numOfDay = (new Date().getTime()-savedDate)/86400000;
long weekPassed = (numOfDay/7);
if(savedDate==0||savedWeek==0)
return 1;
else
return savedWeek+weekPassed;
}
private void initBaseComponents(View view) {
head = (GridView) view.findViewById(R.id.gridWeek);
String[] weeks = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"};
ArrayAdapter<String> headAdap = new ArrayAdapter<String>(getActivity(),
R.layout.weekstyle, weeks);
head.setAdapter(headAdap);
// 第几节课
courseNum = (GridView) view.findViewById(R.id.gridCourseNum);
String[] courseNums = {"1", "2", "3", "4", "5", "6", "7", "8", "9",
"10", "11"};
ArrayAdapter<String> leftAdap = new ArrayAdapter<String>(getActivity(),
R.layout.coursenumstyle, courseNums);
courseNum.setAdapter(leftAdap);
mCourseContent = (RelativeLayout) view.findViewById(R.id.relativeCourseContent);
// addCourse(new CourseSpec("毛概","f9","张三",3,3,4,1,8,false));
}
private void addCourse(final CourseSpec spec) {
int leftMargin = 0;
int topMargin = 0;
int courseLength = 0;
int courseWidth = (int) (getResources()
.getDimension(R.dimen.course_week_item_width));
// 一节课的高度
int courseHeight = (int) (getResources()
.getDimension(R.dimen.course_num_item_height));
// week的高度
int week_item_height = (int) (getResources()
.getDimension(R.dimen.course_week_height));
// courseNum的宽度
int courseNum_width = (int) (getResources()
.getDimension(R.dimen.course_num_width));
// 行(列)间距
final int spacing = (int) (getResources().getDimension(R.dimen.spacing));
// 算出左边距=左边有几节课*(课程宽度+1px的间隔)+左侧编号宽度
leftMargin = (spec.getWeek() - 1) * (courseWidth + spacing) + courseNum_width;
// 上边距=上边有几节课*(课程高度+1px的间隔)+顶部星期的宽度
topMargin = (spec.getStartTime() - 1) * (courseHeight + spacing)
+ week_item_height;
// 课程长度=课程节数*(课程高度+1px的间隔)-1个像素
courseLength = (spec.getEndTime() - spec.getStartTime() + 1)
* (courseHeight + spacing) - spacing;
RelativeLayout.LayoutParams marginParams = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
marginParams.setMargins(leftMargin, topMargin, 0, 0);
marginParams.width = courseWidth;
marginParams.height = courseLength;
Button course = new Button(getActivity());
course.setLayoutParams(marginParams);
course.setGravity(Gravity.CENTER);
int courseId = spec.getCourseId();
if(courseId == 0) {
course.setBackgroundColor(getCourseBackground(spec.getId()));
}
else {
course.setBackgroundColor(getCourseBackground(courseId));
}
course.setPadding(8, 5, 8, 5);
course.setText(spec.toString());
course.setTextSize(getResources().getDimension(R.dimen.coursespec_font_size));
course.setTextColor(Color.WHITE);
course.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), EditCourseActivity.class);
intent.putExtra(EditCourseActivity.EXTRA_COURSEID,spec.getId());
startActivity(intent);
}
});
mCourseContent.addView(course);
}
public void showCourses(long currentWeek) {
mCourseContent.removeAllViews();
List<CourseSpec> courseSpecs = dbManager.queryAllCourses();
for (CourseSpec spec : courseSpecs) {
if ((currentWeek >= spec.getBeginWeek() && currentWeek <= spec.getEndWeek()) || (spec.getBeginWeek() == 0 && spec.getEndWeek() == 0)) {
if ((spec.getIsDoubleWeek() == 1 && currentWeek % 2 == 1) || (spec.getIsSingleWeek() == 1 && currentWeek % 2 == 0))
continue;
addCourse(spec);
}
}
}
private int getCourseBackground(int courseId) {
int backId = courseId % 7;
int result = getResources().getColor(R.color.class_value_1);
switch (backId) {
case 0: {
result = getResources().getColor(R.color.class_value_1);
break;
}
case 1: {
result = getResources().getColor(R.color.class_value_2);
break;
}
case 2: {
result = getResources().getColor(R.color.class_value_3);
break;
}
case 3: {
result = getResources().getColor(R.color.class_value_4);
break;
}
case 4: {
result = getResources().getColor(R.color.class_value_5);
break;
}
case 5: {
result = getResources().getColor(R.color.class_value_6);
break;
}
case 6: {
result = getResources().getColor(R.color.class_value_7);
break;
}
case 7: {
result = getResources().getColor(R.color.class_value_8);
break;
}
case 8: {
result = getResources().getColor(R.color.class_value_9);
break;
}
}
return result;
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
MenuItem item= menu.findItem(R.id.action_week);
item.setTitle("第"+getCurrentWeek()+"周");
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
getActivity().getMenuInflater().inflate(R.menu.menu_course, menu);
}
}