package de.tum.in.tumcampusapp.activities;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import de.tum.in.tumcampusapp.R;
import de.tum.in.tumcampusapp.activities.generic.ActivityForSearchingTumOnline;
import de.tum.in.tumcampusapp.adapters.NoResultsAdapter;
import de.tum.in.tumcampusapp.auxiliary.PersonSearchSuggestionProvider;
import de.tum.in.tumcampusapp.managers.RecentsManager;
import de.tum.in.tumcampusapp.models.tumo.Person;
import de.tum.in.tumcampusapp.models.tumo.PersonList;
import de.tum.in.tumcampusapp.tumonline.TUMOnlineConst;
/**
* Activity to search for employees.
*/
public class PersonsSearchActivity extends ActivityForSearchingTumOnline<PersonList> implements OnItemClickListener {
private static final String P_SUCHE = "pSuche";
/** List to display the results */
private ListView lvPersons;
private RecentsManager recentsManager;
public PersonsSearchActivity() {
super(TUMOnlineConst.PERSON_SEARCH, R.layout.activity_persons, PersonSearchSuggestionProvider.AUTHORITY, 3);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lvPersons = (ListView) findViewById(R.id.lstPersons);
lvPersons.setOnItemClickListener(this);
// get all stations from db
recentsManager = new RecentsManager(this, RecentsManager.PERSONS);
// Initialize persons adapter
Cursor personsCursor = recentsManager.getAllFromDb();
ArrayList<Person> list = new ArrayList<>(personsCursor.getCount());
if(personsCursor.moveToFirst()) {
do {
String recent = personsCursor.getString(0);
String[] t = recent.split("\\$");
Person p = new Person();
p.setId(t[0]);
p.setName(t[1]);
list.add(p);
} while(personsCursor.moveToNext());
}
personsCursor.close();
ArrayAdapter<Person> adapter = new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, list);
if(adapter.getCount()==0) {
openSearch();
} else {
lvPersons.setAdapter(adapter);
lvPersons.setOnItemClickListener(this);
lvPersons.requestFocus();
}
}
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Person person = (Person) lvPersons.getItemAtPosition(position);
// store selected person ID in bundle to get in in StaffDetails
Bundle bundle = new Bundle();
bundle.putSerializable("personObject", person);
// show detailed information in new activity
Intent intent = new Intent(this, PersonsDetailsActivity.class);
intent.putExtras(bundle);
startActivity(intent);
recentsManager.replaceIntoDb(person.getId()+"$"+person.toString().trim());
}
@Override
protected void onStartSearch() {
Cursor personsCursor = recentsManager.getAllFromDb();
if(personsCursor.getCount()==0) {
finish();
return;
}
ArrayList<Person> list = new ArrayList<>(personsCursor.getCount());
if(personsCursor.moveToFirst()) {
do {
String recent = personsCursor.getString(0);
String[] t = recent.split("\\$");
Person p = new Person();
p.setId(t[0]);
p.setName(t[1]);
list.add(p);
} while(personsCursor.moveToNext());
}
personsCursor.close();
ArrayAdapter<Person> adapter = new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, list);
lvPersons.setAdapter(adapter);
}
@Override
public void onStartSearch(String query) {
requestHandler.setParameter(P_SUCHE, query);
requestFetch();
}
/**
* Handles the XML response from TUMOnline by de-serializing the information
* to model entities.
*
* @param response The de-serialized data from TUMOnline.
*/
@Override
public void onLoadFinished(PersonList response) {
if(response.getPersons()==null) {
lvPersons.setAdapter(new NoResultsAdapter(this));
} else {
ArrayAdapter<Person> adapter = new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, response.getPersons());
lvPersons.setAdapter(adapter);
}
}
}