Grundaufbau der App
[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.Date;
19 import java.util.List;
20
21 import de.dhbwloe.campusapp.CampusAppFragment;
22 import de.dhbwloe.campusapp.R;
23 import de.dhbwloe.campusapp.search.SearchIndices;
24
25 /**
26  * A simple {@link Fragment} subclass.
27  */
28 public class Mensa extends CampusAppFragment {
29     /* implement this for search results ;) */
30     public static SearchIndices[] GetSearchIndices() {
31         return new SearchIndices[] {
32                 new SearchIndices("Mensa", true) {{
33                     setUpdateTime(1);
34                     setTarget("#Mensa");
35                     setTitle("Mensa");
36                     setDescription("Aktuelle Mensapläne");
37                     addKeyWord("mensa, kantine, essen, mittagessen, mensaplan, plan, hunger, mittag");
38                 }},
39         };
40     }
41
42     private TabLayout tabLayout;
43     private ViewPager viewPager;
44     private boolean viewDayplan;
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                 viewDayplan = true;
60                 viewmodeSet = true;
61             }
62             if(!viewmodeSet) {
63                 String viewmode = arguments.getString("viewmode");
64                 if(viewmode != null && !viewmode.isEmpty()) {
65                     if(viewmode.equalsIgnoreCase("day"))
66                         viewDayplan = true;
67                     else
68                         viewDayplan = false;
69                     viewmodeSet = true;
70                 }
71             }
72         }
73         if(!viewmodeSet) {
74             String lastViewmode = AppContext.getDatabaseManager().getRuntimeCache("MensaplanViewMode");
75             if(lastViewmode != null && !lastViewmode.isEmpty()) {
76                 if(lastViewmode.equalsIgnoreCase("day"))
77                     viewDayplan = true;
78                 else
79                     viewDayplan = false;
80                 viewmodeSet = true;
81             }
82         }
83         if(!viewmodeSet)
84             viewDayplan = true;
85
86         AppContext.setTitle("Mensa "+(viewDayplan ? "Tagesplan" : "Wochenplan"));
87
88         /*
89         toolbar = (Toolbar) view.findViewById(R.id.toolbar);
90         ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
91
92         ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
93         */
94
95         viewPager = (ViewPager) view.findViewById(R.id.viewpager);
96         setupViewPager(viewPager);
97
98         tabLayout = (TabLayout) view.findViewById(R.id.tabs);
99         tabLayout.setupWithViewPager(viewPager);
100
101         return view;
102     }
103
104     private void setupViewPager(ViewPager viewPager) {
105         final ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
106
107         long[] showDates;
108         long now = (new Date()).getTime()/1000;
109         if(viewDayplan)
110             showDates = AppContext.getDatabaseManager().getDaysWithPlanData(now - (30 * 86400), now + (30 * 86400));
111         else
112             showDates = AppContext.getDatabaseManager().getDaysWithPlanData(now - (365 * 86400), now + (30 * 86400));
113
114         int activeItem = -1;
115         long activeItemDiff = -1;
116         Bundle args = getArguments();
117         for(int i = 0; i < showDates.length; i++) {
118             long date = showDates[i];
119             Bundle bundle = new Bundle();
120             if(args != null)
121                 bundle.putAll(args);
122             String title;
123             SimpleDateFormat sdf;
124             if(viewDayplan)
125                 sdf = new SimpleDateFormat("dd.MM.");
126             else
127                 sdf = new SimpleDateFormat("WW");
128
129             if(viewDate > 0) {
130                 long diff = Math.abs(viewDate - date);
131                 if(activeItem == -1 || diff < activeItemDiff) {
132                     activeItem = i;
133                     activeItemDiff = diff;
134                 }
135             }
136
137             title = sdf.format(new Date(date * 1000));
138             bundle.putLong("date", date);
139             adapter.addFragment(bundle, title);
140         }
141         viewPager.setAdapter(adapter);
142         viewPager.setCurrentItem(activeItem);
143         if(viewDayplan) {
144             MensaTagesplan tagesplan = (MensaTagesplan)adapter.getItem(activeItem);
145             tagesplan.onSetActive();
146         }
147
148         viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
149             @Override
150             public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
151
152             }
153
154             @Override
155             public void onPageSelected(int position) {
156                 if(viewDayplan) {
157                     MensaTagesplan tagesplan = (MensaTagesplan)adapter.getItem(position);
158                     tagesplan.onSetActive();
159                 }
160             }
161
162             @Override
163             public void onPageScrollStateChanged(int state) {
164
165             }
166         });
167     }
168
169
170     class ViewPagerAdapter extends FragmentPagerAdapter {
171         private final List<Fragment> mFragmentList = new ArrayList<>();
172         private final List<Bundle> mFragmentDataList = new ArrayList<>();
173         private final List<String> mFragmentTitleList = new ArrayList<>();
174
175         public ViewPagerAdapter(FragmentManager manager) {
176             super(manager);
177         }
178
179         @Override
180         public Fragment getItem(int position) {
181             Fragment fragment;
182             while(mFragmentList.size() <= position) {
183                 mFragmentList.add(null);
184             }
185             if(mFragmentList.get(position) != null)
186                 return mFragmentList.get(position);
187             if(viewDayplan)
188                 fragment = new MensaTagesplan();
189             else
190                 fragment = new MensaWochenplan();
191             fragment.setArguments(mFragmentDataList.get(position));
192             mFragmentList.set(position, fragment);
193             return fragment;
194         }
195
196         @Override
197         public int getCount() {
198             return mFragmentDataList.size();
199         }
200
201         public void addFragment(Bundle fragmentdata, String title) {
202             fragmentdata.putBoolean("parentIsMensaFragment", true);
203             mFragmentDataList.add(fragmentdata);
204             mFragmentTitleList.add(title);
205         }
206
207         @Override
208         public CharSequence getPageTitle(int position) {
209             return mFragmentTitleList.get(position);
210         }
211     }
212
213 }