package com.ecollege.android.adapter; import android.content.Context; import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.ecollege.android.ECollegeApplication; import com.ecollege.android.R; import com.ecollege.android.util.DateTimeUtil; import com.ecollege.api.model.Course; import com.ecollege.api.model.UpcomingEventItem; import com.ecollege.api.model.UpcomingEventItem.CategoryType; import com.ecollege.api.model.UpcomingEventItem.UpcomingEventType; public class UpcomingEventsAdapter extends UberAdapter<UpcomingEventItem> { public UpcomingEventsAdapter(Context context, boolean canLoadMore) { super(context, true, false, canLoadMore); } @Override protected Object groupIdFunction(UpcomingEventItem item) { UpcomingEventItem uei = (UpcomingEventItem)item; if (uei.getTag() != null) return uei.getTag().toString(); return "Unknown"; } private static class ViewHolder { TextView titleText; TextView scheduleText; TextView courseTitleText; ImageView icon; } public static String getScheduleText(UpcomingEventItem uei) { if (uei.getWhen() == null || uei.getWhen().getTime() == null) { return "Schedule Unknown"; } else { if (uei.getCategoryType() == CategoryType.Start) { return "Starts at " + DateTimeUtil.getLongFriendlyDate(uei.getWhen().getTime()); } else if (uei.getCategoryType() == CategoryType.End) { return "Ends at " + DateTimeUtil.getLongFriendlyDate(uei.getWhen().getTime()); } else { return "Due at " + DateTimeUtil.getLongFriendlyDate(uei.getWhen().getTime()); } } } @Override protected View getDataItemView(View convertView, ViewGroup parent, UberItem<UpcomingEventItem> item) { // A ViewHolder keeps references to children views to avoid unneccessary calls // to findViewById() on each row. ViewHolder holder; // When convertView is not null, we can reuse it directly, there is no need // to reinflate it. We only inflate a new View when the convertView supplied // by ListView is null. if (convertView == null) { convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.upcoming_item, null); // Creates a ViewHolder and store references to the two children views // we want to bind data to. holder = new ViewHolder(); holder.titleText = (TextView) convertView.findViewById(R.id.title_text); holder.scheduleText = (TextView) convertView.findViewById(R.id.schedule_text); holder.courseTitleText = (TextView) convertView.findViewById(R.id.course_title_text); holder.icon = (ImageView) convertView.findViewById(R.id.icon); convertView.setTag(holder); } else { // Get the ViewHolder back to get fast access to the TextView // and the ImageView. holder = (ViewHolder) convertView.getTag(); } // Bind the data efficiently with the holder. UpcomingEventItem uei = item.getDataItem(); String title = uei.getTitle(); long courseId = uei.getCourseId(); Course course = ((ECollegeApplication)parent.getContext().getApplicationContext()).getCourseById(courseId); holder.titleText.setText(Html.fromHtml(title).toString()); holder.courseTitleText.setText(Html.fromHtml(course.getTitle()).toString()); if (uei.getEventType() == UpcomingEventType.Html) { holder.icon.setImageResource(R.drawable.ic_assignment); } else if (uei.getEventType() == UpcomingEventType.Thread) { holder.icon.setImageResource(R.drawable.ic_discussions_no_responses); } else if (uei.getEventType() == UpcomingEventType.QuizExamTest) { holder.icon.setImageResource(R.drawable.ic_exam); } holder.scheduleText.setText(getScheduleText(uei)); return convertView; } }