package com.ihateflyingbugs.kidsm.schedule;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Locale;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.ihateflyingbugs.kidsm.MainActivity;
import com.ihateflyingbugs.kidsm.NetworkFragment;
import com.ihateflyingbugs.kidsm.R;
import com.ihateflyingbugs.kidsm.WrappingSlidingDrawer;
import com.ihateflyingbugs.kidsm.menu.Profile;
import com.ihateflyingbugs.kidsm.menu.SlidingMenuMaker;
import com.ihateflyingbugs.kidsm.schedule.CalendarWeek.CalendarWeekType;
import com.ihateflyingbugs.kidsm.uploadphoto.UploadPhotoActivity;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.View.OnClickListener;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.RadioGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ViewFlipper;
public class ScheduleFragment extends NetworkFragment {
public GregorianCalendar month, itemmonth;// calendar instances.
public CalendarAdapter adapter1;// adapter instance
//public CalendarAdapter adapter2;// adapter instance
public Handler handler;// for grabbing some event values for showing the dot
// marker.
public ArrayList<String> items; // container to store calendar items which
// needs showing the event marker
//ArrayList<String> event;
LinearLayout rLayout;
ArrayList<String> date;
ArrayList<String> desc;
LayoutInflater inflater;
View layout;
static boolean isMeasured;
ViewFlipper calendarFlipper;
int scheduleMode;
String selectedGridDate;
ArrayList<CalendarEvent> eventList;
TextView numOfBirth;
Dialog singlePopDateDialog;
float prevTouchX;
float prevTouchY;
boolean isFling;
WrappingSlidingDrawer drawer;
boolean canUploadPhoto;
int monthMemory;
boolean isRequestForConfirmedList;
boolean isRequestForShowDialog;
boolean isRequestForShowWeekPage;
ArrayList<CalendarWeek> weekData;
CalendarWeekAdapter calendarWeekAdapter;
ListView weekList;
ArrayList<CalendarWeek> dayData;
CalendarWeekAdapter calendarDayAdapter;
ListView dayList;
ArrayList<String> cal_srlList;
int getCheckCounter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if(layout != null)
return layout;
this.inflater = inflater;
layout = inflater.inflate(R.layout.activity_schedule, container, false);
auth_key = MainActivity.auth_key;
Locale.setDefault(Locale.US);
isRequestForConfirmedList = false;
isRequestForShowDialog = false;
isRequestForShowWeekPage = false;
cal_srlList = new ArrayList<String>();
weekData = new ArrayList<CalendarWeek>();
calendarWeekAdapter = new CalendarWeekAdapter(getActivity(), weekData);
dayData = new ArrayList<CalendarWeek>();
calendarDayAdapter = new CalendarWeekAdapter(getActivity(), dayData);
weekList = (ListView)layout.findViewById(R.id.schedule_weekpage);
weekList.setDivider(null);
weekList.setDividerHeight(0);
weekList.setAdapter(calendarWeekAdapter);
LinearLayout dateDialog = (LinearLayout) inflater.inflate(R.layout.schedule_datedialog, null);
dayList = (ListView) dateDialog.findViewById(R.id.schedule_eventlist_day);
dayList.setDivider(null);
dayList.setDividerHeight(0);
dayList.setAdapter(calendarDayAdapter);
singlePopDateDialog = new Dialog(getActivity(), R.style.TransparentDialog);
singlePopDateDialog.setContentView(dateDialog);
Button close = (Button)dateDialog.findViewById(R.id.schedule_eventlist_close);
close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
singlePopDateDialog.cancel();
}
});
//rLayout = (LinearLayout) findViewById(R.id.text);
month = (GregorianCalendar) GregorianCalendar.getInstance();
itemmonth = (GregorianCalendar) month.clone();
monthMemory = month.get(Calendar.MONTH);
items = new ArrayList<String>();
selectedGridDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
final ViewFlipper viewFlipper = (ViewFlipper)layout.findViewById(R.id.schedule_flipper);
RadioGroup rg = (RadioGroup) layout.findViewById(R.id.schedule_mode);
rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch(checkedId) {
case R.id.schedule_monthmode:
layout.findViewById(R.id.schedule_prev).setVisibility(View.VISIBLE);
layout.findViewById(R.id.schedule_next).setVisibility(View.VISIBLE);
viewFlipper.setInAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.viewin_right));
viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.viewout_right));
viewFlipper.showPrevious();
scheduleMode = 0;
break;
case R.id.schedule_weekmode:
layout.findViewById(R.id.schedule_prev).setVisibility(View.INVISIBLE);
layout.findViewById(R.id.schedule_next).setVisibility(View.INVISIBLE);
viewFlipper.setInAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.viewin_left));
viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.viewout_left));
viewFlipper.showNext();
scheduleMode = 1;
break;
}
refreshCalendar();
}
});
LinearLayout monthPage = (LinearLayout)layout.findViewById(R.id.schedule_monthpage);
monthPage.addView((LinearLayout) inflater.inflate(R.layout.schedule_month, null));
RelativeLayout monthCalendarInfo = (RelativeLayout)monthPage.findViewById(R.id.schedule_month_calendarinfo);
numOfBirth = (TextView)monthCalendarInfo.findViewById(R.id.schedule_birthday_namelist);
calendarFlipper = (ViewFlipper)monthCalendarInfo.findViewById(R.id.schedule_calendar_flipper);
final GridView gridview1 = (GridView) calendarFlipper.findViewById(R.id.schedule_calendar1);
final GridView gridview2 = (GridView) calendarFlipper.findViewById(R.id.schedule_calendar2);
eventList = new ArrayList<CalendarEvent>();
// eventList.add(new CalendarEvent(0, "2013-08-26", "2013-08-26", "ī�̽�Ʈ ���� �� 12�� 40�� �����е� E3-1 1�� 1441ȣ�� �����ȣ 3020404"));
// eventList.add(new CalendarEvent(0, "2013-08-28", "2013-08-28", "ī�̽�Ʈ ���� �� 12�� 40�� �����е� E3-1 1�� 1441ȣ�� �����ȣ 3020404"));
// eventList.add(new CalendarEvent(1, "2013-08-28", "2013-08-28", "���ȿ"));
// eventList.add(new CalendarEvent(1, "2013-08-28", "2013-08-28", "�����"));
// eventList.add(new CalendarEvent(1, "2013-08-29", "2013-08-29", "�����"));
// eventList.add(new CalendarEvent(1, "2013-09-29", "2013-09-29", "�����"));
requestEvent();
isMeasured = false;
gridview1.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener(){
@Override
public void onGlobalLayout() {
if(isMeasured == false) {
adapter1 = new CalendarAdapter(getActivity(), month, eventList);
gridview1.setAdapter(adapter1);
//adapter2 = new CalendarAdapter(getActivity(), month, gridview1.getMeasuredHeight()/5);
gridview2.setAdapter(adapter1);
isMeasured = true;
}
}
});
handler = new Handler();
// handler.post(calendarUpdater);
TextView title = (TextView) layout.findViewById(R.id.schedule_info);
title.setText(android.text.format.DateFormat.format("yyyy" + getString(R.string.year) +" MMMM", month));
// Button previous = (Button) layout.findViewById(R.id.schedule_prev);
// previous.setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View v) {
// switch(scheduleMode) {
// case 0:
// setPreviousMonth();
// break;
// case 1:
// setPreviousWeek();
// break;
// }
// refreshCalendar();
// }
// });
//
// Button next = (Button) layout.findViewById(R.id.schedule_next);
// next.setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View v) {
// switch(scheduleMode) {
// case 0:
// setNextMonth();
// break;
// case 1:
// setNextWeek();
// break;
// }
// refreshCalendar();
// }
// });
gridview1.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
OnCalendarItemClick(parent, v, position);
}
});
gridview2.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
OnCalendarItemClick(parent, v, position);
}
});
scheduleMode = 0;
refreshBirthdayCounter();
drawer = (WrappingSlidingDrawer)layout.findViewById(R.id.schedule_drawer);
drawer.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(SlidingMenuMaker.getProfile().member_type.charAt(0)) {
case 'P':
return true;
case 'T':
case 'M':
return false;
}
return true;
}
});
switch(SlidingMenuMaker.getProfile().member_type.charAt(0)) {
case 'P':
canUploadPhoto = false;
break;
case 'T':
case 'M':
canUploadPhoto = true;
break;
}
return layout;
}
private void setPreviousWeek() {
try {
Date selectedDate = new SimpleDateFormat("yyyy-MM-dd").parse(selectedGridDate);
Calendar cal = Calendar.getInstance();
cal.setTime(selectedDate);
cal.add(Calendar.DAY_OF_MONTH, -7);
String prevDate = selectedGridDate;
selectedGridDate = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
adapter1.currentDateString = selectedGridDate;
if( prevDate.substring(0, 7).equals(selectedGridDate.substring(0, 7)) == false )
setPreviousMonth();
} catch (ParseException e) {
e.printStackTrace();
}
}
private void setNextWeek() {
try {
Date selectedDate = new SimpleDateFormat("yyyy-MM-dd").parse(selectedGridDate);
Calendar cal = Calendar.getInstance();
cal.setTime(selectedDate);
cal.add(Calendar.DAY_OF_MONTH, 7);
String prevDate = selectedGridDate;
selectedGridDate = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
adapter1.currentDateString = selectedGridDate;
if( prevDate.substring(0, 7).equals(selectedGridDate.substring(0, 7)) == false )
setNextMonth();
} catch (ParseException e) {
e.printStackTrace();
}
}
private void OnCalendarItemClick(AdapterView<?> parent, View v, int position) {
desc = new ArrayList<String>();
date = new ArrayList<String>();
((CalendarAdapter) parent.getAdapter()).setSelected(v);
selectedGridDate = CalendarAdapter.dayString
.get(position);
((CalendarAdapter) parent.getAdapter()).currentDateString = selectedGridDate;
String[] separatedTime = selectedGridDate.split("-");
String gridvalueString = separatedTime[2].replaceFirst("^0*",
"");// taking last part of date. ie; 2 from 2012-12-02.
int gridvalue = Integer.parseInt(gridvalueString);
// navigate to next or previous month on clicking offdays.
if ((gridvalue > 10) && (position < 8)) {
setPreviousMonth();
refreshCalendar();
} else if ((gridvalue < 7) && (position > 28)) {
setNextMonth();
refreshCalendar();
}
((CalendarAdapter) parent.getAdapter()).setSelected(v);
cal_srlList.clear();
ArrayList<CalendarEvent> eventListOnThisDay = new ArrayList<CalendarEvent>();
for (int i = 0; i < eventList.size(); i++) {
if (eventList.get(i).startDate.equals(selectedGridDate)) {
if(eventList.get(i).cal_type.equals("N"))
cal_srlList.add(eventList.get(i).cal_srl);
eventListOnThisDay.add(eventList.get(i));
}
}
if( eventListOnThisDay.size() != 0 ) {
showDayEventList(selectedGridDate, eventListOnThisDay);
}
desc = null;
}
private void showDayEventList(String dateString, ArrayList<CalendarEvent> eventListOnThisDay) {
if( singlePopDateDialog != null && singlePopDateDialog.isShowing() )
return;
getCheckCounter = 0;
for(int i = 0; i < eventList.size(); i++) {
if( eventList.get(i).cal_type.equals("N") ) {
eventList.get(i).checkInfoList.clear();
eventList.get(i).isChecked = false;
}
}
for(int i = 0; i < cal_srlList.size(); i++)
ScheduleFragment.this.request_Calender_getCheckCalender(cal_srlList.get(i));
dayData.clear();
addViewToList(dateString, eventListOnThisDay, DATETYPE.DAY);
calendarDayAdapter.notifyDataSetChanged();
isRequestForShowDialog = true;
// new Thread(new Runnable() {
// @Override
// public void run() {
// ScheduleFragment.this.getActivity().runOnUiThread(new Runnable(){
// @Override
// public void run() {
// }
// });
// }
// }).start();
}
private void showWeekEventList(String dateString) {
try {
Date startDay = new SimpleDateFormat("yyyy-MM-dd").parse(dateString);
Calendar cal = Calendar.getInstance();
cal.setTime(startDay);
// Set the calendar to monday of the current week
cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
weekData.clear();
cal_srlList.clear();
for (int i = 0; i < 7; i++) {
dateString = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
ArrayList<CalendarEvent> eventListOnThisDay = new ArrayList<CalendarEvent>();
for (int j = 0; j < eventList.size(); j++) {
if (eventList.get(j).startDate.equals(dateString)) {
if(eventList.get(j).cal_type.equals("N"))
cal_srlList.add(eventList.get(j).cal_srl);
eventListOnThisDay.add(eventList.get(j));
}
}
if( eventListOnThisDay.size() != 0 ) {
if( weekData.size() != 0 )
weekData.add(new CalendarWeek(CalendarWeekType.BLANK, ""));
addViewToList(dateString, eventListOnThisDay, DATETYPE.WEEK);
}
cal.add(Calendar.DATE, 1);
}
getCheckCounter = 0;
for(int i = 0; i < eventList.size(); i++) {
if( eventList.get(i).cal_type.equals("N") ) {
eventList.get(i).checkInfoList.clear();
eventList.get(i).isChecked = false;
}
}
for(int i = 0; i < cal_srlList.size(); i++)
ScheduleFragment.this.request_Calender_getCheckCalender(cal_srlList.get(i));
calendarWeekAdapter.notifyDataSetChanged();
isRequestForShowWeekPage = true;
} catch (ParseException e) {
e.printStackTrace();
}
}
public enum DATETYPE {
DAY,
WEEK
}
private void addViewToList(String dateString, ArrayList<CalendarEvent> eventListOnThisDay, DATETYPE type){
Date dateInfo;
try {
dateInfo = new SimpleDateFormat("yyyy-MM-dd").parse(dateString);
dateString = new SimpleDateFormat("MMMM dd�� EE", Locale.KOREA).format(dateInfo);
} catch (ParseException e) {
e.printStackTrace();
}
switch(type) {
case DAY:
dayData.add(new CalendarWeek(CalendarWeekType.DATE, dateString));
break;
case WEEK:
weekData.add(new CalendarWeek(CalendarWeekType.DATE, dateString));
break;
}
ArrayList<CalendarEvent> BirthdayList = new ArrayList<CalendarEvent>();;
for(int i = 0; i < eventListOnThisDay.size(); i++) {
CalendarEvent event = eventListOnThisDay.get(i);
CalendarWeek item;
switch(event.type) {
case 0:
switch(SlidingMenuMaker.getProfile().member_type.charAt(0)) {
case 'P':
item = new CalendarWeek(CalendarWeekType.SCHEDULE_FOR_PARENT, dateString);
item.events.add(event);
switch(type) {
case DAY:
dayData.add(item);
break;
case WEEK:
weekData.add(item);
break;
}
break;
case 'T':
item = new CalendarWeek(CalendarWeekType.SCHEDULE_FOR_TEACHER, dateString);
item.events.add(event);
switch(type) {
case DAY:
dayData.add(item);
break;
case WEEK:
weekData.add(item);
break;
}
break;
case 'M':
break;
}
break;
case 1:
BirthdayList.add(event);
break;
}
}
if(BirthdayList.isEmpty() == false) {
CalendarWeek item = new CalendarWeek(CalendarWeekType.BIRTHDAY, dateString);
item.events.addAll(BirthdayList);
switch(type) {
case DAY:
dayData.add(item);
break;
case WEEK:
weekData.add(item);
break;
}
}
}
protected void setNextMonth() {
if (month.get(GregorianCalendar.MONTH) == month
.getActualMaximum(GregorianCalendar.MONTH)) {
month.set((month.get(GregorianCalendar.YEAR) + 1),
month.getActualMinimum(GregorianCalendar.MONTH), 1);
} else {
month.set(GregorianCalendar.MONTH,
month.get(GregorianCalendar.MONTH) + 1);
}
calendarFlipper.setInAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.viewin_left));
calendarFlipper.setOutAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.viewout_left));
calendarFlipper.showNext();
}
protected void setPreviousMonth() {
if (month.get(GregorianCalendar.MONTH) == month
.getActualMinimum(GregorianCalendar.MONTH)) {
month.set((month.get(GregorianCalendar.YEAR) - 1),
month.getActualMaximum(GregorianCalendar.MONTH), 1);
} else {
month.set(GregorianCalendar.MONTH,
month.get(GregorianCalendar.MONTH) - 1);
}
calendarFlipper.setInAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.viewin_right));
calendarFlipper.setOutAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.viewout_right));
calendarFlipper.showPrevious();
}
protected void showToast(String string) {
Toast.makeText(getActivity(), string, Toast.LENGTH_SHORT).show();
}
protected void refreshBirthdayCounter() {
int birthdayCounter = 0;
for(int i = 0; i < eventList.size(); i++) {
String monthData = new SimpleDateFormat("yyyy-MM").format(month.getTime());
if(monthData.equals(eventList.get(i).startDate.substring(0, 7)) && eventList.get(i).type == 1)
birthdayCounter++;
}
numOfBirth.setText(""+birthdayCounter+"��");
}
private void requestEvent() {
eventList.clear();
Profile profile = SlidingMenuMaker.getProfile();
String org_srl = "";
String class_srl = "";
String year = ""+this.month.get(Calendar.YEAR);
String prevmonth = ""+(this.month.get(Calendar.MONTH));
String month = ""+(this.month.get(Calendar.MONTH)+1);
String nextmonth = ""+(this.month.get(Calendar.MONTH)+2);
switch(profile.member_type.charAt(0)) {
case 'P':
if( profile.childrenList.size() <= 1 )
return;
org_srl = profile.getCurrentChildren().student_org_srl;
class_srl = profile.getCurrentChildren().student_class_srl;
break;
case 'T':
if( profile.classList.size() <= 1 )
return;
org_srl = profile.member_org_srl;
class_srl = profile.getCurrentClass().getClass_srl();
break;
case 'M':
if( profile.classList.size() <= 1 )
return;
org_srl = profile.member_org_srl;
class_srl = profile.getCurrentClass().getClass_srl();
break;
}
ScheduleFragment.this.request_Calender_getCalenders(org_srl, class_srl, year, prevmonth);
ScheduleFragment.this.request_Calender_getCalenders(org_srl, class_srl, year, month);
ScheduleFragment.this.request_Calender_getCalenders(org_srl, class_srl, year, nextmonth);
ScheduleFragment.this.request_Class_getClassStudent(org_srl, class_srl);
}
public void refreshCalendar() {
TextView title = (TextView) layout.findViewById(R.id.schedule_info);
adapter1.refreshDays();
adapter1.notifyDataSetChanged();
//adapter2.refreshDays();
//adapter2.notifyDataSetChanged();
// handler.post(calendarUpdater); // generate some calendar items
if( monthMemory != month.get(Calendar.MONTH) ) {
monthMemory = month.get(Calendar.MONTH);
requestEvent();
}
showWeekEventList(selectedGridDate);
if( scheduleMode == 0 )
title.setText(android.text.format.DateFormat.format("yyyy" + getString(R.string.year) +" MMMM", month));
else
{
try {
Calendar cal = Calendar.getInstance();
cal.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(selectedGridDate));
cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
Date sundayDate = cal.getTime();
String sunday = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
cal.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
Date saterdayDate = cal.getTime();
String saturday = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
if( sunday.substring(0, 7).equals(saturday.substring(0, 7)) )
title.setText(getWeekName(selectedGridDate));
else {
Date selectedMonth = new SimpleDateFormat("yyyy-MM-dd").parse(selectedGridDate.substring(0, 8) + "01");
Date sundayMonth = new SimpleDateFormat("yyyy-MM-dd").parse(sunday.substring(0, 8) + "01");
Date saterdayMonth = new SimpleDateFormat("yyyy-MM-dd").parse(saturday.substring(0, 8) + "01");
String first = "";
String second = "";
if( sunday.substring(0, 7).equals(selectedGridDate.substring(0, 7)) ) {
first = getWeekName(sunday);
setNextMonth();
adapter1.refreshDays();
adapter1.notifyDataSetChanged();
second = getWeekName(saturday);
if(sundayMonth.equals(selectedMonth)) {
setPreviousMonth();
adapter1.refreshDays();
adapter1.notifyDataSetChanged();
}
}
else {
second = getWeekName(saturday);
setPreviousMonth();
adapter1.refreshDays();
adapter1.notifyDataSetChanged();
first = getWeekName(sunday);
if(saterdayMonth.equals(selectedMonth)) {
setNextMonth();
adapter1.refreshDays();
adapter1.notifyDataSetChanged();
}
}
title.setText(first + "\n" + second);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}
private String getWeekName(String dateString) throws ParseException {
Date date = new SimpleDateFormat("yyyy-MM-dd").parse(dateString);
String dateFormatted = new SimpleDateFormat("yyyy" + getString(R.string.year) +" MMMM ", Locale.KOREA).format(date);
for(int i = 0; i < CalendarAdapter.dayString.size(); i++) {
if( CalendarAdapter.dayString.get(i).equals(dateString) ) {
int dayOfWeekInMonth = i/7+1;
switch(dayOfWeekInMonth) {
case 1:
dateFormatted += getString(R.string.first_week);
break;
case 2:
dateFormatted += getString(R.string.second_week);
break;
case 3:
dateFormatted += getString(R.string.third_week);
break;
case 4:
dateFormatted += getString(R.string.fourth_week);
break;
case 5:
dateFormatted += getString(R.string.fifth_week);
break;
case 6:
dateFormatted += getString(R.string.sixth_week);
break;
}
break;
}
}
return dateFormatted;
}
// public Runnable calendarUpdater = new Runnable() {
//
// @Override
// public void run() {
// items.clear();
//
// // Print dates of the current week
// DateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
// String itemvalue = "";
// ArrayList<String> event = CalendarUtility.readCalendarEvent(getActivity());
// //Log.d("=====Event====", event.toString());
// Log.d("=====Date ARRAY====", CalendarUtility.startDates.toString());
//
// for (int i = 0; i < CalendarUtility.startDates.size(); i++) {
// itemvalue = df.format(itemmonth.getTime());
// itemmonth.add(GregorianCalendar.DATE, 1);
// items.add(CalendarUtility.startDates.get(i).toString());
// }
// adapter1.setItems(items);
// adapter1.notifyDataSetChanged();
// //adapter2.setItems(items);
// //adapter2.notifyDataSetChanged();
// }
// };
public void OnMonthMode(View v) {
}
public void OnWeekMode(View v) {
}
public void OnPrevMonth(View v) {
setPreviousMonth();
refreshCalendar();
}
public void OnNextMonth(View v) {
setNextMonth();
refreshCalendar();
}
private void showConfirmedList(String cal_srl) {
Intent intent = new Intent(getActivity(), ShowConfirmedListActivity.class);
ArrayList<ConfirmedMember> memberList = new ArrayList<ConfirmedMember>();
for(int i = 0; i < eventList.size(); i++) {
if(eventList.get(i).cal_type.charAt(0) == 'N' && eventList.get(i).cal_srl.equals(cal_srl)) {
for(int j = 0; j < eventList.get(i).checkInfoList.size(); j++) {
memberList.add(new ConfirmedMember(eventList.get(i).checkInfoList.get(j).check_member_srl, ""));
}
break;
}
}
intent.putExtra("memberList", memberList);
startActivity(intent);
}
public void OnShowConfirmedList(View v) {
String cal_srl = v.getTag().toString();
for(int i = 0; i < eventList.size(); i++) {
if( eventList.get(i).cal_type.equals("N") ) {
eventList.get(i).checkInfoList.clear();
eventList.get(i).isChecked = false;
}
}
ScheduleFragment.this.request_Calender_getCheckCalender(cal_srl);
isRequestForConfirmedList = true;
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if( resultCode == Activity.RESULT_OK ) {
Intent intent;
switch(requestCode) {
case 0:
requestEvent();
break;
}
}
}
public void OnCheckSchedule(View v) {
for(int i = 0; i < eventList.size(); i++) {
if(eventList.get(i).cal_type.charAt(0) == 'N' && eventList.get(i).cal_srl.equals(v.getTag().toString())) {
final int index = i;
final CheckBox cb = (CheckBox)v;
cb.setChecked(eventList.get(index).isChecked);
// cb.setOnClickListener(new OnClickListener() {
// @Override
// public void onClick(View v) {
// cb.setChecked(eventList.get(index).isChecked);
// }
// });
if( eventList.get(i).isChecked == false )
ScheduleFragment.this.request_Calender_checkCalender(eventList.get(i).cal_srl, SlidingMenuMaker.getProfile().member_srl);
break;
}
}
}
public void OnUploadSchedule(View v) {
Intent intent = new Intent(getActivity(), AddScheduleActivity.class);
startActivityForResult(intent, 0);
}
public boolean dispatchTouchEvent(MotionEvent event) {
if( event.getAction() == MotionEvent.ACTION_DOWN ) {
prevTouchX = event.getX();
prevTouchY = event.getY();
isFling = false;
}
else if( event.getAction() == MotionEvent.ACTION_MOVE ) {
DisplayMetrics displaymetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int width = displaymetrics.widthPixels;
int height = displaymetrics.heightPixels;
float gapX = Math.abs(event.getX() - prevTouchX);
float gapY = Math.abs(event.getY() - prevTouchY);
if( canUploadPhoto && gapY > height/10 ) {
if( event.getY() - prevTouchY < 0 ) {
if( drawer.isOpened() == false ) {
drawer.animateOpen();
}
}
else {
if( drawer.isOpened() == true ) {
drawer.animateClose();
}
}
prevTouchY = event.getY();
}
if( isFling == false && gapX > width/5 ) {
if( event.getX() - prevTouchX < 0 ) {
switch(scheduleMode) {
case 0:
setNextMonth();
break;
case 1:
setNextWeek();
break;
}
}
else {
//prev
switch(scheduleMode) {
case 0:
setPreviousMonth();
break;
case 1:
setPreviousWeek();
break;
}
}
refreshCalendar();
//prevTouchX = event.getX();
isFling = true;
}
}
else if( event.getAction() == MotionEvent.ACTION_UP ) {
}
return true;
};
@Override
public void response(String uri, String response) {
try {
if( response.isEmpty() )
return;
JSONObject jsonObj = new JSONObject(response);
String result = jsonObj.getString("result");
if( result.equals("OK") ) {
if(uri.equals("Calender/getCalenders")) {
String nativeData = jsonObj.getString("data");
JSONArray dataArray = new JSONArray(nativeData);
for(int i = 0; i < dataArray.length(); i++) {
String cal_srl = dataArray.getJSONObject(i).getString("cal_srl");
String cal_org_srl = dataArray.getJSONObject(i).getString("cal_org_srl");
String cal_class_srl = dataArray.getJSONObject(i).getString("cal_class_srl");
String cal_member_srl = dataArray.getJSONObject(i).getString("cal_member_srl");
String cal_type = dataArray.getJSONObject(i).getString("cal_type");
String cal_year = dataArray.getJSONObject(i).getString("cal_year");
String cal_month = dataArray.getJSONObject(i).getString("cal_month");
String cal_day = dataArray.getJSONObject(i).getString("cal_day");
String cal_time = dataArray.getJSONObject(i).getString("cal_time");
String cal_timestamp = dataArray.getJSONObject(i).getString("cal_timestamp");
String cal_name = dataArray.getJSONObject(i).getString("cal_name");
String cal_created = dataArray.getJSONObject(i).getString("cal_created");
String class_srl = "";
switch(SlidingMenuMaker.getProfile().member_type.charAt(0)) {
case 'P':
class_srl = SlidingMenuMaker.getProfile().getCurrentChildren().teacherList.get(0).teacher_class_srl;
break;
case 'T':
case 'M':
class_srl = SlidingMenuMaker.getProfile().getCurrentClass().getClass_srl();
break;
}
if(SlidingMenuMaker.getProfile().member_type.charAt(0) != 'M' && cal_class_srl.equals(class_srl) == false)
continue;
if(cal_month.length() == 1)
cal_month = "0"+cal_month;
if(cal_day.length() == 1)
cal_day = "0"+cal_day;
String date = cal_year + "-" + cal_month + "-" + cal_day;
eventList.add(new CalendarEvent(0, date, date, cal_name, cal_srl, cal_org_srl, cal_class_srl, cal_member_srl, cal_type));
if(cal_type.charAt(0) == 'N') {
eventList.get(eventList.size()-1).checkInfoList = new ArrayList<CheckInfo>();
ScheduleFragment.this.request_Calender_getCheckCalender(cal_srl);
}
}
new Thread(new Runnable() {
@Override
public void run() {
ScheduleFragment.this.getActivity().runOnUiThread(new Runnable(){
@Override
public void run() {
adapter1.notifyDataSetChanged();
}
});
}
}).start();
}
else if(uri.equals("Calender/getCheckCalender")) {
ArrayList<CheckInfo> checkInfoList = new ArrayList<CheckInfo>();
String nativeData = jsonObj.getString("data");
JSONArray dataArray = new JSONArray(nativeData);
String cal_srl = "";
for(int i = 0; i < dataArray.length(); i++) {
String check_srl = dataArray.getJSONObject(i).getJSONObject("_id").getString("$oid");
String check_cal_srl = dataArray.getJSONObject(i).getString("check_cal_srl");
String check_member_srl = dataArray.getJSONObject(i).getString("check_member_srl");
String check_created = dataArray.getJSONObject(i).getString("check_created");
checkInfoList.add(new CheckInfo(check_srl, check_cal_srl, check_member_srl));
cal_srl = check_cal_srl;
}
if(cal_srl.isEmpty()) {
for(int i = 0; i < eventList.size(); i++ ) {
if( eventList.get(i).cal_type.charAt(0) == 'N' ) {
switch(SlidingMenuMaker.getProfile().member_type.charAt(0)) {
case 'P':
break;
case 'T':
case 'M':
eventList.get(i).numOfClassMember = SlidingMenuMaker.getProfile().getCurrentClass().getNumOfStudentHavingParent();
break;
}
}
}
}
else {
for(int i = 0; i < eventList.size(); i++ ) {
if( eventList.get(i).cal_type.charAt(0) == 'N' && cal_srl.equals(eventList.get(i).cal_srl) ) {
eventList.get(i).checkInfoList.clear();
eventList.get(i).checkInfoList.addAll(checkInfoList);
switch(SlidingMenuMaker.getProfile().member_type.charAt(0)) {
case 'P':
for(int j = 0; j < checkInfoList.size(); j++) {
if(SlidingMenuMaker.getProfile().member_srl.equals(checkInfoList.get(j).check_member_srl)) {
eventList.get(i).isChecked = true;
break;
}
}
break;
case 'T':
case 'M':
eventList.get(i).numOfClassMember = SlidingMenuMaker.getProfile().getCurrentClass().getNumOfStudentHavingParent();
break;
}
break;
}
}
}
new Thread(new Runnable() {
@Override
public void run() {
ScheduleFragment.this.getActivity().runOnUiThread(new Runnable(){
@Override
public void run() {
adapter1.notifyDataSetChanged();
if( isRequestForShowDialog && ++getCheckCounter == cal_srlList.size()) {
String data = "";
for( int i = 0; i < dayData.size(); i++) {
if( dayData.get(i).type != CalendarWeekType.SCHEDULE_FOR_TEACHER)
continue;
for( int j = 0; j < eventList.size(); j++) {
if( dayData.get(i).events.get(0).cal_srl.equals(eventList.get(j).cal_srl) ) {
dayData.get(i).events.get(0).checkInfoList = eventList.get(j).checkInfoList;
data += "" + dayData.get(i).events.get(0).checkInfoList.size() + ", ";
break;
}
}
}
calendarDayAdapter.notifyDataSetChanged();
//dayList.setAdapter(calendarDayAdapter);
isRequestForShowDialog = false;
singlePopDateDialog.show();
}
else if( isRequestForShowWeekPage && ++getCheckCounter == cal_srlList.size()) {
for( int i = 0; i < weekData.size(); i++) {
if( weekData.get(i).type != CalendarWeekType.SCHEDULE_FOR_TEACHER)
continue;
for( int j = 0; j < eventList.size(); j++) {
if( weekData.get(i).events.get(0).cal_srl.equals(eventList.get(j).cal_srl) ) {
weekData.get(i).events.get(0).checkInfoList = eventList.get(j).checkInfoList;
break;
}
}
}
calendarWeekAdapter.notifyDataSetChanged();
isRequestForShowWeekPage = false;
//weekList.setAdapter(calendarWeekAdapter);
}
}
});
}
}).start();
if( isRequestForConfirmedList ) {
isRequestForConfirmedList = false;
showConfirmedList(cal_srl);
}
}
else if(uri.equals("Calender/checkCalender")) {
String nativeData = jsonObj.getString("data");
JSONArray dataArray = new JSONArray(nativeData);
for(int i = 0; i < dataArray.length(); i++) {
String check_srl = dataArray.getJSONObject(i).getJSONObject("_id").getString("$oid");
String check_cal_srl = dataArray.getJSONObject(i).getString("check_cal_srl");
String check_member_srl = dataArray.getJSONObject(i).getString("check_member_srl");
String check_created = dataArray.getJSONObject(i).getString("check_created");
for(int j = 0; j < eventList.size(); j++) {
if(eventList.get(j).cal_type.charAt(0) == 'N' && eventList.get(j).cal_srl.equals(check_cal_srl)) {
final int index = j;
new Thread(new Runnable() {
@Override
public void run() {
ScheduleFragment.this.getActivity().runOnUiThread(new Runnable(){
@Override
public void run() {
eventList.get(index).isChecked = true;
adapter1.notifyDataSetChanged();
calendarDayAdapter.notifyDataSetChanged();
calendarWeekAdapter.notifyDataSetChanged();
}
});
}
}).start();
break;
}
}
}
}
else if(uri.equals("Class/getClassStudent")) {
String nativeData = jsonObj.getString("data");
JSONArray dataArray = new JSONArray(nativeData);
for(int i = 0; i < dataArray.length(); i++) {
String member_srl = dataArray.getJSONObject(i).getString("member_srl");
String member_name = dataArray.getJSONObject(i).getString("member_name");
String member_type = dataArray.getJSONObject(i).getString("member_type");
String member_org_srl = dataArray.getJSONObject(i).getString("member_org_srl");
String member_picture = dataArray.getJSONObject(i).getString("member_picture");
JSONObject studentObj = dataArray.getJSONObject(i).getJSONObject("student");
String student_srl = studentObj.getString("student_srl");
String student_member_srl = studentObj.getString("student_member_srl");
String student_class_srl = studentObj.getString("student_class_srl");
String student_parent_srl = studentObj.getString("student_parent_srl");
String student_teacher_srl = studentObj.getString("student_teacher_srl");
String student_shuttle_srl = studentObj.getString("student_shuttle_srl");
String student_birthday = studentObj.getString("student_birthday");
String student_parent_key = studentObj.getString("student_parent_key");
if(student_birthday.equals("0"))
continue;
Date date = new SimpleDateFormat("yyyyMMdd").parse(student_birthday);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
if( calendar.get(Calendar.MONTH) == this.month.get(Calendar.MONTH)) {
String dateString = "" + Calendar.getInstance().get(Calendar.YEAR) + new SimpleDateFormat("-MM-dd").format(date);
eventList.add(new CalendarEvent(1, dateString, dateString, member_name, "", member_org_srl, student_class_srl, member_srl, "B"));
}
}
new Thread(new Runnable() {
@Override
public void run() {
ScheduleFragment.this.getActivity().runOnUiThread(new Runnable(){
@Override
public void run() {
adapter1.notifyDataSetChanged();
refreshBirthdayCounter();
}
});
}
}).start();
}
}
else {
}
}
catch(JSONException e) {
StringWriter errors = new StringWriter();
e.printStackTrace(new PrintWriter(errors));
String s = errors.toString();
System.out.println(s);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}