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.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;
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;
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;
44 * A simple {@link Fragment} subclass.
46 public class Vorlesungsplan extends CampusAppFragment {
47 public interface VorlesungsplanFragment {
51 /* implement this for search results ;) */
52 public static SearchIndices[] GetSearchIndices() {
53 return new SearchIndices[] {
54 new SearchIndices("Vorlesungsplan", true) {{
56 setTarget("#Vorlesungsplan");
57 setTitle(R.string.search_vorlesungsplan_title);
58 setDescription(R.string.search_vorlesungsplan_description);
59 addKeyWord(R.string.search_vorlesungsplan_keywords);
61 new SearchIndices("VorlesungsplanExams", true) {{
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);
72 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
73 Bundle arguments = getArguments();
75 boolean showExamsPage = false;
76 if(arguments != null) {
77 String groupid = arguments.getString("groupid");
79 showGroupId = Integer.parseInt(groupid);
80 String view = arguments.getString("view");
81 if(view != null && view.equalsIgnoreCase("exams"))
87 view = inflater.inflate(R.layout.fragment_vorlesungsplan_group, container, false);
89 CourseGroup group = AppContext.getDatabaseManager().getCourseGroup(showGroupId);
91 AppContext.setTitle(AppContext.getResString(R.string.vorlesungsplan_group_title, group.getGroupName()));
93 showGroupEvents(view, group);
98 view = inflater.inflate(R.layout.fragment_vorlesungsplan, container, false);
99 AppContext.setTitle(AppContext.getResString(R.string.vorlesungsplan_title));
101 ViewPager pager = (ViewPager) view.findViewById(R.id.viewpager);
102 setupViewPager(pager);
105 pager.setCurrentItem(2);
107 TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tabs);
108 tabLayout.setupWithViewPager(pager);
114 private void setupViewPager(ViewPager viewPager) {
115 final ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
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));
121 viewPager.setAdapter(adapter);
122 viewPager.setCurrentItem(0);
124 VorlesungsplanFragment fragment = (VorlesungsplanFragment)adapter.getItem(0);
125 fragment.setActive();
128 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
130 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
135 public void onPageSelected(int position) {
136 VorlesungsplanFragment fragment = (VorlesungsplanFragment)adapter.getItem(position);
137 fragment.setActive();
141 public void onPageScrollStateChanged(int state) {
147 private void showGroupEvents(View view, CourseGroup group) {
148 CourseEvent events[] = AppContext.getDatabaseManager().getCourseEventsByGroup(group);
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));
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);
162 groupName.setText(group.getGroupName());
163 container.removeAllViews();
165 for(CourseEvent event : events) {
166 if(event.getEventFrom() >= now && nextEvent == null)
168 if(event.getCourseType() == CourseEvent.CourseType.COURSETYPE_KLAUSUR)
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);
178 TextView dotView = new TextView(view.getContext());
179 dotView.setText(AppContext.getResString(R.string.listDot));
180 eventEntry.addView(dotView);
182 if(event.getEventFrom() < now)
183 dotView.setTextColor(AppContext.getMainActivity().getResources().getColor(R.color.color_dhbw_lightgray));
185 dotView.setTextColor(AppContext.getMainActivity().getResources().getColor(R.color.color_dhbw_darkred));
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);
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);
203 container.addView(eventEntry);
206 if(nextEvent != null)
207 nextEventView.setText(dateFormat.format(new Date(nextEvent.getEventFrom() * 1000)));
209 nextEventView.setText(CampusAppContext.getInstance().getResString(R.string.vorlesungsplan_groups_nonext));
211 if(lastEvent != null)
212 lastEventView.setText(dateFormat.format(new Date(lastEvent.getEventFrom() * 1000)));
214 lastEventView.setText(CampusAppContext.getInstance().getResString(R.string.vorlesungsplan_groups_nonext));
216 if(examEvent != null)
217 examEventView.setText(dateFormat.format(new Date(examEvent.getEventFrom() * 1000)));
219 examEventView.setText(CampusAppContext.getInstance().getResString(R.string.vorlesungsplan_groups_noklausur));
222 class ViewPagerAdapter extends FragmentPagerAdapter {
223 private final List<Fragment> mFragmentList = new ArrayList<>();
224 private final List<String> mFragmentTitleList = new ArrayList<>();
226 public ViewPagerAdapter(FragmentManager manager) {
231 public Fragment getItem(int position) {
232 return mFragmentList.get(position);
236 public int getCount() {
237 return mFragmentList.size();
240 public void addFragment(Fragment fragment, String title) {
241 mFragmentList.add(fragment);
242 mFragmentTitleList.add(title);
246 public CharSequence getPageTitle(int position) {
247 return mFragmentTitleList.get(position);