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