package com.mechinn.android.ouralliance.adapter;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import java.util.ArrayList;
import java.util.List;
import timber.log.Timber;
/**
* Created by mechinn on 3/2/15.
*/
public abstract class FilterableAdapter extends BaseAdapter implements Filterable {
private static final String TAG = "FilterableAdapter";
private Context context;
private List<String> original;
private List<String> filtered;
private AdapterFilter filter;
public FilterableAdapter(Context context) {
this.context = context;
this.filter = new AdapterFilter();
this.original = new ArrayList<>();
}
public LayoutInflater getLayoutInflater() {
return LayoutInflater.from(context);
}
public void emptyStrings() {
original.clear();
}
public void addString(String string) {
original.add(string);
}
public boolean isEmpty() {
if(null!=original) {
return original.size()<1;
} else {
return true;
}
}
public int getCount() {
if(isEmpty()||null==filtered) {
return 0;
}
return filtered.size();
}
@Override
public String getItem(int position) {
if(isEmpty()||null==filtered) {
return null;
}
return filtered.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public Filter getFilter() {
return filter;
}
private class AdapterFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
FilterResults results = new FilterResults();
//If there's nothing to filter on, return the original data for your list
if(charSequence == null || charSequence.length() == 0) {
results.values = original;
results.count = original.size();
} else {
String filteringString = charSequence.toString().toLowerCase();
Timber.d("filtering on " + filteringString);
List<String> filterResultsData = new ArrayList<>();
for(String data : original) {
//In this loop, you'll filter through originalData and compare each item to charSequence.
//If you find a match, add it to your new ArrayList
//I'm not sure how you're going to do comparison, so you'll need to fill out this conditional
Timber.d( "compare "+data);
if(null!=data && data.toLowerCase().contains(filteringString)) {
filterResultsData.add(data);
}
}
results.values = filterResultsData;
results.count = filterResultsData.size();
}
return results;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
filtered = (ArrayList<String>)filterResults.values;
notifyDataSetChanged();
}
};
}