package uk.co.traintrackapp.traintrack.adapter;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import uk.co.traintrackapp.traintrack.R;
import uk.co.traintrackapp.traintrack.StationActivity;
import uk.co.traintrackapp.traintrack.model.Station;
import uk.co.traintrackapp.traintrack.utils.Utils;
public class StationRowAdapter extends RecyclerView.Adapter<StationRowAdapter.ViewHolder> implements Filterable {
private List<Station> rowList;
private List<Station> origRowList;
private String distanceUnit;
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public Station station;
public TextView name;
public TextView distance;
public ImageView nationalRailIcon;
public ImageView undergroundIcon;
public ViewHolder(View v) {
super(v);
name = (TextView) v.findViewById(R.id.name);
distance = (TextView) v.findViewById(R.id.distance);
nationalRailIcon = (ImageView) v.findViewById(R.id.national_rail_icon);
undergroundIcon = (ImageView) v.findViewById(R.id.underground_icon);
v.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (station != null) {
Intent intent = new Intent().setClass(v.getContext(),
StationActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable(Utils.ARGS_STATION, station);
intent.putExtras(bundle);
v.getContext().startActivity(intent);
InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
}
public StationRowAdapter(ArrayList<Station> stations, String distanceUnit) {
this.rowList = stations;
this.distanceUnit = distanceUnit;
}
@Override
public StationRowAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.row_station, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Station station = rowList.get(position);
holder.station = station;
holder.name.setText(station.getName());
holder.distance.setText(station.getDistanceText(distanceUnit));
if (station.isNationalRail()) {
holder.nationalRailIcon.setVisibility(View.VISIBLE);
} else {
holder.nationalRailIcon.setVisibility(View.GONE);
}
if (station.isUnderground()) {
holder.undergroundIcon.setVisibility(View.VISIBLE);
} else {
holder.undergroundIcon.setVisibility(View.GONE);
}
}
@Override
public int getItemCount() {
return rowList.size();
}
public Filter getFilter() {
return new Filter() {
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
rowList = (List<Station>) results.values;
notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
List<Station> list = new ArrayList<>();
if (origRowList == null) {
origRowList = new ArrayList<>(rowList);
}
if (constraint == null || constraint.length() == 0) {
results.count = origRowList.size();
results.values = origRowList;
} else {
for (int i = 0; i < origRowList.size(); i++) {
Station station = origRowList.get(i);
if (station.isNameSimilarTo(constraint)) {
list.add(station);
}
}
results.count = list.size();
results.values = list;
}
return results;
}
};
}
public void refresh(ArrayList<Station> stations) {
this.rowList = stations;
this.notifyDataSetChanged();
}
}