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