Added README.txt and GPL Header to Source Files
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / fragments / AppSearch.java
1 /* AppSearch.java
2  *
3  * This program is free software: you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License as published by
5  * the Free Software Foundation, either version 3 of the License, or
6  * (at your option) any later version.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  */
16 package de.dhbwloe.campusapp.fragments;
17 import android.os.Bundle;
18 import android.support.design.widget.TabLayout;
19 import android.support.v4.app.Fragment;
20 import android.support.v4.app.FragmentManager;
21 import android.support.v4.app.FragmentPagerAdapter;
22 import android.support.v4.view.ViewPager;
23 import android.util.Log;
24 import android.view.LayoutInflater;
25 import android.view.View;
26 import android.view.ViewGroup;
27 import android.widget.AdapterView;
28 import android.widget.ListView;
29
30 import java.text.SimpleDateFormat;
31 import java.util.ArrayList;
32 import java.util.Date;
33 import java.util.List;
34
35 import de.dhbwloe.campusapp.CampusAppContext;
36 import de.dhbwloe.campusapp.CampusAppFragment;
37 import de.dhbwloe.campusapp.R;
38 import de.dhbwloe.campusapp.search.SearchIndices;
39 import de.dhbwloe.campusapp.search.SearchTarget;
40
41 /**
42  * A simple {@link Fragment} subclass.
43  */
44 public class AppSearch extends CampusAppFragment {
45     private ViewPagerAdapter oAppSearchLViewPagerAdapter;
46     private String sSearchQuery;
47
48     @Override
49     public void onCreate(Bundle savedInstanceState) {
50         Log.i("AppSearch", "Event: onCreate");
51         super.onCreate(savedInstanceState);
52
53         Bundle bundle;
54         if((bundle = getArguments()) != null)
55             sSearchQuery = bundle.getString("query");
56         else if(savedInstanceState != null && (bundle = savedInstanceState.getBundle("AppSearch")) != null)
57             sSearchQuery = bundle.getString("query");
58
59     }
60
61     @Override
62     public void onSaveInstanceState(Bundle savedInstanceState) {
63         Log.i("AppSearch", "Event: onSaveInstanceState");
64         Bundle bundle = new Bundle();
65         bundle.putString("query", sSearchQuery);
66         savedInstanceState.putBundle("AppSearch", bundle);
67         super.onSaveInstanceState(savedInstanceState);
68     }
69
70     @Override
71     public View onCreateView(LayoutInflater inflater, ViewGroup container,
72                              Bundle savedInstanceState) {
73         Log.i("AppSearch", "Event: onCreateView");
74         if(AppContext == null)
75             AppContext = CampusAppContext.getInstance();
76         oFragmentView = inflater.inflate(R.layout.fragment_appsearch, container, false);
77
78         AppContext.setTitle(AppContext.getResString(R.string.appsearch_title, sSearchQuery));
79
80         ViewPager viewPager = (ViewPager) oFragmentView.findViewById(R.id.viewpager);
81         setupViewPager(viewPager);
82
83         TabLayout tabLayout = (TabLayout) oFragmentView.findViewById(R.id.tabs);
84         tabLayout.setupWithViewPager(viewPager);
85
86         return oFragmentView;
87     }
88
89     private void setupViewPager(ViewPager viewPager) {
90         final ViewPagerAdapter adapter;
91         if(oAppSearchLViewPagerAdapter != null)
92             adapter = oAppSearchLViewPagerAdapter;
93         else {
94             adapter = new ViewPagerAdapter(getChildFragmentManager());
95             oAppSearchLViewPagerAdapter = adapter;
96
97             CampusAppFragment fragment;
98             Bundle args = new Bundle();
99             args.putString("query", sSearchQuery);
100             Log.i("AppSearch", "New result instances: " + sSearchQuery);
101
102             fragment = new AppSearchInternal();
103             fragment.setArguments(args);
104             adapter.addFragment(AppContext.getResString(R.string.appsearch_inapp), fragment);
105
106             fragment = new AppSearchDhbw();
107             fragment.setArguments(args);
108             adapter.addFragment(AppContext.getResString(R.string.appsearch_indhbw), fragment);
109
110             fragment = new AppSearchStuv();
111             fragment.setArguments(args);
112             adapter.addFragment(AppContext.getResString(R.string.appsearch_instuv), fragment);
113         }
114
115         viewPager.setAdapter(adapter);
116         int activeItem = viewPager.getCurrentItem();
117         AppSearchProvider activeProvider = (AppSearchProvider) adapter.getItem(activeItem);
118         activeProvider.executeSearch(false);
119
120         viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
121             @Override
122             public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
123
124             }
125
126             @Override
127             public void onPageSelected(int position) {
128                 AppSearchProvider activeProvider = (AppSearchProvider) adapter.getItem(position);
129                 activeProvider.executeSearch(false);
130             }
131
132             @Override
133             public void onPageScrollStateChanged(int state) {
134
135             }
136         });
137     }
138
139
140     class ViewPagerAdapter extends FragmentPagerAdapter {
141         private final List<Fragment> mFragmentDataList = new ArrayList<>();
142         private final List<String> mFragmentTitleList = new ArrayList<>();
143
144         public ViewPagerAdapter(FragmentManager manager) {
145             super(manager);
146         }
147
148         @Override
149         public Fragment getItem(int position) {
150             return mFragmentDataList.get(position);
151         }
152
153         @Override
154         public int getCount() {
155             return mFragmentDataList.size();
156         }
157
158         public void addFragment(String title, Fragment fragment) {
159             mFragmentDataList.add(fragment);
160             mFragmentTitleList.add(title);
161         }
162
163         @Override
164         public CharSequence getPageTitle(int position) {
165             return mFragmentTitleList.get(position);
166         }
167     }
168
169 }