diff options
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/suggestion/adapters/TagSuggestionAdapter.java')
-rw-r--r-- | WordPress/src/main/java/org/wordpress/android/ui/suggestion/adapters/TagSuggestionAdapter.java | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/suggestion/adapters/TagSuggestionAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/suggestion/adapters/TagSuggestionAdapter.java new file mode 100644 index 000000000..539112c03 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/suggestion/adapters/TagSuggestionAdapter.java @@ -0,0 +1,138 @@ +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(); + } + } +} |