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