package pt.rupeal.invoicexpress.fragments;
import java.util.List;
import pt.rupeal.invoicexpress.MainActivity;
import pt.rupeal.invoicexpress.R;
import pt.rupeal.invoicexpress.adapters.ContactListRowAdapter;
import pt.rupeal.invoicexpress.model.ContactModel;
import pt.rupeal.invoicexpress.server.ContactsRestHandler;
import pt.rupeal.invoicexpress.server.InvoiceXpress;
import pt.rupeal.invoicexpress.widgets.SearchView;
import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.ListView;
import android.widget.SearchView.OnQueryTextListener;
public class ContactsFragment extends Fragment {
private ContactListRowAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// after the create option method is called
setHasOptionsMenu(true);
((MainActivity) getActivity()).getActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
List<ContactModel> contacts = InvoiceXpress.getInstance().getContactsSorted();
if(contacts == null || contacts.isEmpty()) {
return inflater.inflate(R.layout.contacts_list_empty, container, false);
}
// inflate view
View view = inflater.inflate(R.layout.contacts_list_fragment, container, false);
// set adapter for contacts rows
adapter = new ContactListRowAdapter(inflater.getContext(), this, contacts);
((ListView) view.findViewById(R.id.contacts_list)).setAdapter(adapter);
// Inflate the layout for this fragment
return view;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.refresh_tab:
String[] params = new String[] {"true", ""};
ContactsRestHandler restHandler = new ContactsRestHandler(getActivity(), adapter);
InvoiceXpress.getInstance().setAsyncTaskActive(restHandler);
restHandler.execute(params);
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear();
List<ContactModel> contacts = InvoiceXpress.getInstance().getContactsSorted();
if(contacts != null && !contacts.isEmpty()) {
// inflate action bar options
inflater.inflate(R.menu.action_bar_contacts_list, menu);
SearchView searchView = (SearchView) menu.findItem(R.id.search_tab).getActionView();
// set search view listener
searchView.setOnQueryTextListener(new ContactsSearch(searchView));
}
super.onCreateOptionsMenu(menu, inflater);
}
private class ContactsSearch implements OnQueryTextListener {
private SearchView searchView;
public ContactsSearch(SearchView searchView) {
this.searchView = searchView;
}
@Override
public boolean onQueryTextChange(String newText) {
if(InvoiceXpress.DEBUG) {
Log.d(this.getClass().getCanonicalName(), "contacts search.. " + newText);
}
if(adapter != null) {
adapter.getFilter().filter(newText);
}
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(searchView.getWindowToken(), 0);
return true;
}
}
@Override
public void onOptionsMenuClosed(Menu menu) {
// if there is no contacts then clear menu
List<ContactModel> contacts = InvoiceXpress.getInstance().getContactsSorted();
if(contacts == null || contacts.isEmpty()) {
menu.clear();
}
super.onOptionsMenuClosed(menu);
}
}