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