package org.onebusaway.android.directions.util;
import org.onebusaway.android.io.elements.ObaRegion;
import org.onebusaway.android.util.LocationUtils;
import android.content.Context;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import java.util.ArrayList;
import java.util.List;
public class PlacesAutoCompleteAdapter extends ArrayAdapter<CustomAddress> implements Filterable {
private Context mContext;
private ObaRegion mRegion;
private List<CustomAddress> mResultList = new ArrayList<CustomAddress>();
public PlacesAutoCompleteAdapter(Context context, int textViewResourceId,
ObaRegion region) {
super(context, textViewResourceId);
this.mContext = context;
this.mRegion = region;
}
@Override
public int getCount() {
if (mResultList != null){
return mResultList.size();
} else {
return 0;
}
}
@Override
public CustomAddress getItem(int index) {
return mResultList.get(index);
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected Filter.FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (constraint != null) {
// Retrieve the autocomplete results.
mResultList = LocationUtils.processGeocoding(mContext, mRegion,
constraint.toString());
if (mResultList != null){
// Assign the data to the FilterResults
filterResults.values = mResultList;
filterResults.count = mResultList.size();
}
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}};
return filter;
}
public ObaRegion getRegion() {
return mRegion;
}
public void setRegion(ObaRegion region) {
this.mRegion = region;
}
}