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