package be.digitalia.fosdem.adapters;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.support.v4.content.ContextCompat;
import android.support.v4.widget.TextViewCompat;
import android.support.v7.widget.AppCompatDrawableManager;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.text.DateFormat;
import java.util.Date;
import be.digitalia.fosdem.R;
import be.digitalia.fosdem.activities.EventDetailsActivity;
import be.digitalia.fosdem.db.DatabaseManager;
import be.digitalia.fosdem.model.Event;
import be.digitalia.fosdem.model.Track;
import be.digitalia.fosdem.utils.DateUtils;
import be.digitalia.fosdem.widgets.MultiChoiceHelper;
public class EventsAdapter extends RecyclerViewCursorAdapter<EventsAdapter.ViewHolder> {
protected final LayoutInflater inflater;
protected final DateFormat timeDateFormat;
private final boolean showDay;
public EventsAdapter(Context context) {
this(context, true);
}
public EventsAdapter(Context context, boolean showDay) {
inflater = LayoutInflater.from(context);
timeDateFormat = DateUtils.getTimeDateFormat(context);
this.showDay = showDay;
}
@Override
public Event getItem(int position) {
return DatabaseManager.toEvent((Cursor) super.getItem(position));
}
@Override
public int getItemViewType(int position) {
return R.layout.item_event;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.item_event, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, Cursor cursor) {
Context context = holder.itemView.getContext();
Event event = DatabaseManager.toEvent(cursor, holder.event);
holder.event = event;
holder.title.setText(event.getTitle());
boolean isBookmarked = DatabaseManager.toBookmarkStatus(cursor);
Drawable bookmarkDrawable = isBookmarked
? AppCompatDrawableManager.get().getDrawable(context, R.drawable.ic_bookmark_grey600_24dp)
: null;
TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(holder.title, null, null, bookmarkDrawable, null);
holder.title.setContentDescription(isBookmarked
? context.getString(R.string.in_bookmarks_content_description, event.getTitle())
: null
);
String personsSummary = event.getPersonsSummary();
holder.persons.setText(personsSummary);
holder.persons.setVisibility(TextUtils.isEmpty(personsSummary) ? View.GONE : View.VISIBLE);
Track track = event.getTrack();
holder.trackName.setText(track.getName());
holder.trackName.setTextColor(ContextCompat.getColor(holder.trackName.getContext(), track.getType().getColorResId()));
holder.trackName.setContentDescription(context.getString(R.string.track_content_description, track.getName()));
Date startTime = event.getStartTime();
Date endTime = event.getEndTime();
String startTimeString = (startTime != null) ? timeDateFormat.format(startTime) : "?";
String endTimeString = (endTime != null) ? timeDateFormat.format(endTime) : "?";
String details;
if (showDay) {
details = String.format("%1$s, %2$s ― %3$s | %4$s", event.getDay().getShortName(), startTimeString, endTimeString, event.getRoomName());
} else {
details = String.format("%1$s ― %2$s | %3$s", startTimeString, endTimeString, event.getRoomName());
}
holder.details.setText(details);
holder.details.setContentDescription(context.getString(R.string.details_content_description, details));
}
static class ViewHolder extends MultiChoiceHelper.ViewHolder implements View.OnClickListener {
TextView title;
TextView persons;
TextView trackName;
TextView details;
Event event;
public ViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.title);
persons = (TextView) itemView.findViewById(R.id.persons);
trackName = (TextView) itemView.findViewById(R.id.track_name);
details = (TextView) itemView.findViewById(R.id.details);
setOnClickListener(this);
}
@Override
public void onClick(View view) {
Context context = view.getContext();
Intent intent = new Intent(context, EventDetailsActivity.class)
.putExtra(EventDetailsActivity.EXTRA_EVENT, event);
context.startActivity(intent);
}
}
}