1 /* DashboardVorlesungsplan.java
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.
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.
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/>.
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;
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;
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;
40 * A simple {@link Fragment} subclass.
42 public class DashboardVorlesungsplan extends CampusAppFragment {
43 private static int lastGeneratedViewId = 572000;
45 private List<CourseEvent> events1 = new ArrayList<CourseEvent>();
46 private List<CourseEvent> events2 = new ArrayList<CourseEvent>();
47 private String courseName;
49 public DashboardVorlesungsplan() {
50 // Required empty public constructor
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()) {
67 public void onResume() {
69 if(courseName != null)
73 private int getDayId(long time) {
74 Date date = new Date(time * 1000);
75 return getDayId(date);
77 private int getDayId(Date date) {
78 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
79 return Integer.parseInt(dateFormat.format(date));
82 private void loadViewData() {
83 if(AppContext == null)
84 AppContext = CampusAppContext.getInstance();
85 long now = (new Date()).getTime() / 1000;
86 long tomorrow = now + 86400;
88 CourseEvent events[] = AppContext.getDatabaseManager().getCourseCalendarTimetable(courseName, now, 2);
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]);
97 events2.add(events[i]);
101 RelativeLayout container;
103 container = (RelativeLayout)view.findViewById(R.id.date1Overview);
104 buildDayView(container, events1);
105 container.setOnClickListener(new View.OnClickListener() {
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);
113 AppContext.getNavigationManager().navigatePage("Vorlesungsplan", args);
117 container = (RelativeLayout)view.findViewById(R.id.date2Overview);
118 buildDayView(container, events2);
119 container.setOnClickListener(new View.OnClickListener() {
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);
127 AppContext.getNavigationManager().navigatePage("Vorlesungsplan", args);
131 int todayDayId = getDayId(now);
132 int tomorrowDayId = getDayId(tomorrow);
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));
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));
150 private void buildDayView(RelativeLayout container, List<CourseEvent> events) {
151 container.removeAllViews();
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;
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);
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));
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);
183 android:layout_alignTop="@+id/date1time2"
184 android:layout_toRightOf="@+id/date1time1"
185 android:layout_toEndOf="@+id/date1time1"
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);
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);
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);
207 date = new Date(event.getEventTo()*1000);
208 leftCol.setText(dateFormat.format(date));
211 container.addView(rightCol);
212 container.addView(leftCol);
216 private String getDateText(Date eventDate, int todayDayId, int tomorrowDayId) {
217 int date1DayId = getDayId(eventDate);
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);
224 String dayStr = Tools.getWeekdayString(eventDate);
225 SimpleDateFormat dateFormat = new SimpleDateFormat(AppContext.getResString(R.string.timeformat_dashboard_vorlesungsplan_date));
227 datetext = dayStr + ", " + dateFormat.format(eventDate);
232 private int generateViewId() {
233 if (Build.VERSION.SDK_INT >= 17)
234 return View.generateViewId();
236 return lastGeneratedViewId++;