Added README.txt and GPL Header to Source Files
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / fragments / AppSearchStuv.java
1 /* AppSearchStuv.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.v4.app.Fragment;
19 import android.util.Log;
20 import android.view.LayoutInflater;
21 import android.view.View;
22 import android.view.ViewGroup;
23 import android.widget.AdapterView;
24 import android.widget.ListView;
25 import android.widget.ProgressBar;
26
27 import java.util.ArrayList;
28 import java.util.List;
29
30 import de.dhbwloe.campusapp.CampusAppContext;
31 import de.dhbwloe.campusapp.CampusAppFragment;
32 import de.dhbwloe.campusapp.R;
33 import de.dhbwloe.campusapp.search.DhbwSearchHelper;
34 import de.dhbwloe.campusapp.search.SearchIndices;
35 import de.dhbwloe.campusapp.search.SearchResultListener;
36 import de.dhbwloe.campusapp.search.SearchTarget;
37 import de.dhbwloe.campusapp.search.StuvSearchHelper;
38
39 /**
40  * A simple {@link Fragment} subclass.
41  */
42 public class AppSearchStuv extends CampusAppFragment implements AppSearchProvider {
43     private String sSearchQuery;
44     private boolean bQueryExecuted = false;
45     private boolean bExecuteOnload = false;
46     private AppSearchListAdapter appSearchAdapter;
47     private StuvSearchHelper seachHelper;
48     private ArrayList<AppSearchListItem> searchResultItems = new ArrayList<AppSearchListItem>();
49     private ProgressBar progressBar;
50
51     @Override
52     public void onCreate(Bundle savedInstanceState) {
53         super.onCreate(savedInstanceState);
54         Bundle savedState;
55         if((savedState = getArguments()) != null)
56             sSearchQuery = savedState.getString("query");
57         if(savedInstanceState != null && (savedState = savedInstanceState.getBundle("SearchStuv")) != null) {
58             sSearchQuery = savedState.getString("query");
59             if(savedState.getBoolean("executed")) {
60                 executeSearch(false);
61             }
62         }
63     }
64
65     @Override
66     public void onSaveInstanceState(Bundle savedInstanceState) {
67         Bundle bundle = new Bundle();
68         bundle.putString("query", sSearchQuery);
69         bundle.putBoolean("executed", bQueryExecuted);
70         savedInstanceState.putBundle("SearchStuv", bundle);
71         super.onSaveInstanceState(savedInstanceState);
72     }
73
74     @Override
75     public View onCreateView(LayoutInflater inflater, ViewGroup container,
76                              Bundle savedInstanceState) {
77         if(AppContext == null)
78             AppContext = CampusAppContext.getInstance();
79         oFragmentView = inflater.inflate(R.layout.fragment_appsearch_list, container, false);
80
81         Bundle args = getArguments();
82         if(args != null) {
83             String queryString = args.getString("query");
84             if(queryString != null)
85                 sSearchQuery = queryString;
86         }
87
88         ListView searchResultList = (ListView) oFragmentView.findViewById(R.id.searchResultItems);
89         if(appSearchAdapter == null)
90             appSearchAdapter = new AppSearchListAdapter(oFragmentView.getContext(), R.layout.fragment_appsearch_listitem, searchResultItems);
91         searchResultList.setAdapter(appSearchAdapter);
92
93         searchResultList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
94             @Override
95             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
96                 AppSearchListItem item = searchResultItems.get(position);
97                 if (item == null)
98                     return;
99                 navigateToResult(item);
100             }
101         });
102
103         return oFragmentView;
104     }
105
106     public void executeSearch(final boolean reset) {
107         if(AppContext == null)
108             AppContext = CampusAppContext.getInstance();
109         if(bQueryExecuted && !reset)
110             return;
111         bQueryExecuted = true;
112         progressBar = (ProgressBar) oFragmentView.findViewById(R.id.searchProgress);
113         progressBar.setVisibility(View.VISIBLE);
114
115         searchResultItems.clear();
116
117         if(seachHelper == null)
118             seachHelper = new StuvSearchHelper();
119         seachHelper.search(sSearchQuery, new SearchResultListener() {
120             @Override
121             public void onSearchResultsReceived(List<AppSearchListItem> results) {
122                 Log.i("SearchStuv", "Success: "+results.size());
123                 for(AppSearchListItem result : results)
124                     searchResultItems.add(result);
125                 progressBar.setVisibility(View.GONE);
126                 if(appSearchAdapter != null)
127                     appSearchAdapter.notifyDataSetChanged();
128             }
129
130             @Override
131             public void onSearchFailed(String error) {
132                 Log.i("SearchDhbw", "Failed: " + error);
133                 progressBar.setVisibility(View.GONE);
134             }
135         });
136
137     }
138
139     private void navigateToResult(AppSearchListItem result) {
140         SearchTarget target = result.getTarget();
141
142         target.navigate(AppContext.getNavigationManager());
143     }
144
145 }