package com.android.iliConnect;
import static android.content.Context.CONNECTIVITY_SERVICE;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import com.android.iliConnect.Exceptions.NetworkException;
import com.android.iliConnect.dataproviders.RemoteDataProvider;
import com.android.iliConnect.models.Item;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.ProgressBar;
public class Suche extends ListFragment implements Redrawable {
private ArrayList<Item> searchResult = new ArrayList<Item>();
private ArrayList<Item> existingCourses = new ArrayList<Item>();
private EditText etSearch;
private ListAdapter fileList;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
List<Item> courses = new ArrayList<Item>();
LinearLayout mLinearLayout = (LinearLayout) inflater.inflate(R.layout.suche_layout, container, false);
if (MainActivity.instance.localDataProvider.results.Item != null) {
// nur die Kurse als Suchergebnis anzeigen, in denen man noch nicht angemeldet ist.
courses = this.getSearchResults();
}
fileList = new SearchArrayAdapter(getActivity(), R.layout.item, courses);
setListAdapter(fileList);
if (container == null) {
return null;
}
etSearch = (EditText) mLinearLayout.findViewById(R.id.editText1);
etSearch.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void afterTextChanged(Editable s) {
if (s.length() >= 1) {
try {
updateResults(s.toString());
} catch (NetworkException e) {
MainActivity.instance.showToast(e.getMessage());
e.printStackTrace();
}
}
}
});
return mLinearLayout;
}
private void updateResults(String s) throws NetworkException {
boolean wlanOnly = MainActivity.instance.localDataProvider.settings.sync_wlanonly;
ConnectivityManager connManager = (ConnectivityManager) MainActivity.instance.getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mobile = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("searchfor", s));
((ProgressBar) MainTabView.instance.findViewById(R.id.progressBar1)).setVisibility(View.VISIBLE);
;
if (wlanOnly) {
// wenn Wlan-Only gesetzt ist, muss eine Wlan-Verbindung vorhanden sein
if (wifi == null || !wifi.isConnected()) {
throw new NetworkException("Es wird eine Wlan-Verbindung benötigt.");
}
RemoteDataProvider rP = new RemoteDataProvider(nameValuePairs);
rP.execute(new String[] { MainActivity.instance.localDataProvider.remoteData.getSyncUrl() + "?action=search", MainActivity.instance.localDataProvider.searchDataFileName });
} else {
// falls keine Internetverdndiung besteht, Fehlermeldung schmeißen
if ((mobile == null || !mobile.isConnected()) && (wifi == null || !wifi.isConnected())) {
throw new NetworkException("Es wird eine Internetverbindung benötigt.");
} else {
RemoteDataProvider rP = new RemoteDataProvider(nameValuePairs);
rP.execute(new String[] { MainActivity.instance.localDataProvider.remoteData.getSyncUrl() + "?action=search", MainActivity.instance.localDataProvider.searchDataFileName });
}
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void refreshViews() {
// nur die Kurse als Suchergebnis anzeigen, in denen man noch nicht angemeldet ist.
List<Item> courses = this.getSearchResults();
fileList = new SearchArrayAdapter(getActivity(), R.layout.item, courses);
getListView().invalidateViews();
setListAdapter(fileList);
((ProgressBar) MainTabView.instance.findViewById(R.id.progressBar1)).setVisibility(View.INVISIBLE);
}
private List<Item> getSearchResults() {
ArrayList<Item> courses = new ArrayList<Item>();
existingCourses = MainActivity.instance.localDataProvider.desktopItems.DesktopItem;
searchResult = MainActivity.instance.localDataProvider.results.Item;
if (searchResult != null) {
for (Item item : searchResult) {
if (!existingCourses.contains(item)) {
courses.add(item);
}
}
}
return courses;
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
}
}