package com.abewy.android.apps.klyph.fragment;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Filter;
import android.widget.SearchView;
import com.abewy.android.apps.klyph.Klyph;
import com.abewy.android.apps.klyph.R;
import com.abewy.android.apps.klyph.adapter.MultiObjectAdapter;
import com.abewy.android.apps.klyph.core.fql.Group;
import com.abewy.android.apps.klyph.core.graph.GraphObject;
import com.abewy.android.apps.klyph.core.util.AttrUtil;
import com.abewy.android.apps.klyph.request.AsyncRequest.Query;
import com.abewy.android.apps.klyph.widget.KlyphGridView;
public class Groups extends KlyphFragment2 implements SearchView.OnQueryTextListener
{
private List<GraphObject> groups;
public Groups()
{
setRequestType(Query.GROUPS);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState)
{
MultiObjectAdapter moa = new MultiObjectAdapter(getListView());
moa.setFilter(new Filter() {
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results)
{
setFilteredResults((List<GraphObject>) results.values);
}
@Override
protected FilterResults performFiltering(CharSequence constraint)
{
FilterResults results = new FilterResults();
List<Group> filteredGroups = new ArrayList<Group>();
// perform your search here using the searchConstraint String.
constraint = constraint.toString().toLowerCase();
for (int i = 0; i < groups.size(); i++)
{
Group group = (Group) groups.get(i);
if (group.getName().toLowerCase().startsWith(constraint.toString()))
{
filteredGroups.add(group);
}
}
results.count = filteredGroups.size();
results.values = filteredGroups;
return results;
}
});
setListAdapter(moa);
defineEmptyText(R.string.empty_list_no_group);
setRequestType(Query.GROUPS);
setListVisible(false);
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onGridItemClick(KlyphGridView l, View v, int position, long id)
{
Group group = (Group) l.getItemAtPosition(position);
startActivity(Klyph.getIntentForGraphObject(getActivity(), group));
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
if (getAdapter() != null && getAdapter().getCount() > 0)
{
// Create the search view
SearchView searchView = new SearchView(((FragmentActivity) getActivity()).getActionBar()
.getThemedContext());
searchView.setQueryHint("Search for groups");
searchView.setOnQueryTextListener(this);
menu.add("Search").setIcon(AttrUtil.getResourceId(getActivity(), R.attr.searchIcon))
.setActionView(searchView)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
}
super.onCreateOptionsMenu(menu, inflater);
}
private void setFilteredResults(List<GraphObject> data)
{
getAdapter().clear();
super.populate(data);
}
@Override
protected void populate(List<GraphObject> data)
{
super.populate(data);
groups = data;
((FragmentActivity) getActivity()).invalidateOptionsMenu();
}
@Override
public boolean onQueryTextSubmit(String query)
{
return false;
}
@Override
public boolean onQueryTextChange(String newText)
{
if (newText.length() > 0)
{
getAdapter().getFilter().filter(newText);
}
else
{
setFilteredResults(groups);
}
return true;
}
@Override
public void onDestroy()
{
super.onDestroy();
groups = null;
}
}