/*
* Copyright (C) 2014 Maigret Aurelien / Colin Julien
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package net.dewep.intranetepitech.ui.calendar;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import fr.qinder.layout.ScrollViewEvent;
import fr.qinder.layout.ScrollViewEventListener;
import net.dewep.intranetepitech.R;
import net.dewep.intranetepitech.api.model.EventModel;
import net.dewep.intranetepitech.api.request.CalendarAPI;
import net.dewep.intranetepitech.ui.UiFragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
/**
* TODO: Comments this class
*
* @author Maigret Aurelien
* @author Colin Julien
*/
public class CalendarFragment extends UiFragment {
private Calendar mDateStart;
private Calendar mDateEnd;
private ManageCalendar mCalendar;
private View mSliderTop;
private View mSliderBot;
private Boolean isLoad = false;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.ui_calendar_fragment, container, false);
mSliderTop = rootView.findViewById(R.id.ui_calendar_slider_top);
mSliderBot = rootView.findViewById(R.id.ui_calendar_slider_bot);
setSliderTop(false);
setSliderBot(false);
mDateStart = GregorianCalendar.getInstance();
mDateStart.add(Calendar.DAY_OF_YEAR, -4);
mDateEnd = GregorianCalendar.getInstance();
mDateEnd.add(Calendar.DAY_OF_YEAR, 30);
mCalendar = new ManageCalendar(inflater, (LinearLayout) rootView.findViewById(R.id.ui_calendar_container));
loadEvents(mDateStart, mDateEnd, true, true);
((ScrollViewEvent) rootView.findViewById(R.id.ui_calendar_scrollviewevent)).setScrollViewListener(new ScrollViewEventListener() {
@Override
public void onTop(ScrollViewEvent scrollView) {
if (!isLoad) {
Calendar end = (Calendar) mDateStart.clone();
end.add(Calendar.DAY_OF_YEAR, -1);
mDateStart.add(Calendar.DAY_OF_YEAR, -7);
loadEvents(mDateStart, end, true, false);
}
}
@Override
public void onScrollChanged(ScrollViewEvent scrollView, int x, int y, int oldx, int oldy) {
}
@Override
public void onBot(ScrollViewEvent scrollView) {
if (!isLoad) {
Calendar start = (Calendar) mDateEnd.clone();
start.add(Calendar.DAY_OF_YEAR, +1);
mDateEnd.add(Calendar.DAY_OF_YEAR, +7);
loadEvents(start, mDateEnd, false, true);
}
}
});
return rootView;
}
private void setSliderTop(Boolean state) {
mSliderTop.setVisibility(state ? View.VISIBLE : View.GONE);
}
private void setSliderBot(Boolean state) {
mSliderBot.setVisibility(state ? View.VISIBLE : View.GONE);
}
private void loadEvents(Calendar start, Calendar end, final Boolean sliderTop, final Boolean sliderBot) {
isLoad = true;
if (sliderTop && sliderBot) {
setSliderTop(true);
} else if (sliderTop) {
setSliderTop(true);
} else if (sliderBot) {
setSliderBot(true);
}
new CalendarAPI(start, end) {
@Override
public void onSuccess() {
List<EventModel> events = getEvents();
for (int i = 0; i < events.size(); i++) {
EventModel e = events.get(i);
mCalendar.addEvent(e);
}
if (sliderTop && sliderBot) {
mCalendar.addEvent(new TodayEventModel());
}
mCalendar.refreshFiltering();
setSliderTop(false);
setSliderBot(false);
isLoad = false;
}
@Override
public void onError() {
Log.d("ERROR LOAD EVENTS", response.getData());
setSliderTop(false);
setSliderBot(false);
isLoad = false;
}
};
}
@Override
protected int getIdTitle() {
return R.string.navigation_calendar;
}
}