1 package de.dhbwloe.campusapp.fragments;
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.support.v7.app.AppCompatActivity;
11 import android.support.v7.widget.Toolbar;
12 import android.view.LayoutInflater;
13 import android.view.View;
14 import android.view.ViewGroup;
16 import java.text.SimpleDateFormat;
17 import java.util.ArrayList;
18 import java.util.Calendar;
19 import java.util.Date;
20 import java.util.List;
22 import de.dhbwloe.campusapp.CampusAppFragment;
23 import de.dhbwloe.campusapp.R;
24 import de.dhbwloe.campusapp.search.SearchIndices;
27 * A simple {@link Fragment} subclass.
29 public class Mensa extends CampusAppFragment {
30 /* implement this for search results ;) */
31 public static SearchIndices[] GetSearchIndices() {
32 return new SearchIndices[] {
33 new SearchIndices("Mensa", true) {{
37 setDescription("Aktuelle Mensapläne");
38 addKeyWord("mensa, kantine, essen, mittagessen, mensaplan, plan, hunger, mittag");
43 private TabLayout tabLayout;
44 private ViewPager viewPager;
45 private long viewDate;
48 public View onCreateView(LayoutInflater inflater, ViewGroup container,
49 Bundle savedInstanceState) {
50 View view = inflater.inflate(R.layout.fragment_mensa, container, false);
51 boolean viewmodeSet = false;
52 Bundle arguments = getArguments();
53 viewDate = (new Date()).getTime()/1000;
54 if(arguments != null) {
55 String showdate = arguments.getString("showdate");
57 if(showdate != null && !showdate.isEmpty() && (date = Long.parseLong(showdate)) > 0) {
62 AppContext.setTitle("Mensa Speiseplan");
65 toolbar = (Toolbar) view.findViewById(R.id.toolbar);
66 ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
68 ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
71 viewPager = (ViewPager) view.findViewById(R.id.viewpager);
72 setupViewPager(viewPager);
74 tabLayout = (TabLayout) view.findViewById(R.id.tabs);
75 tabLayout.setupWithViewPager(viewPager);
80 private void setupViewPager(ViewPager viewPager) {
81 final ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
84 long now = (new Date()).getTime()/1000;
88 int weekdayResIds[] = new int[] { R.string.week_monday_short, R.string.week_tuesday_short, R.string.week_wednesday_short, R.string.week_thursday_short, R.string.week_friday_short, R.string.week_saturday_short, R.string.week_sunday_short };
89 Calendar cal = Calendar.getInstance();
90 cal.setTime(new Date(now * 1000));
91 cal.set(Calendar.HOUR_OF_DAY, 0);
92 cal.set(Calendar.MINUTE, 0);
93 cal.set(Calendar.SECOND, 0);
94 cal.set(Calendar.MILLISECOND, 0);
95 long midnight = cal.getTimeInMillis() / 1000;
96 int dow = cal.get(Calendar.DAY_OF_WEEK);
98 if(dow < 0) // monday should be 0!
100 long subTimeToWeekStart = (86400 * dow);
101 long showDateFrom = midnight - subTimeToWeekStart;
103 showDates = AppContext.getDatabaseManager().getDaysWithPlanData(showDateFrom, now + (30 * 86400));
106 long activeItemDiff = -1;
107 Bundle args = getArguments();
109 for(int i = 0; i < showDates.length; i++) {
110 long date = showDates[i];
111 Bundle bundle = new Bundle();
115 SimpleDateFormat sdf;
117 cal.setTime(new Date(date * 1000));
118 int weekday = cal.get(Calendar.DAY_OF_WEEK);
119 weekday -= 2; // monday should be 0!
124 long diff = Math.abs(viewDate - date);
125 if(activeItem == -1 || diff < activeItemDiff) {
127 activeItemDiff = diff;
131 if(lastWeekday > weekday) {
132 adapter.addFragment(null, null);
134 lastWeekday = weekday;
136 title = AppContext.getResString(weekdayResIds[weekday]);
137 bundle.putLong("date", date);
138 adapter.addFragment(bundle, title);
140 viewPager.setAdapter(adapter);
141 viewPager.setCurrentItem(activeItem);
143 MensaTagesplan tagesplan = (MensaTagesplan)adapter.getItem(activeItem);
144 tagesplan.onSetActive();
147 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
149 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
154 public void onPageSelected(int position) {
155 MensaTagesplan tagesplan = (MensaTagesplan)adapter.getItem(position);
156 tagesplan.onSetActive();
160 public void onPageScrollStateChanged(int state) {
167 class ViewPagerAdapter extends FragmentPagerAdapter {
168 private final List<Fragment> mFragmentList = new ArrayList<>();
169 private final List<Bundle> mFragmentDataList = new ArrayList<>();
170 private final List<String> mFragmentTitleList = new ArrayList<>();
172 public ViewPagerAdapter(FragmentManager manager) {
177 public Fragment getItem(int position) {
179 while(mFragmentList.size() <= position) {
180 mFragmentList.add(null);
182 if(mFragmentList.get(position) != null)
183 return mFragmentList.get(position);
184 fragment = new MensaTagesplan();
186 fragment.setArguments(mFragmentDataList.get(position));
187 mFragmentList.set(position, fragment);
192 public int getCount() {
193 return mFragmentDataList.size();
196 public void addFragment(Bundle fragmentdata, String title) {
198 Bundle bnd = new Bundle();
199 bnd.putBoolean("parentIsMensaFragment", true);
200 mFragmentDataList.add(bnd);
201 mFragmentTitleList.add("");
205 fragmentdata.putBoolean("parentIsMensaFragment", true);
206 mFragmentDataList.add(fragmentdata);
207 mFragmentTitleList.add(title);
211 public CharSequence getPageTitle(int position) {
212 return mFragmentTitleList.get(position);