beta 0.1.1
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / fragments / Vorlesungsplan.java
1 package de.dhbwloe.campusapp.fragments;
2
3
4 import android.os.Bundle;
5 import android.support.design.widget.TabLayout;
6 import android.support.v4.app.Fragment;
7 import android.support.v4.app.FragmentManager;
8 import android.support.v4.app.FragmentPagerAdapter;
9 import android.support.v4.view.ViewPager;
10 import android.view.LayoutInflater;
11 import android.view.View;
12 import android.view.ViewGroup;
13 import android.widget.LinearLayout;
14 import android.widget.RelativeLayout;
15 import android.widget.TextView;
16
17 import java.text.SimpleDateFormat;
18 import java.util.ArrayList;
19 import java.util.Calendar;
20 import java.util.Date;
21 import java.util.List;
22
23 import de.dhbwloe.campusapp.CampusAppContext;
24 import de.dhbwloe.campusapp.CampusAppFragment;
25 import de.dhbwloe.campusapp.R;
26 import de.dhbwloe.campusapp.search.SearchIndices;
27 import de.dhbwloe.campusapp.vorlesungen.CourseEvent;
28 import de.dhbwloe.campusapp.vorlesungen.CourseGroup;
29
30 /**
31  * A simple {@link Fragment} subclass.
32  */
33 public class Vorlesungsplan extends CampusAppFragment {
34     public interface VorlesungsplanFragment {
35         void setActive();
36     }
37
38     /* implement this for search results ;) */
39     public static SearchIndices[] GetSearchIndices() {
40         return new SearchIndices[] {
41                 new SearchIndices("Vorlesungsplan", true) {{
42                     setUpdateTime(1);
43                     setTarget("#Vorlesungsplan");
44                     setTitle(R.string.search_vorlesungsplan_title);
45                     setDescription(R.string.search_vorlesungsplan_description);
46                     addKeyWord(R.string.search_vorlesungsplan_keywords);
47                 }},
48                 new SearchIndices("VorlesungsplanExams", true) {{
49                     setUpdateTime(1);
50                     setTarget("#Vorlesungsplan#view=exams");
51                     setTitle(R.string.search_vorlesungsplan_klausur_title);
52                     setDescription(R.string.search_vorlesungsplan_klausur_description);
53                     addKeyWord(R.string.search_vorlesungsplan_klausur_keywords);
54                 }},
55         };
56     }
57
58     @Override
59     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
60         Bundle arguments = getArguments();
61         int showGroupId = 0;
62         boolean showExamsPage = false;
63         if(arguments != null) {
64             String groupid = arguments.getString("groupid");
65             if(groupid != null)
66                 showGroupId = Integer.parseInt(groupid);
67             String view = arguments.getString("view");
68             if(view != null && view.equalsIgnoreCase("exams"))
69                 showExamsPage = true;
70         }
71
72         View view = null;
73         if(showGroupId > 0) {
74             view = inflater.inflate(R.layout.fragment_vorlesungsplan_group, container, false);
75
76             CourseGroup group = AppContext.getDatabaseManager().getCourseGroup(showGroupId);
77             if(group != null) {
78                 AppContext.setTitle(AppContext.getResString(R.string.vorlesungsplan_group_title, group.getGroupName()));
79
80                 showGroupEvents(view, group);
81             } else
82                 view = null;
83         }
84         if(view == null) {
85             view = inflater.inflate(R.layout.fragment_vorlesungsplan, container, false);
86             AppContext.setTitle(AppContext.getResString(R.string.vorlesungsplan_title));
87
88             ViewPager pager = (ViewPager) view.findViewById(R.id.viewpager);
89             setupViewPager(pager);
90
91             if(showExamsPage)
92                 pager.setCurrentItem(2);
93
94             TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tabs);
95             tabLayout.setupWithViewPager(pager);
96         }
97
98         return view;
99     }
100
101     private void setupViewPager(ViewPager viewPager) {
102         final ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
103
104         adapter.addFragment(new VorlesungsplanUpcoming(), AppContext.getResString(R.string.vorlesungsplan_upcoming));
105         adapter.addFragment(new VorlesungsplanGroups(), AppContext.getResString(R.string.vorlesungsplan_groups));
106         adapter.addFragment(new VorlesungsplanExams(), AppContext.getResString(R.string.vorlesungsplan_exams));
107
108         viewPager.setAdapter(adapter);
109         viewPager.setCurrentItem(0);
110
111         VorlesungsplanFragment fragment = (VorlesungsplanFragment)adapter.getItem(0);
112         fragment.setActive();
113
114
115         viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
116             @Override
117             public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
118
119             }
120
121             @Override
122             public void onPageSelected(int position) {
123                 VorlesungsplanFragment fragment = (VorlesungsplanFragment)adapter.getItem(position);
124                 fragment.setActive();
125             }
126
127             @Override
128             public void onPageScrollStateChanged(int state) {
129
130             }
131         });
132     }
133
134     private void showGroupEvents(View view, CourseGroup group) {
135         CourseEvent events[] = AppContext.getDatabaseManager().getCourseEventsByGroup(group);
136
137         CourseEvent nextEvent = null;
138         CourseEvent lastEvent = null;
139         CourseEvent examEvent = null;
140         long now = (new Date()).getTime()/1000;
141         SimpleDateFormat dateFormat = new SimpleDateFormat(AppContext.getResString(R.string.timeformat_vorlesungsplan_fulldate));
142
143         LinearLayout container = (LinearLayout) view.findViewById(R.id.allEventsList);
144         TextView groupName = (TextView) view.findViewById(R.id.courseTitle);
145         TextView nextEventView = (TextView) view.findViewById(R.id.nextEvent);
146         TextView lastEventView = (TextView) view.findViewById(R.id.lastEvent);
147         TextView examEventView = (TextView) view.findViewById(R.id.klausurEvent);
148
149         groupName.setText(group.getGroupName());
150         container.removeAllViews();
151
152         for(CourseEvent event : events) {
153             if(event.getEventFrom() >= now && nextEvent == null)
154                 nextEvent = event;
155             if(event.getCourseType() == CourseEvent.CourseType.COURSETYPE_KLAUSUR)
156                 examEvent = event;
157             else
158                 lastEvent = event;
159
160             LinearLayout eventEntry = new LinearLayout(view.getContext());
161             eventEntry.setLayoutParams(new LinearLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
162                     RelativeLayout.LayoutParams.WRAP_CONTENT));
163             eventEntry.setOrientation(LinearLayout.HORIZONTAL);
164
165             TextView dotView = new TextView(view.getContext());
166             dotView.setText(AppContext.getResString(R.string.listDot));
167             eventEntry.addView(dotView);
168
169             if(event.getEventFrom() < now)
170                 dotView.setTextColor(AppContext.getMainActivity().getResources().getColor(R.color.color_dhbw_lightgray));
171             else
172                 dotView.setTextColor(AppContext.getMainActivity().getResources().getColor(R.color.color_dhbw_darkred));
173
174             TextView nameView = new TextView(view.getContext());
175             LinearLayout.LayoutParams nameViewLayoutParams = new LinearLayout.LayoutParams(
176                     LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
177             nameViewLayoutParams.setMargins(16,0,0,0);
178             nameView.setLayoutParams(nameViewLayoutParams);
179             nameView.setText(dateFormat.format(new Date(event.getEventFrom() * 1000)));
180             eventEntry.addView(nameView);
181
182             TextView locationView = new TextView(view.getContext());
183             LinearLayout.LayoutParams locationViewLayoutParams = new LinearLayout.LayoutParams(
184                     LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
185             locationViewLayoutParams.setMargins(32,0,0,0);
186             locationView.setLayoutParams(locationViewLayoutParams);
187             locationView.setText(event.getEventLocation());
188             eventEntry.addView(locationView);
189
190             container.addView(eventEntry);
191         }
192
193         if(nextEvent != null)
194             nextEventView.setText(dateFormat.format(new Date(nextEvent.getEventFrom() * 1000)));
195         else
196             nextEventView.setText(CampusAppContext.getInstance().getResString(R.string.vorlesungsplan_groups_nonext));
197
198         if(lastEvent != null)
199             lastEventView.setText(dateFormat.format(new Date(lastEvent.getEventFrom() * 1000)));
200         else
201             lastEventView.setText(CampusAppContext.getInstance().getResString(R.string.vorlesungsplan_groups_nonext));
202
203         if(examEvent != null)
204             examEventView.setText(dateFormat.format(new Date(examEvent.getEventFrom() * 1000)));
205         else
206             examEventView.setText(CampusAppContext.getInstance().getResString(R.string.vorlesungsplan_groups_noklausur));
207     }
208
209     class ViewPagerAdapter extends FragmentPagerAdapter {
210         private final List<Fragment> mFragmentList = new ArrayList<>();
211         private final List<String> mFragmentTitleList = new ArrayList<>();
212
213         public ViewPagerAdapter(FragmentManager manager) {
214             super(manager);
215         }
216
217         @Override
218         public Fragment getItem(int position) {
219             return mFragmentList.get(position);
220         }
221
222         @Override
223         public int getCount() {
224             return mFragmentList.size();
225         }
226
227         public void addFragment(Fragment fragment, String title) {
228             mFragmentList.add(fragment);
229             mFragmentTitleList.add(title);
230         }
231
232         @Override
233         public CharSequence getPageTitle(int position) {
234             return mFragmentTitleList.get(position);
235         }
236     }
237
238 }