alpha 0.0.1
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / fragments / DashboardVorlesungsplan.java
1 package de.dhbwloe.campusapp.fragments;
2
3
4 import android.os.Build;
5 import android.os.Bundle;
6 import android.support.v4.app.Fragment;
7 import android.view.LayoutInflater;
8 import android.view.View;
9 import android.view.ViewGroup;
10 import android.widget.AdapterView;
11 import android.widget.RelativeLayout;
12 import android.widget.TextView;
13
14 import java.text.SimpleDateFormat;
15 import java.util.ArrayList;
16 import java.util.Calendar;
17 import java.util.Date;
18 import java.util.List;
19
20 import de.dhbwloe.campusapp.CampusAppContext;
21 import de.dhbwloe.campusapp.CampusAppFragment;
22 import de.dhbwloe.campusapp.R;
23 import de.dhbwloe.campusapp.Tools;
24 import de.dhbwloe.campusapp.vorlesungen.CourseEvent;
25
26 /**
27  * A simple {@link Fragment} subclass.
28  */
29 public class DashboardVorlesungsplan extends CampusAppFragment {
30     private static int lastGeneratedViewId = 572000;
31     private View view;
32     private List<CourseEvent> events1 = new ArrayList<CourseEvent>();
33     private List<CourseEvent> events2 = new ArrayList<CourseEvent>();
34     private String courseName;
35
36     public DashboardVorlesungsplan() {
37         // Required empty public constructor
38     }
39
40
41     @Override
42     public View onCreateView(LayoutInflater inflater, ViewGroup container,
43                              Bundle savedInstanceState) {
44         view = inflater.inflate(R.layout.fragment_dashboard_timetable, container, false);
45         String kursTag = AppContext.getDatabaseManager().getRuntimeCache("CourseName");
46         if(kursTag == null || kursTag.isEmpty()) {
47             return null;
48         }
49         courseName = kursTag;
50         return view;
51     }
52
53     @Override
54     public void onResume() {
55         super.onResume();
56         if(courseName != null)
57             loadViewData();
58     }
59
60     private int getDayId(long time) {
61         Date date = new Date(time * 1000);
62         return getDayId(date);
63     }
64     private int getDayId(Date date) {
65         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
66         return Integer.parseInt(dateFormat.format(date));
67     }
68
69     private void loadViewData() {
70         if(AppContext == null)
71             AppContext = CampusAppContext.getInstance();
72         long now = (new Date()).getTime() / 1000;
73         long tomorrow = now + 86400;
74
75         CourseEvent events[] = AppContext.getDatabaseManager().getCourseCalendarTimetable(courseName, now, 2);
76         events1.clear();
77         events2.clear();
78         if(events.length > 0) {
79             int firstDayId = getDayId(events[0].getEventTo());
80             for (int i = 0; i < events.length; i++) {
81                 if (i == 0 || getDayId(events[i].getEventTo()) == firstDayId)
82                     events1.add(events[i]);
83                 else
84                     events2.add(events[i]);
85             }
86         }
87
88         RelativeLayout container;
89
90         container = (RelativeLayout)view.findViewById(R.id.date1Overview);
91         buildDayView(container, events1);
92         container.setOnClickListener(new View.OnClickListener() {
93             @Override
94             public void onClick(View v) {
95                 Bundle args = new Bundle();
96                 if (events1.size() > 0) {
97                     long date = events1.get(0).getEventTo();
98                     args.putLong("date", date);
99                 }
100                 AppContext.getNavigationManager().navigatePage("Vorlesungsplan", args);
101             }
102         });
103
104         container = (RelativeLayout)view.findViewById(R.id.date2Overview);
105         buildDayView(container, events2);
106         container.setOnClickListener(new View.OnClickListener() {
107             @Override
108             public void onClick(View v) {
109                 Bundle args = new Bundle();
110                 if (events1.size() > 0) {
111                     long date = events2.get(0).getEventTo();
112                     args.putLong("date", date);
113                 }
114                 AppContext.getNavigationManager().navigatePage("Vorlesungsplan", args);
115             }
116         });
117
118         int todayDayId = getDayId(now);
119         int tomorrowDayId = getDayId(tomorrow);
120         Date date;
121
122         TextView date1 = (TextView) view.findViewById(R.id.dateView1);
123         if(events1.size() > 0) {
124             date = new Date(events1.get(0).getEventTo() * 1000);
125             date1.setText(getDateText(date, todayDayId, tomorrowDayId));
126         } else
127             date1.setText("");
128
129         TextView date2 = (TextView) view.findViewById(R.id.dateView2);
130         if(events2.size() > 0) {
131             date = new Date(events2.get(0).getEventTo() * 1000);
132             date2.setText(getDateText(date, todayDayId, tomorrowDayId));
133         } else
134             date2.setText("");
135     }
136
137     private void buildDayView(RelativeLayout container, List<CourseEvent> events) {
138         container.removeAllViews();
139
140         Date date;
141         TextView leftCol, rightCol = null;
142         RelativeLayout.LayoutParams params;
143         SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
144         int firstLeftColId = 0;
145
146         if(events.size() > 0) {
147             leftCol = new TextView(AppContext.getMainActivity());
148             params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
149                             RelativeLayout.LayoutParams.WRAP_CONTENT);
150             params.setMargins(8, 4, 0, 0);
151             leftCol.setLayoutParams(params);
152             leftCol.setId(generateViewId());
153             firstLeftColId = leftCol.getId();
154             container.addView(leftCol);
155         } else {
156             leftCol = null;
157         }
158
159         for(int i = 0; i < events.size(); i++) {
160             CourseEvent event = events.get(i);
161             date = new Date(event.getEventFrom()*1000);
162             leftCol.setText(dateFormat.format(date));
163
164             rightCol = new TextView(AppContext.getMainActivity());
165             rightCol.setId(generateViewId());
166             params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
167                     RelativeLayout.LayoutParams.WRAP_CONTENT);
168             params.setMargins(12, 12, 0, 0);
169             /*
170                     android:layout_alignTop="@+id/date1time2"
171                     android:layout_toRightOf="@+id/date1time1"
172                     android:layout_toEndOf="@+id/date1time1"
173              */
174             params.addRule(RelativeLayout.ALIGN_TOP, leftCol.getId());
175             params.addRule(RelativeLayout.RIGHT_OF, firstLeftColId);
176             params.addRule(RelativeLayout.END_OF, firstLeftColId);
177             rightCol.setLayoutParams(params);
178
179             String coursetitle = "";
180             if(event.getCourseType() == CourseEvent.CourseType.COURSETYPE_KLAUSUR)
181                 coursetitle += AppContext.getResString(R.string.dashboard_calendar_klausur);
182             coursetitle += event.getEventShortTitle();
183             rightCol.setText(coursetitle);
184
185
186             leftCol = new TextView(AppContext.getMainActivity());
187             leftCol.setId(generateViewId());
188             params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
189                     RelativeLayout.LayoutParams.WRAP_CONTENT);
190             params.setMargins(8, -8, 0, 0);
191             params.addRule(RelativeLayout.BELOW, rightCol.getId());
192             leftCol.setLayoutParams(params);
193
194             date = new Date(event.getEventTo()*1000);
195             leftCol.setText(dateFormat.format(date));
196
197
198             container.addView(rightCol);
199             container.addView(leftCol);
200         }
201     }
202
203     private String getDateText(Date eventDate, int todayDayId, int tomorrowDayId) {
204         int date1DayId = getDayId(eventDate);
205         String datetext;
206         if(date1DayId == todayDayId)
207             datetext = AppContext.getResString(R.string.dashboard_calendar_today);
208         else if(date1DayId == tomorrowDayId)
209             datetext = AppContext.getResString(R.string.dashboard_calendar_tomorrow);
210         else {
211             int weekdayResIds[] = new int[] { R.string.week_sunday, R.string.week_monday, R.string.week_tuesday, R.string.week_wednesday, R.string.week_thursday, R.string.week_friday, R.string.week_saturday };
212             Calendar cal = Calendar.getInstance();
213             cal.setTime(eventDate);
214             int dow = cal.get(Calendar.DAY_OF_WEEK);
215             SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM");
216
217             datetext = AppContext.getResString(weekdayResIds[dow]) + ", " + dateFormat.format(eventDate);
218         }
219         return datetext;
220     }
221
222     private int generateViewId() {
223         if (Build.VERSION.SDK_INT >= 17)
224             return View.generateViewId();
225         else
226             return lastGeneratedViewId++;
227     }
228
229 }