| package org.wordpress.android.ui.suggestion.adapters; |
| |
| import android.content.Context; |
| import android.view.LayoutInflater; |
| import android.view.View; |
| import android.view.ViewGroup; |
| import android.widget.BaseAdapter; |
| import android.widget.Filter; |
| import android.widget.Filterable; |
| import android.widget.TextView; |
| |
| import org.wordpress.android.R; |
| import org.wordpress.android.models.Tag; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| public class TagSuggestionAdapter extends BaseAdapter implements Filterable { |
| private final LayoutInflater mInflater; |
| private Filter mTagFilter; |
| private List<Tag> mTagList; |
| private List<Tag> mOrigTagList; |
| |
| public TagSuggestionAdapter(Context context) { |
| mInflater = LayoutInflater.from(context); |
| } |
| |
| public void setTagList(List<Tag> tagList) { |
| mOrigTagList = tagList; |
| } |
| |
| @Override |
| public int getCount() { |
| if (mTagList == null) { |
| return 0; |
| } |
| return mTagList.size(); |
| } |
| |
| @Override |
| public Tag getItem(int position) { |
| if (mTagList == null) { |
| return null; |
| } |
| return mTagList.get(position); |
| } |
| |
| @Override |
| public long getItemId(int position) { |
| return position; |
| } |
| |
| @Override |
| public View getView(int position, View convertView, ViewGroup parent) { |
| final TagViewHolder holder; |
| |
| if (convertView == null || convertView.getTag() == null) { |
| convertView = mInflater.inflate(R.layout.tag_list_row, parent, false); |
| holder = new TagViewHolder(convertView); |
| convertView.setTag(holder); |
| } else { |
| holder = (TagViewHolder) convertView.getTag(); |
| } |
| |
| Tag tag = getItem(position); |
| |
| if (tag != null) { |
| holder.txtTag.setText(tag.getTag()); |
| } |
| |
| return convertView; |
| } |
| |
| @Override |
| public Filter getFilter() { |
| if (mTagFilter == null) { |
| mTagFilter = new TagFilter(); |
| } |
| |
| return mTagFilter; |
| } |
| |
| private class TagViewHolder { |
| private final TextView txtTag; |
| |
| TagViewHolder(View row) { |
| txtTag = (TextView) row.findViewById(R.id.tag_list_row_tag_label); |
| } |
| } |
| |
| private class TagFilter extends Filter { |
| @Override |
| protected FilterResults performFiltering(CharSequence constraint) { |
| FilterResults results = new FilterResults(); |
| |
| if (mOrigTagList == null) { |
| results.values = null; |
| results.count = 0; |
| } |
| else if (constraint == null || constraint.length() == 0) { |
| results.values = mOrigTagList; |
| results.count = mOrigTagList.size(); |
| } |
| else { |
| List<Tag> nTagList = new ArrayList<Tag>(); |
| |
| for (Tag tag : mOrigTagList) { |
| String lowerCaseConstraint = constraint.toString().toLowerCase(); |
| if (tag.getTag().toLowerCase().startsWith(lowerCaseConstraint) |
| || tag.getTag().toLowerCase().contains(" " + lowerCaseConstraint)) |
| nTagList.add(tag); |
| } |
| |
| results.values = nTagList; |
| results.count = nTagList.size(); |
| } |
| return results; |
| } |
| |
| @SuppressWarnings("unchecked") |
| @Override |
| protected void publishResults(CharSequence constraint, |
| FilterResults results) { |
| if (results.count == 0) |
| notifyDataSetInvalidated(); |
| else { |
| mTagList = (List<Tag>) results.values; |
| notifyDataSetChanged(); |
| } |
| } |
| |
| @Override |
| public CharSequence convertResultToString (Object resultValue) { |
| Tag tag = (Tag) resultValue; |
| return tag.getTag(); |
| } |
| } |
| } |