package org.fossasia.openevent.adapters;
import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.TextView;
import org.fossasia.openevent.R;
import org.fossasia.openevent.activities.SessionDetailActivity;
import org.fossasia.openevent.data.Session;
import org.fossasia.openevent.data.Track;
import org.fossasia.openevent.dbutils.DbSingleton;
import org.fossasia.openevent.utils.ConstantStrings;
import org.fossasia.openevent.utils.ISO8601Date;
import org.fossasia.openevent.utils.SortOrder;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import butterknife.BindView;
import butterknife.ButterKnife;
import timber.log.Timber;
/**
* Created by Manan Wason on 17/06/16.
*/
public class DayScheduleAdapter extends BaseRVAdapter<Session, DayScheduleAdapter.DayScheduleViewHolder> {
private Context context;
private String eventDate;
@SuppressWarnings("all")
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
DbSingleton instance = DbSingleton.getInstance();
List<Session> sessionList = instance.getSessionbyDate(eventDate, SortOrder.sortOrderSchedule(context));
final ArrayList<Session> filteredSessionsList = new ArrayList<>();
String query = constraint.toString().toLowerCase(Locale.getDefault());
for (Session session : sessionList) {
final String text = session.getTitle().toLowerCase(Locale.getDefault());
if (text.contains(query)) {
filteredSessionsList.add(session);
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = filteredSessionsList;
filterResults.count = filteredSessionsList.size();
Timber.d("Filtering done total results %d", filterResults.count);
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
animateTo((List<Session>) results.values);
}
};
public DayScheduleAdapter(List<Session> sessions, Context context) {
super(sessions);
this.context = context;
}
public void setEventDate(String eventDate) {
this.eventDate = eventDate;
}
@Override
public DayScheduleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View view = layoutInflater.inflate(R.layout.item_schedule, parent, false);
return new DayScheduleViewHolder(view);
}
@Override
public void onBindViewHolder(DayScheduleViewHolder holder, int position) {
final Session currentSession = getItem(position);
String startTime = ISO8601Date.get12HourTime(ISO8601Date.getDateObject(currentSession.getStartTime()));
String endTime = ISO8601Date.get12HourTime(ISO8601Date.getDateObject(currentSession.getEndTime()));
holder.startTime.setText(startTime);
holder.slotTitle.setText(currentSession.getTitle());
holder.timings.setText(String.format("%s - %s", startTime, endTime));
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String sessionName = currentSession.getTitle();
Track track = DbSingleton.getInstance().getTrackbyId(currentSession.getTrack().getId());
String trackName = track.getName();
Intent intent = new Intent(context, SessionDetailActivity.class);
intent.putExtra(ConstantStrings.SESSION, sessionName);
intent.putExtra(ConstantStrings.TRACK, trackName);
intent.putExtra(ConstantStrings.ID, currentSession.getId());
context.startActivity(intent);
}
});
}
public void refresh() {
clear();
animateTo(DbSingleton.getInstance().getSessionbyDate(eventDate, SortOrder.sortOrderSchedule(context)));
}
@Override
public Filter getFilter() {
return filter;
}
protected class DayScheduleViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.start_time)
TextView startTime;
@BindView(R.id.slot_title)
TextView slotTitle;
@BindView(R.id.timings)
TextView timings;
public DayScheduleViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}