package com.bestapp.yikuair.fragments;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TimeZone;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import com.bestapp.yikuair.R;
import com.bestapp.yikuair.utils.CalendarGridViewAdapter;
import com.bestapp.yikuair.utils.MessageInfo;
import com.bestapp.yikuair.utils.SharedPreferencesUtil;
import com.bestapp.yikuair.utils.StringWidthWeightRandom;
import com.bestapp.yikuair.utils.UserInfo;
import com.bestapp.yikuair.utils.Utils;
public class ScheduleFragment extends Fragment {
public static ScheduleFragment instance = null;
private ViewPager mCalPager;
private static ImageView mTabImg1, mTabImg2, mTabImg3, mTabImg4, mTabImg5,
mTabImg6, mTabImg7;
private static LinearLayout ll_default_schedule, schedule_list;
private static TextView today, day;
private static String strToday;
private static int mWay;
private ImageButton rightBtn;
private static Calendar currentCal;
private static String currentDate;
private static ListView listView;
private static ScheduleAdapter lstAdapter;
private static List<ScheduleItemInfo> scheduleList = new ArrayList<ScheduleItemInfo>();
private SharedPreferencesUtil scheduleSharedPre;
private final static String ScheduleSharedPreName = "yikuair_schedule";
private static int num = 0;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.schedule, null);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.i("test", "scheudlefragment onActivityCreated....................");
// TaskListUtil.HttpRequest();// request task list from server
scheduleSharedPre = new SharedPreferencesUtil(getActivity());
getLocalSchedule();
initView();
updateListView(currentDate);
}
public void onStart() {
Log.i("test", "scheudlefragment onstart....................");
if (UserInfo.isHomePressed) {
ClientSocket client = new ClientSocket(getActivity());
UserInfo.isSendBroadCast = false;
UserInfo.isHomePressed = false;
client.sendMessage(null, 0,
StringWidthWeightRandom.getNextString(), null, null, null,
null, null, null, null, null, true);
}
updateSchedule(MessageInfo.scheduleList);
MessageInfo.scheduleList.clear();
super.onStart();
}
public void onResume() {
Log.i("test", "schedulefragment onResume....................");
super.onResume();
}
public void getLocalSchedule() {
MessageInfo.map.clear();
if (scheduleSharedPre.readScheduleFromShared(UserInfo.db_id
+ ScheduleSharedPreName) != null)
MessageInfo.map = scheduleSharedPre
.readScheduleFromShared(UserInfo.db_id
+ ScheduleSharedPreName);
}
public void initView() {
Log.i("test", "scheudlefragment initView().......................");
rightBtn = (ImageButton) getActivity().findViewById(
R.id.schedule_right_btn);
rightBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(getActivity(),
ScheduleAddActivity.class);
// Log.e("test","currentDate :" + currentDate);
intent.putExtra("currentDate", currentDate);
startActivityForResult(intent, 1);
getActivity().overridePendingTransition(R.anim.in_from_right,
R.anim.out_of_left);
}
});
schedule_list = (LinearLayout) getActivity().findViewById(
R.id.ll_schedule_list);
ll_default_schedule = (LinearLayout) getActivity().findViewById(
R.id.ll_default_schedule);
listView = (ListView) getActivity().findViewById(R.id.schedule_list);
lstAdapter = new ScheduleAdapter(getActivity(), scheduleList);
listView.setAdapter(lstAdapter);
mCalPager = (ViewPager) getActivity().findViewById(R.id.cal_viewpager);
today = (TextView) getActivity().findViewById(R.id.schedule_date);
day = (TextView) getActivity().findViewById(R.id.schedule_day);
mTabImg1 = (ImageView) getActivity().findViewById(R.id.img_tab_monday);
mTabImg2 = (ImageView) getActivity().findViewById(R.id.img_tab_tuesday);
mTabImg3 = (ImageView) getActivity().findViewById(
R.id.img_tab_wednesday);
mTabImg4 = (ImageView) getActivity()
.findViewById(R.id.img_tab_thursday);
mTabImg5 = (ImageView) getActivity().findViewById(R.id.img_tab_friday);
mTabImg6 = (ImageView) getActivity()
.findViewById(R.id.img_tab_saturday);
mTabImg7 = (ImageView) getActivity().findViewById(R.id.img_tab_sunday);
today.setText(getCurrentDate());
setTabStatus(Integer.valueOf(getWeek()));
Log.e("test", "today : " + strToday);
currentDate = strToday;
final ScreenSlidePagerAdapter screenSlidePagerAdapter = new ScreenSlidePagerAdapter(
getActivity().getSupportFragmentManager());
mCalPager.setAdapter(screenSlidePagerAdapter);
mCalPager.setCurrentItem(500);
mCalPager.setOnPageChangeListener(new MyOnPageChangeListener());
}
public void updateSchedule(List<ScheduleItemInfo> list) {
Log.i("test", "count:" + list.size());
// Log.i("test", "map.size :" + MessageInfo.map.size());
String btime = strToday;
String etime = strToday;
SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
for (int k = 0; k < list.size(); k++) {
if (list.get(k).getIsDel()) {
// delete item by taskId
Set set = MessageInfo.map.keySet();
Iterator it = set.iterator();
while (it.hasNext()) {
String key = (String) it.next();
List<ScheduleItemInfo> lst = (List<ScheduleItemInfo>) MessageInfo.map
.get(key);
for (int j = 0; j < lst.size(); j++) {
if (lst.get(j).getTaskId() != null
&& lst.get(j).getTaskId()
.equals(list.get(k).getTaskId())) {
MessageInfo.map.get(key).remove(j);
break;
}
}
}
}
}
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getScheduleBeginTime() == null || list.get(i).getScheduleEndTime() == null)
continue;
String[] bStr = list.get(i).getScheduleBeginTime().split(" ");
String[] eStr = list.get(i).getScheduleEndTime().split(" ");
Log.i("test", "bstr :" + list.get(i).getScheduleBeginTime());
Log.i("test", "estr :" + list.get(i).getScheduleEndTime());
int dValue = 0;
if (bStr != null && bStr.length > 1) {
btime = bStr[0];
}
if (eStr != null && eStr.length > 1) {
etime = eStr[0];
}
try {
dValue = compDate(btime, etime);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.i("test", "btime :" + btime);
Log.i("test", "etime :" + etime);
Log.i("test", " dvalue :" + dValue);
String[] tempDate = new String[Math.abs(dValue) + 1];
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(btime, pos);
Calendar cal = Calendar.getInstance();
cal.setTime(strtodate);
int dayCount = Math.abs(dValue) + 1;
for (int l = 0; l < dayCount; l++) {
tempDate[l] = date.format(cal.getTime());
cal.roll(Calendar.DAY_OF_YEAR, true);
}
for (int k = 0; k < dayCount; k++) {
String tempBeginTime = tempDate[k];
Log.i("test", "tempbeginTime :" + tempBeginTime);
if (MessageInfo.map.containsKey(tempBeginTime)) {
if (list.get(i).getIsDel()) {
Log.i("test", "delete........................");
for (int j = 0; j < MessageInfo.map.get(tempBeginTime)
.size(); j++) {
if (MessageInfo.map.get(tempBeginTime).get(j)
.getType() == MessageInfo.TODOITEM)
continue;
Log.i("test", "map.getitemid :"
+ MessageInfo.map.get(tempBeginTime).get(j)
.getItemId());
Log.i("test", "map.gettitle :"
+ MessageInfo.map.get(tempBeginTime).get(j)
.getScheduleContent());
Log.i("test", "list.getitemid :"
+ list.get(i).getItemId());
if (MessageInfo.map.get(tempBeginTime).get(j)
.getItemId()
.equals(list.get(i).getItemId())) {
MessageInfo.map.get(tempBeginTime).remove(j);
}
}
}
MessageInfo.map.get(tempBeginTime).add(list.get(i));
} else {
List<ScheduleItemInfo> lst = new ArrayList<ScheduleItemInfo>();
lst.add(list.get(i));
MessageInfo.map.put(tempBeginTime, lst);
}
}
}
updateListView(currentDate);
}
public static void updateListView(String date) {
Log.i("test", "update date :" + date);
scheduleList.clear();
List<ScheduleItemInfo> taskList = new ArrayList<ScheduleItemInfo>();
if (MessageInfo.map != null && MessageInfo.map.get(date) != null) {
schedule_list.setVisibility(View.VISIBLE);
ll_default_schedule.setVisibility(View.GONE);
for (int i = 0; i < MessageInfo.map.get(date).size(); i++) {
if (MessageInfo.map.get(date).get(i).getType() == MessageInfo.MEETING
|| MessageInfo.map.get(date).get(i).getType() == MessageInfo.OTHER) {
scheduleList.add(MessageInfo.map.get(date).get(i));
} else if (MessageInfo.map.get(date).get(i).getType() == MessageInfo.TASK) {
taskList.add(MessageInfo.map.get(date).get(i));
}
}
if (taskList.size() > 0) {
ScheduleItemInfo item = new ScheduleItemInfo();
item.setType(MessageInfo.TODOITEM);
scheduleList.add(item);
}
for (int j = 0; j < taskList.size(); j++) {
scheduleList.add(taskList.get(j));
}
MessageInfo.map.get(date).clear();
MessageInfo.map.get(date).addAll(scheduleList);
lstAdapter.notifyDataSetChanged();
} else {
schedule_list.setVisibility(View.GONE);
ll_default_schedule.setVisibility(View.VISIBLE);
}
}
public static int getWeek() {
final Calendar c = Calendar.getInstance();
c.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
/*
* mYear = String.valueOf(c.get(Calendar.YEAR)); // mMonth =
* String.valueOf(c.get(Calendar.MONTH) + 1); mDay =
* String.valueOf(c.get(Calendar.DAY_OF_MONTH));
*/
mWay = c.get(Calendar.DAY_OF_WEEK);
if (mWay == 1)
return 6;
else
return mWay - 2;
}
public class MyOnPageChangeListener implements OnPageChangeListener {
@Override
public void onPageSelected(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
setTabStatus(0);
}
}
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(getChildFragmentManager());
}
@Override
public Fragment getItem(int position) {
Log.e("test", "position :" + position);
return CalendarFragment.create(position);
}
@Override
public int getCount() {
return 1000;
}
}
private String getCurrentDate() {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月");
SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
Date curDate = new Date(System.currentTimeMillis());
String str = formatter.format(curDate);
strToday = date.format(curDate);
Log.i("test", "today date is :" + strToday);
return str;
}
public static void setTabStatus(int index) {
switch (index) {
case 0:
mTabImg1.setVisibility(View.VISIBLE);
mTabImg2.setVisibility(View.INVISIBLE);
mTabImg3.setVisibility(View.INVISIBLE);
mTabImg4.setVisibility(View.INVISIBLE);
mTabImg5.setVisibility(View.INVISIBLE);
mTabImg6.setVisibility(View.INVISIBLE);
mTabImg7.setVisibility(View.INVISIBLE);
break;
case 1:
mTabImg1.setVisibility(View.INVISIBLE);
mTabImg2.setVisibility(View.VISIBLE);
mTabImg3.setVisibility(View.INVISIBLE);
mTabImg4.setVisibility(View.INVISIBLE);
mTabImg5.setVisibility(View.INVISIBLE);
mTabImg6.setVisibility(View.INVISIBLE);
mTabImg7.setVisibility(View.INVISIBLE);
break;
case 2:
mTabImg1.setVisibility(View.INVISIBLE);
mTabImg2.setVisibility(View.INVISIBLE);
mTabImg3.setVisibility(View.VISIBLE);
mTabImg4.setVisibility(View.INVISIBLE);
mTabImg5.setVisibility(View.INVISIBLE);
mTabImg6.setVisibility(View.INVISIBLE);
mTabImg7.setVisibility(View.INVISIBLE);
break;
case 3:
mTabImg1.setVisibility(View.INVISIBLE);
mTabImg2.setVisibility(View.INVISIBLE);
mTabImg3.setVisibility(View.INVISIBLE);
mTabImg4.setVisibility(View.VISIBLE);
mTabImg5.setVisibility(View.INVISIBLE);
mTabImg6.setVisibility(View.INVISIBLE);
mTabImg7.setVisibility(View.INVISIBLE);
break;
case 4:
mTabImg1.setVisibility(View.INVISIBLE);
mTabImg2.setVisibility(View.INVISIBLE);
mTabImg3.setVisibility(View.INVISIBLE);
mTabImg4.setVisibility(View.INVISIBLE);
mTabImg5.setVisibility(View.VISIBLE);
mTabImg6.setVisibility(View.INVISIBLE);
mTabImg7.setVisibility(View.INVISIBLE);
break;
case 5:
mTabImg1.setVisibility(View.INVISIBLE);
mTabImg2.setVisibility(View.INVISIBLE);
mTabImg3.setVisibility(View.INVISIBLE);
mTabImg4.setVisibility(View.INVISIBLE);
mTabImg5.setVisibility(View.INVISIBLE);
mTabImg6.setVisibility(View.VISIBLE);
mTabImg7.setVisibility(View.INVISIBLE);
break;
case 6:
mTabImg1.setVisibility(View.INVISIBLE);
mTabImg2.setVisibility(View.INVISIBLE);
mTabImg3.setVisibility(View.INVISIBLE);
mTabImg4.setVisibility(View.INVISIBLE);
mTabImg5.setVisibility(View.INVISIBLE);
mTabImg6.setVisibility(View.INVISIBLE);
mTabImg7.setVisibility(View.VISIBLE);
break;
}
}
public static int compDate(String s1, String s2) {
try {
int day;
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = new Date();
Date date2 = new Date();
date1 = sf.parse(s1);
date2 = sf.parse(s2);
day = (int) ((date2.getTime() - date1.getTime()) / 3600 / 24 / 1000);
Log.i("test", "day :" + day);
return day;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
public static class CalendarFragment extends Fragment {
public static final String ARG_PAGE = "page";
private int mPageNumber;
private Calendar mCalendar;
private CalendarGridViewAdapter calendarGridViewAdapter;
private static final int count = 3;
private static String prevDate = strToday;
public static Fragment create(int pageNumber) {
Log.e("test", "pageNumber 1:" + pageNumber);
CalendarFragment fragment = new CalendarFragment();
Bundle args = new Bundle();
args.putInt(ARG_PAGE, pageNumber);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPageNumber = getArguments().getInt(ARG_PAGE);
if (mPageNumber < 2)
return;// test for bug..............................
mCalendar = Utils.getSelectCalendar(mPageNumber);
SharedPreferencesUtil shared = new SharedPreferencesUtil(
getActivity());
/***********************************/
shared.getScheduleToday("schedule_today" + UserInfo.db_id);
shared.getScheduleCurrentDate("schedule_current" + UserInfo.db_id);
List<String> mStrs = new ArrayList<String>();
Log.e("test", "pager number : " + mPageNumber);
mStrs = getWeekDate(mCalendar);
calendarGridViewAdapter = new CalendarGridViewAdapter(
getActivity(), mStrs);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
GridView calendarView = new GridView(getActivity());
initGridView(calendarView, calendarGridViewAdapter);
calendarView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
TextView tv = (TextView) view.findViewById(R.id.tv_gv_date);
currentDate = tv.getText().toString();
setDate(strToday, currentDate);
setTabStatus(position);
updateListView(currentDate);
}
});
return calendarView;
}
private void initGridView(GridView gridView, BaseAdapter adapter) {
gridView = setGirdView(gridView);
gridView.setAdapter(adapter);
}
public List<String> getWeekDate(Calendar cal) {
List<String> list = new ArrayList<String>();
SimpleDateFormat day = new SimpleDateFormat("dd");
SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
String dateFormat = date.format(cal.getTime());
String currentDate = null;
Calendar tempCal = null;
// Log.i("test","Date : " + date.format(cal.getTime()));
Log.e("test", "num :" + num);
if (++num > count) {
try {
Log.i("test", "strtoday :" + strToday);
Log.i("test", "prevDate :" + prevDate);
Log.i("test", "dateFormat : " + dateFormat);
if (compDate(prevDate, dateFormat) < 0) {
tempCal = Utils.setNextViewItem(cal);
} else {
tempCal = Utils.setPrevViewItem(cal);
}
currentDate = date.format(tempCal.getTime());
prevDate = currentDate;
currentCal = tempCal;
updateListView(currentDate);
setDate(strToday, currentDate);
Log.i("test", "current Date : " + currentDate);
} catch (Exception e) {
e.printStackTrace();
}
}
for (int i = 0; i < 7; i++) {
list.add(day.format(cal.getTime()) + " "
+ date.format(cal.getTime()));
cal.roll(Calendar.DAY_OF_YEAR, true);
}
return list;
}
public void setDate(String fromDate, String toDate) {
int value = 0;
String date;
try {
value = compDate(fromDate, toDate);
} catch (Exception e) {
e.printStackTrace();
}
Log.i("test", "value: " + value);
if (value == 0) {
date = getResources().getString(R.string.today);
} else if (value < 0) {
int abs = Math.abs(value);
if (abs > 0 && abs < 7) {
date = String.valueOf(abs % 7)
+ getResources().getString(R.string.before_day);
} else if (abs > 6 && abs < 30) {
date = String.valueOf(abs / 7 == 0 ? 1 : (int) Math
.floor((double) abs / 7))
+ getResources().getString(R.string.before_week);
} else if (abs >= 30 && abs < 360) {
date = String.valueOf((int) Math.floor((double) abs / 30))
+ getResources().getString(R.string.before_month);
} else {
date = String.valueOf((int) Math
.floor((double) value / 360))
+ getResources().getString(R.string.before_year);
}
} else {
if (value <= 6 - getWeek()) {
date = String.valueOf(value % 7)
+ getResources().getString(R.string.after_day);
} else if (value > 6 - getWeek() && value < 30) {
date = String.valueOf(value / 7 == 0 ? 1 : (int) Math
.ceil((double) value / 7))
+ getResources().getString(R.string.after_week);
} else if (value >= 30 && value < 360) {
date = String
.valueOf((int) Math.floor((double) value / 30))
+ getResources().getString(R.string.after_month);
} else {
date = String.valueOf((int) Math
.floor((double) value / 360))
+ getResources().getString(R.string.after_year);
}
}
day.setText(date);
String[] str = toDate.split("-");
String newDate = str[0] + getResources().getString(R.string.year)
+ str[1] + getResources().getString(R.string.month);
today.setText(newDate);
}
@SuppressWarnings("deprecation")
private GridView setGirdView(GridView gridView) {
gridView.setNumColumns(7);
gridView.setGravity(Gravity.CENTER_VERTICAL);
// gridView.setVerticalSpacing(1);
// gridView.setHorizontalSpacing(1);
gridView.setFocusable(true);
gridView.setFocusableInTouchMode(true);
gridView.setSelector(new ColorDrawable(Color.TRANSPARENT));
WindowManager windowManager = getActivity().getWindowManager();
Display display = windowManager.getDefaultDisplay();
int i = display.getWidth() / 7;
int j = display.getWidth() - (i * 7);
int x = j / 2;
gridView.setPadding(x, 0, 0, 0);
return gridView;
}
}
@Override
public void onPause() {
super.onPause();
Log.i("test", "schedule onPause");
}
@Override
public void onStop() {
super.onStop();
num = 0;
SharedPreferencesUtil shared = new SharedPreferencesUtil(getActivity());
shared.saveScheduleToday("schedule_today" + UserInfo.db_id, strToday);
shared.saveScheduleCurrentDate("schedule_current" + UserInfo.db_id,
currentDate);
Log.i("test", "schedulefragment onStop");
}
@Override
public void onDestroy() {
Log.i("test", "schedulefragment onDestroy");
scheduleSharedPre.saveScheduletoShared(MessageInfo.map, UserInfo.db_id
+ ScheduleSharedPreName);
/*
* Log.i("test", "map size: " + MessageInfo.map.size()); Set set =
* MessageInfo.map.keySet(); Iterator it = set.iterator(); while
* (it.hasNext()) { String key = (String) it.next();
* List<ScheduleItemInfo> value = (List<ScheduleItemInfo>)
* MessageInfo.map .get(key); for (int j = 0; j < value.size(); j++) {
* String content = value.get(j).getScheduleContent(); String time =
* value.get(j).getScheduleBeginTime(); String name =
* value.get(j).getSponsorName(); String[] memberId =
* value.get(j).getMemberName(); String[] memberName =
* value.get(j).getMemberName(); String id = value.get(j).getId();
*
* Log.i("test","time :" + time); String[] strTime = time.split(" ");
* if(strTime != null && strTime.length > 2){ time = strTime[2]; }
*
* MessageItemInfo messageItem = new MessageItemInfo();
* messageItem.setContent(content); messageItem.setName(name);
* messageItem.setTime(time); messageItem.setMemberId(memberId);
* messageItem.setMemberName(memberName); messageItem.setId(id);
* MessageInfo.MessageList.add(messageItem); } Log.i("test",
* "messagelist size :" + MessageInfo.MessageList.size()); }
*/
super.onDestroy();
}
}