alpha 0.0.2
[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.Tools;
25 import de.dhbwloe.campusapp.search.SearchIndices;
26
27 /**
28  * A simple {@link Fragment} subclass.
29  */
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) {{
35                     setUpdateTime(1);
36                     setTarget("#Mensa");
37                     setTitle(R.string.search_mensa_title);
38                     setDescription(R.string.search_mensa_description);
39                     addKeyWord(R.string.search_mensa_keywords);
40                 }},
41         };
42     }
43
44     private TabLayout tabLayout;
45     private ViewPager viewPager;
46     private long viewDate;
47
48     @Override
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");
57             long date;
58             if(showdate != null && !showdate.isEmpty() && (date = Long.parseLong(showdate)) > 0) {
59                 viewDate = date;
60             }
61         }
62
63         AppContext.setTitle(AppContext.getResString(R.string.mensa_title));
64
65         /*
66         toolbar = (Toolbar) view.findViewById(R.id.toolbar);
67         ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
68
69         ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
70         */
71
72         viewPager = (ViewPager) view.findViewById(R.id.viewpager);
73         setupViewPager(viewPager);
74
75         tabLayout = (TabLayout) view.findViewById(R.id.tabs);
76         tabLayout.setupWithViewPager(viewPager);
77
78         return view;
79     }
80
81     private void setupViewPager(ViewPager viewPager) {
82         final ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
83
84         long[] showDates;
85         long now = (new Date()).getTime()/1000;
86         if(viewDate < now)
87             now = viewDate;
88
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 = Tools.getWeekdayString(date, false);
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 }