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.Tools;
25 import de.dhbwloe.campusapp.search.SearchIndices;
28 * A simple {@link Fragment} subclass.
30 public class Mensa extends CampusAppFragment {
31 /* implement this for search results ;) */
32 public static SearchIndices[] GetSearchIndices() {
33 return new SearchIndices[] {
34 new SearchIndices("Mensa", true) {{
37 setTitle(R.string.search_mensa_title);
38 setDescription(R.string.search_mensa_description);
39 addKeyWord(R.string.search_mensa_keywords);
44 private TabLayout tabLayout;
45 private ViewPager viewPager;
46 private long viewDate;
49 public View onCreateView(LayoutInflater inflater, ViewGroup container,
50 Bundle savedInstanceState) {
51 View view = inflater.inflate(R.layout.fragment_mensa, container, false);
52 boolean viewmodeSet = false;
53 Bundle arguments = getArguments();
54 viewDate = (new Date()).getTime()/1000;
55 if(arguments != null) {
56 String showdate = arguments.getString("showdate");
58 if(showdate != null && !showdate.isEmpty() && (date = Long.parseLong(showdate)) > 0) {
63 AppContext.setTitle(AppContext.getResString(R.string.mensa_title));
66 toolbar = (Toolbar) view.findViewById(R.id.toolbar);
67 ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
69 ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
72 viewPager = (ViewPager) view.findViewById(R.id.viewpager);
73 setupViewPager(viewPager);
75 tabLayout = (TabLayout) view.findViewById(R.id.tabs);
76 tabLayout.setupWithViewPager(viewPager);
81 private void setupViewPager(ViewPager viewPager) {
82 final ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
85 long now = (new Date()).getTime()/1000;
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 = Tools.getWeekdayString(date, false);
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);