package com.frozendevs.periodictable.model.adapter; import android.content.Context; import android.content.Intent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.frozendevs.periodictable.R; import com.frozendevs.periodictable.activity.PropertiesActivity; import com.frozendevs.periodictable.model.ElementListItem; import com.frozendevs.periodictable.view.RecyclerView; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Locale; public class ElementsAdapter extends RecyclerView.Adapter<ElementsAdapter.ViewHolder> { private ElementListItem[] mItems = new ElementListItem[0]; private List<ElementListItem> mFilteredItems = new ArrayList<>(); public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView mSymbolView, mNumberView, mNameView; int mNumber; public ViewHolder(View itemView) { super(itemView); mSymbolView = (TextView) itemView.findViewById(R.id.element_symbol); mNumberView = (TextView) itemView.findViewById(R.id.element_number); mNameView = (TextView) itemView.findViewById(R.id.element_name); itemView.setOnClickListener(this); } public void setName(String name) { mNameView.setText(name); } public void setNumber(int number) { mNumberView.setText(Integer.toString(mNumber = number)); } public void setSymbol(String symbol) { mSymbolView.setText(symbol); } @Override public void onClick(View view) { Intent intent = new Intent(view.getContext(), PropertiesActivity.class); intent.putExtra(PropertiesActivity.EXTRA_ATOMIC_NUMBER, mNumber); view.getContext().startActivity(intent); } } public ElementsAdapter() { setHasStableIds(true); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate( R.layout.elements_list_item, parent, false)); } @Override public void onBindViewHolder(ViewHolder holder, int position) { ElementListItem item = mFilteredItems.get(position); holder.setName(item.getName()); holder.setNumber(item.getNumber()); holder.setSymbol(item.getSymbol()); } @Override public int getItemCount() { return mFilteredItems.size(); } @Override public long getItemId(int i) { return mFilteredItems.get(i).hashCode(); } public void filter(Context context, String filter) { if (mItems.length > 0 && filter != null) { List<ElementListItem> filteredItems = new ArrayList<>(); Locale locale = context.getResources().getConfiguration().locale; int nextPos = 0; for (ElementListItem element : mItems) { if (element.getSymbol().toLowerCase(locale).equalsIgnoreCase(filter)) { filteredItems.add(0, element); nextPos += 1; } else if (element.getSymbol().toLowerCase(locale).startsWith(filter.toLowerCase( locale)) || String.valueOf(element.getNumber()).startsWith(filter)) { filteredItems.add(nextPos, element); nextPos += 1; } else if (element.getName().toLowerCase(locale).startsWith( filter.toLowerCase(locale))) { filteredItems.add(element); } } mFilteredItems = new ArrayList<>(filteredItems); notifyDataSetChanged(); } } public void clearFilter() { mFilteredItems = new ArrayList<>(Arrays.asList(mItems)); notifyDataSetChanged(); } public ElementListItem[] getItems() { return mItems; } public void setItems(List<ElementListItem> items) { setItems(items.toArray(new ElementListItem[items.size()])); } public void setItems(ElementListItem[] items) { mItems = items != null ? items.clone() : new ElementListItem[0]; mFilteredItems = new ArrayList<>(Arrays.asList(mItems)); notifyDataSetChanged(); } }