Added README.txt and GPL Header to Source Files
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / fragments / DashboardVorlesungsplan.java
1 /* DashboardVorlesungsplan.java
2  *
3  * This program is free software: you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License as published by
5  * the Free Software Foundation, either version 3 of the License, or
6  * (at your option) any later version.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  */
16 package de.dhbwloe.campusapp.fragments;
17 import android.os.Build;
18 import android.os.Bundle;
19 import android.support.v4.app.Fragment;
20 import android.view.LayoutInflater;
21 import android.view.View;
22 import android.view.ViewGroup;
23 import android.widget.AdapterView;
24 import android.widget.RelativeLayout;
25 import android.widget.TextView;
26
27 import java.text.SimpleDateFormat;
28 import java.util.ArrayList;
29 import java.util.Calendar;
30 import java.util.Date;
31 import java.util.List;
32
33 import de.dhbwloe.campusapp.CampusAppContext;
34 import de.dhbwloe.campusapp.CampusAppFragment;
35 import de.dhbwloe.campusapp.R;
36 import de.dhbwloe.campusapp.Tools;
37 import de.dhbwloe.campusapp.vorlesungen.CourseEvent;
38
39 /**
40  * A simple {@link Fragment} subclass.
41  */
42 public class DashboardVorlesungsplan extends CampusAppFragment {
43     private static int lastGeneratedViewId = 572000;
44     private View view;
45     private List<CourseEvent> events1 = new ArrayList<CourseEvent>();
46     private List<CourseEvent> events2 = new ArrayList<CourseEvent>();
47     private String courseName;
48
49     public DashboardVorlesungsplan() {
50         // Required empty public constructor
51     }
52
53
54     @Override
55     public View onCreateView(LayoutInflater inflater, ViewGroup container,
56                              Bundle savedInstanceState) {
57         view = inflater.inflate(R.layout.fragment_dashboard_timetable, container, false);
58         String kursTag = AppContext.getDatabaseManager().getRuntimeCache("CourseName");
59         if(kursTag == null || kursTag.isEmpty()) {
60             return view;
61         }
62         courseName = kursTag;
63         return view;
64     }
65
66     @Override
67     public void onResume() {
68         super.onResume();
69         if(courseName != null)
70             loadViewData();
71     }
72
73     private int getDayId(long time) {
74         Date date = new Date(time * 1000);
75         return getDayId(date);
76     }
77     private int getDayId(Date date) {
78         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
79         return Integer.parseInt(dateFormat.format(date));
80     }
81
82     private void loadViewData() {
83         if(AppContext == null)
84             AppContext = CampusAppContext.getInstance();
85         long now = (new Date()).getTime() / 1000;
86         long tomorrow = now + 86400;
87
88         CourseEvent events[] = AppContext.getDatabaseManager().getCourseCalendarTimetable(courseName, now, 2);
89         events1.clear();
90         events2.clear();
91         if(events.length > 0) {
92             int firstDayId = getDayId(events[0].getEventTo());
93             for (int i = 0; i < events.length; i++) {
94                 if (i == 0 || getDayId(events[i].getEventTo()) == firstDayId)
95                     events1.add(events[i]);
96                 else
97                     events2.add(events[i]);
98             }
99         }
100
101         RelativeLayout container;
102
103         container = (RelativeLayout)view.findViewById(R.id.date1Overview);
104         buildDayView(container, events1);
105         container.setOnClickListener(new View.OnClickListener() {
106             @Override
107             public void onClick(View v) {
108                 Bundle args = new Bundle();
109                 if (events1.size() > 0) {
110                     long date = events1.get(0).getEventTo();
111                     args.putLong("date", date);
112                 }
113                 AppContext.getNavigationManager().navigatePage("Vorlesungsplan", args);
114             }
115         });
116
117         container = (RelativeLayout)view.findViewById(R.id.date2Overview);
118         buildDayView(container, events2);
119         container.setOnClickListener(new View.OnClickListener() {
120             @Override
121             public void onClick(View v) {
122                 Bundle args = new Bundle();
123                 if (events1.size() > 0) {
124                     long date = events2.get(0).getEventTo();
125                     args.putLong("date", date);
126                 }
127                 AppContext.getNavigationManager().navigatePage("Vorlesungsplan", args);
128             }
129         });
130
131         int todayDayId = getDayId(now);
132         int tomorrowDayId = getDayId(tomorrow);
133         Date date;
134
135         TextView date1 = (TextView) view.findViewById(R.id.dateView1);
136         if(events1.size() > 0) {
137             date = new Date(events1.get(0).getEventTo() * 1000);
138             date1.setText(getDateText(date, todayDayId, tomorrowDayId));
139         } else
140             date1.setText("");
141
142         TextView date2 = (TextView) view.findViewById(R.id.dateView2);
143         if(events2.size() > 0) {
144             date = new Date(events2.get(0).getEventTo() * 1000);
145             date2.setText(getDateText(date, todayDayId, tomorrowDayId));
146         } else
147             date2.setText("");
148     }
149
150     private void buildDayView(RelativeLayout container, List<CourseEvent> events) {
151         container.removeAllViews();
152
153         Date date;
154         TextView leftCol, rightCol = null;
155         RelativeLayout.LayoutParams params;
156         SimpleDateFormat dateFormat = new SimpleDateFormat(AppContext.getResString(R.string.timeformat_dashboard_vorlesungsplan_time));
157         int firstLeftColId = 0;
158
159         if(events.size() > 0) {
160             leftCol = new TextView(AppContext.getMainActivity());
161             params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
162                             RelativeLayout.LayoutParams.WRAP_CONTENT);
163             params.setMargins(8, 4, 0, 0);
164             leftCol.setLayoutParams(params);
165             leftCol.setId(generateViewId());
166             firstLeftColId = leftCol.getId();
167             container.addView(leftCol);
168         } else {
169             leftCol = null;
170         }
171
172         for(int i = 0; i < events.size(); i++) {
173             CourseEvent event = events.get(i);
174             date = new Date(event.getEventFrom()*1000);
175             leftCol.setText(dateFormat.format(date));
176
177             rightCol = new TextView(AppContext.getMainActivity());
178             rightCol.setId(generateViewId());
179             params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
180                     RelativeLayout.LayoutParams.WRAP_CONTENT);
181             params.setMargins(12, 12, 0, 0);
182             /*
183                     android:layout_alignTop="@+id/date1time2"
184                     android:layout_toRightOf="@+id/date1time1"
185                     android:layout_toEndOf="@+id/date1time1"
186              */
187             params.addRule(RelativeLayout.ALIGN_TOP, leftCol.getId());
188             params.addRule(RelativeLayout.RIGHT_OF, firstLeftColId);
189             params.addRule(RelativeLayout.END_OF, firstLeftColId);
190             rightCol.setLayoutParams(params);
191
192             String coursetitle = "";
193             if(event.getCourseType() == CourseEvent.CourseType.COURSETYPE_KLAUSUR)
194                 coursetitle += AppContext.getResString(R.string.dashboard_calendar_klausur);
195             coursetitle += event.getEventShortTitle();
196             rightCol.setText(coursetitle);
197
198
199             leftCol = new TextView(AppContext.getMainActivity());
200             leftCol.setId(generateViewId());
201             params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
202                     RelativeLayout.LayoutParams.WRAP_CONTENT);
203             params.setMargins(8, -8, 0, 0);
204             params.addRule(RelativeLayout.BELOW, rightCol.getId());
205             leftCol.setLayoutParams(params);
206
207             date = new Date(event.getEventTo()*1000);
208             leftCol.setText(dateFormat.format(date));
209
210
211             container.addView(rightCol);
212             container.addView(leftCol);
213         }
214     }
215
216     private String getDateText(Date eventDate, int todayDayId, int tomorrowDayId) {
217         int date1DayId = getDayId(eventDate);
218         String datetext;
219         if(date1DayId == todayDayId)
220             datetext = AppContext.getResString(R.string.dashboard_calendar_today);
221         else if(date1DayId == tomorrowDayId)
222             datetext = AppContext.getResString(R.string.dashboard_calendar_tomorrow);
223         else {
224             String dayStr = Tools.getWeekdayString(eventDate);
225             SimpleDateFormat dateFormat = new SimpleDateFormat(AppContext.getResString(R.string.timeformat_dashboard_vorlesungsplan_date));
226
227             datetext = dayStr + ", " + dateFormat.format(eventDate);
228         }
229         return datetext;
230     }
231
232     private int generateViewId() {
233         if (Build.VERSION.SDK_INT >= 17)
234             return View.generateViewId();
235         else
236             return lastGeneratedViewId++;
237     }
238
239 }