package org.intermine.app.adapter;
/*
* Copyright (C) 2015 InterMine
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. See the LICENSE file for more
* information or http://www.gnu.org/copyleft/lesser.html.
*
*/
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.text.Html;
import android.text.Spanned;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import org.intermine.app.R;
import org.intermine.app.core.List;
import org.intermine.app.core.templates.Template;
import org.intermine.app.util.Strs;
import java.util.ArrayList;
import java.util.Collection;
/**
* @author Daria Komkova <Daria_Komkova @ hotmail.com>
*/
public class TemplatesAdapter extends RecyclerView.Adapter<TemplatesAdapter.ViewHolder> {
private ArrayList<Template> mFilteredTemplates;
private ArrayList<Template> mTemplates;
private OnItemClickListener mListener;
public TemplatesAdapter(OnItemClickListener mListener) {
this.mListener = mListener;
}
public void updateData(Collection<Template> templates) {
mTemplates = new ArrayList<>(templates);
mFilteredTemplates = new ArrayList<>(templates);
notifyDataSetChanged();
}
@Override
public TemplatesAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Context context = parent.getContext();
View view = LayoutInflater.from(context).inflate(R.layout.templates_item, parent, false);
return ViewHolder.newInstance(view);
}
@Override
public void onBindViewHolder(TemplatesAdapter.ViewHolder holder, int position) {
final Template template = getTemplate(position);
holder.mTitle.setText(template.getTitle());
Spanned descriptionText = Html.fromHtml(Strs.nullToEmpty(template.getDescription()));
holder.mDescription.setText(descriptionText);
holder.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onItemClick(template);
}
});
}
@Override
public long getItemId(int position) {
return position;
}
public Template getTemplate(int position) {
if (position < 0 || position >= mFilteredTemplates.size()) {
throw new IllegalArgumentException();
}
return mFilteredTemplates.get(position);
}
@Override
public int getItemCount() {
if (null != mFilteredTemplates) {
return mFilteredTemplates.size();
}
return 0;
}
public void filter(String query) {
query = query.toLowerCase();
mFilteredTemplates.clear();
if (Strs.isNullOrEmpty(query)) {
mFilteredTemplates.addAll(mTemplates);
} else {
for (Template template : mTemplates) {
String title = template.getTitle();
String description = template.getDescription();
if ((!Strs.isNullOrEmpty(title) && title.toLowerCase().contains(query))
|| (!Strs.isNullOrEmpty(description) && description.toLowerCase().contains(query))) {
mFilteredTemplates.add(template);
}
}
}
notifyDataSetChanged();
}
public ArrayList<Template> getFilteredTemplates() {
return mFilteredTemplates;
}
public static interface OnItemClickListener {
void onItemClick(Template template);
}
public static final class ViewHolder extends RecyclerView.ViewHolder {
private final View mParent;
private final TextView mTitle;
private final TextView mDescription;
public static ViewHolder newInstance(View parent) {
TextView title = (TextView) parent.findViewById(R.id.template_title);
TextView description = (TextView) parent.findViewById(R.id.template_description);
return new ViewHolder(parent, title, description);
}
private ViewHolder(View parent, TextView title, TextView description) {
super(parent);
this.mParent = parent;
this.mTitle = title;
this.mDescription = description;
}
public void setTitle(CharSequence text) {
mTitle.setText(text);
}
public void setDescription(CharSequence text) {
mDescription.setText(text);
}
public void setOnClickListener(View.OnClickListener listener) {
mParent.setOnClickListener(listener);
}
}
}