blob: 7daa386072e7a9ca7b35036c239f34422f06153a [file] [log] [blame]
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.Suggestion;
import org.wordpress.android.util.GravatarUtils;
import org.wordpress.android.widgets.WPNetworkImageView;
import java.util.ArrayList;
import java.util.List;
public class SuggestionAdapter extends BaseAdapter implements Filterable {
private final LayoutInflater mInflater;
private Filter mSuggestionFilter;
private List<Suggestion> mSuggestionList;
private List<Suggestion> mOrigSuggestionList;
private int mAvatarSz;
public SuggestionAdapter(Context context) {
mAvatarSz = context.getResources().getDimensionPixelSize(R.dimen.avatar_sz_small);
mInflater = LayoutInflater.from(context);
}
public void setSuggestionList(List<Suggestion> suggestionList) {
mOrigSuggestionList = suggestionList;
}
@Override
public int getCount() {
if (mSuggestionList == null) {
return 0;
}
return mSuggestionList.size();
}
@Override
public Suggestion getItem(int position) {
if (mSuggestionList == null) {
return null;
}
return mSuggestionList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final SuggestionViewHolder holder;
if (convertView == null || convertView.getTag() == null) {
convertView = mInflater.inflate(R.layout.suggestion_list_row, parent, false);
holder = new SuggestionViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (SuggestionViewHolder) convertView.getTag();
}
Suggestion suggestion = getItem(position);
if (suggestion != null) {
String avatarUrl = GravatarUtils.fixGravatarUrl(suggestion.getImageUrl(), mAvatarSz);
holder.imgAvatar.setImageUrl(avatarUrl, WPNetworkImageView.ImageType.AVATAR);
holder.txtUserLogin.setText("@" + suggestion.getUserLogin());
holder.txtDisplayName.setText(suggestion.getDisplayName());
}
return convertView;
}
@Override
public Filter getFilter() {
if (mSuggestionFilter == null) {
mSuggestionFilter = new SuggestionFilter();
}
return mSuggestionFilter;
}
private class SuggestionViewHolder {
private final WPNetworkImageView imgAvatar;
private final TextView txtUserLogin;
private final TextView txtDisplayName;
SuggestionViewHolder(View row) {
imgAvatar = (WPNetworkImageView) row.findViewById(R.id.suggest_list_row_avatar);
txtUserLogin = (TextView) row.findViewById(R.id.suggestion_list_row_user_login_label);
txtDisplayName = (TextView) row.findViewById(R.id.suggestion_list_row_display_name_label);
}
}
private class SuggestionFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (mOrigSuggestionList == null) {
results.values = null;
results.count = 0;
}
else if (constraint == null || constraint.length() == 0) {
results.values = mOrigSuggestionList;
results.count = mOrigSuggestionList.size();
}
else {
List<Suggestion> nSuggestionList = new ArrayList<Suggestion>();
for (Suggestion suggestion : mOrigSuggestionList) {
String lowerCaseConstraint = constraint.toString().toLowerCase();
if (suggestion.getUserLogin().toLowerCase().startsWith(lowerCaseConstraint)
|| suggestion.getDisplayName().toLowerCase().startsWith(lowerCaseConstraint)
|| suggestion.getDisplayName().toLowerCase().contains(" " + lowerCaseConstraint))
nSuggestionList.add(suggestion);
}
results.values = nSuggestionList;
results.count = nSuggestionList.size();
}
return results;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
if (results.count == 0)
notifyDataSetInvalidated();
else {
mSuggestionList = (List<Suggestion>) results.values;
notifyDataSetChanged();
}
}
@Override
public CharSequence convertResultToString (Object resultValue) {
Suggestion suggestion = (Suggestion) resultValue;
return suggestion.getUserLogin();
}
}
}