aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/ui/suggestion/adapters/TagSuggestionAdapter.java
diff options
context:
space:
mode:
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.java138
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();
+ }
+ }
+}