alpha 0.0.1
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / fragments / Mensa.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.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;
15
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;
21
22 import de.dhbwloe.campusapp.CampusAppFragment;
23 import de.dhbwloe.campusapp.R;
24 import de.dhbwloe.campusapp.search.SearchIndices;
25
26 /**
27  * A simple {@link Fragment} subclass.
28  */
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) {{
34                     setUpdateTime(1);
35                     setTarget("#Mensa");
36                     setTitle("Mensa");
37                     setDescription("Aktuelle Mensapläne");
38                     addKeyWord("mensa, kantine, essen, mittagessen, mensaplan, plan, hunger, mittag");
39                 }},
40         };
41     }
42
43     private TabLayout tabLayout;
44     private ViewPager viewPager;
45     private long viewDate;
46
47     @Override
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");
56             long date;
57             if(showdate != null && !showdate.isEmpty() && (date = Long.parseLong(showdate)) > 0) {
58                 viewDate = date;
59             }
60         }
61
62         AppContext.setTitle("Mensa Speiseplan");
63
64         /*
65         toolbar = (Toolbar) view.findViewById(R.id.toolbar);
66         ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
67
68         ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
69         */
70
71         viewPager = (ViewPager) view.findViewById(R.id.viewpager);
72         setupViewPager(viewPager);
73
74         tabLayout = (TabLayout) view.findViewById(R.id.tabs);
75         tabLayout.setupWithViewPager(viewPager);
76
77         return view;
78     }
79
80     private void setupViewPager(ViewPager viewPager) {
81         final ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
82
83         long[] showDates;
84         long now = (new Date()).getTime()/1000;
85         if(viewDate < now)
86             now = viewDate;
87
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);
97         dow -= 2;
98         if(dow < 0) // monday should be 0!
99             dow += 7;
100         long subTimeToWeekStart = (86400 * dow);
101         long showDateFrom = midnight - subTimeToWeekStart;
102
103         showDates = AppContext.getDatabaseManager().getDaysWithPlanData(showDateFrom, now + (30 * 86400));
104
105         int activeItem = -1;
106         long activeItemDiff = -1;
107         Bundle args = getArguments();
108         int lastWeekday = 0;
109         for(int i = 0; i < showDates.length; i++) {
110             long date = showDates[i];
111             Bundle bundle = new Bundle();
112             if(args != null)
113                 bundle.putAll(args);
114             String title;
115             SimpleDateFormat sdf;
116
117             cal.setTime(new Date(date * 1000));
118             int weekday = cal.get(Calendar.DAY_OF_WEEK);
119             weekday -= 2; // monday should be 0!
120             if(weekday < 0)
121                 weekday += 7;
122
123             if(viewDate > 0) {
124                 long diff = Math.abs(viewDate - date);
125                 if(activeItem == -1 || diff < activeItemDiff) {
126                     activeItem = i;
127                     activeItemDiff = diff;
128                 }
129             }
130
131             if(lastWeekday > weekday) {
132                 adapter.addFragment(null, null);
133             }
134             lastWeekday = weekday;
135
136             title = AppContext.getResString(weekdayResIds[weekday]);
137             bundle.putLong("date", date);
138             adapter.addFragment(bundle, title);
139         }
140         viewPager.setAdapter(adapter);
141         viewPager.setCurrentItem(activeItem);
142
143         MensaTagesplan tagesplan = (MensaTagesplan)adapter.getItem(activeItem);
144         tagesplan.onSetActive();
145
146
147         viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
148             @Override
149             public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
150
151             }
152
153             @Override
154             public void onPageSelected(int position) {
155                 MensaTagesplan tagesplan = (MensaTagesplan)adapter.getItem(position);
156                 tagesplan.onSetActive();
157             }
158
159             @Override
160             public void onPageScrollStateChanged(int state) {
161
162             }
163         });
164     }
165
166
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<>();
171
172         public ViewPagerAdapter(FragmentManager manager) {
173             super(manager);
174         }
175
176         @Override
177         public Fragment getItem(int position) {
178             Fragment fragment;
179             while(mFragmentList.size() <= position) {
180                 mFragmentList.add(null);
181             }
182             if(mFragmentList.get(position) != null)
183                 return mFragmentList.get(position);
184             fragment = new MensaTagesplan();
185
186             fragment.setArguments(mFragmentDataList.get(position));
187             mFragmentList.set(position, fragment);
188             return fragment;
189         }
190
191         @Override
192         public int getCount() {
193             return mFragmentDataList.size();
194         }
195
196         public void addFragment(Bundle fragmentdata, String title) {
197             if(title == null) {
198                 Bundle bnd = new Bundle();
199                 bnd.putBoolean("parentIsMensaFragment", true);
200                 mFragmentDataList.add(bnd);
201                 mFragmentTitleList.add("");
202                 return;
203             }
204
205             fragmentdata.putBoolean("parentIsMensaFragment", true);
206             mFragmentDataList.add(fragmentdata);
207             mFragmentTitleList.add(title);
208         }
209
210         @Override
211         public CharSequence getPageTitle(int position) {
212             return mFragmentTitleList.get(position);
213         }
214     }
215
216 }