Android Open Source - SELP2013 Timetable List Adapter






From Project

Back to project page SELP2013.

License

The source code is released under:

License ======= This work is licensed under the BSD 2-clause license as follows. # BSD 2-clause license Copyright (c) 2013, Sky Welch All rights reserved. Redistribution and use in source and ...

If you think the Android project SELP2013 listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package uk.co.skywelch.selp2013;
/* w  w  w  .j  a  v a  2s.  c  o  m*/
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class TimetableListAdapter extends BaseAdapter {
  public static final String TAG = "TimetableAdapterItem";
  private Context mContext;
  private ArrayList<Lecture> lectures;
  private ArrayList<ListItem> shown_items;
  private int semester_filter;
  private boolean filter_checked;
  private String filter_course;

  public TimetableListAdapter(Context mContext, ArrayList<Lecture> lectures, int semester_filter,
      boolean filter_checked, String filter_course) {
    this.mContext = mContext;
    this.lectures = lectures;
    this.semester_filter = semester_filter;
    
    // Initially the list should be empty
    this.shown_items = new ArrayList<ListItem>();
    this.filter_checked = filter_checked;
    this.filter_course = filter_course;
  }

  @Override
  public int getCount() {
    return shown_items.size();
  }

  @Override
  public Object getItem(int position) {
    return shown_items.get(position);
  }

  @Override
  public long getItemId(int position) {
    return position;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    ListItem item = (ListItem) getItem(position);
    if (item.isSection()) {
      // Use given convertView if it's the View we want (performance optimisation)
      if (convertView == null || convertView.findViewById(R.id.list_header_title) == null) {
        LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
        convertView = inflater.inflate(R.layout.list_header, parent, false);
      }

      // Set the section title
      TextView section_text = (TextView) convertView.findViewById(R.id.list_header_title);
      ListSection section = (ListSection) item;
      section_text.setText(section.getTitle());
    } else {
      // Use given convertView if it's the View we want (performance optimisation)
      if (convertView == null || convertView.findViewById(R.id.timetableRowTitle) == null) {
        LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
        convertView = inflater.inflate(R.layout.timetable_row, parent, false);
      }

      // Set the timetable information, if it's available
      Lecture lecture = (Lecture) item;
      TextView title = (TextView) convertView.findViewById(R.id.timetableRowTitle);
      TextView time = (TextView) convertView.findViewById(R.id.timetableRowTime);
      TextView location = (TextView) convertView.findViewById(R.id.timetableRowLocation);
      TextView comment = (TextView) convertView.findViewById(R.id.timetableRowComments);

      Course assocCourse = TimetableActivity.course_map.get(lecture.course);

      if (assocCourse == null) {
        Log.e(TAG, "No course matching code " + lecture.course
            + " found - couldn't get course details");
        title.setText(lecture.course);
      } else {
        title.setText(assocCourse.getNamePlusAcronym());
      }

      String sStart = lecture.start.toString();
      String sFinish = lecture.finish.toString();

      time.setText(sStart + " - " + sFinish);

      String sLocation = "";
      Venue venue = TimetableActivity.venue_map.get(lecture.building);
      if (venue != null) {
        sLocation += venue.name;
      } else {
        if (!lecture.building.isEmpty()) {
          sLocation += lecture.building;
        } else {
          sLocation += "Unknown building";
        }
      }

      if (!lecture.room.isEmpty()) {
        sLocation += " - " + lecture.room;
      }

      location.setText(sLocation);

      if (lecture.comment.isEmpty()) {
        comment.setVisibility(View.GONE);
      } else {
        comment.setVisibility(View.VISIBLE);
        comment.setText(lecture.comment);
      }
    }

    return convertView;
  }

  // Repopulates the shown items based on the adapter's filters
  public void resetItems() {
    shown_items.clear();

    HashMap<String, ArrayList<Lecture>> day_lectures = new HashMap<String, ArrayList<Lecture>>();

    // Set up headings based on days
    for (int i = 0; i < TimetableActivity.days.size(); i++) {
      day_lectures.put(TimetableActivity.days.get(i), new ArrayList<Lecture>());
    }

    // For each lecture, add it to the appropriate day bucket if it meets
    //  filtering requirements
    for (Lecture l : lectures) {
      String day_key = l.day;
      if (!TimetableActivity.days.contains(day_key)) {
        day_key = TimetableActivity.days.get(TimetableActivity.days.size() - 1);
      }

      boolean ischecked = TimetableActivity.course_checks.contains(l.course);

      if ((ischecked || !filter_checked
          && (filter_course.isEmpty() || filter_course.equals(l.course)))
          && (l.semester == this.semester_filter || this.semester_filter == -1)) {
        day_lectures.get(day_key).add(l);
      }
    }

    // Iterate through the day buckets and add them to the shown items
    for (int i = 0; i < TimetableActivity.days.size() - 1; i++) {
      String day = TimetableActivity.days.get(i);
      ArrayList<Lecture> days_lectures = day_lectures.get(day);

      Collections.sort(days_lectures);

      shown_items.add(new ListSection(day));
      for (Lecture l : days_lectures) {
        shown_items.add(l);
      }
    }

    // Only show the "unknown" bucket if it contains items
    //  Otherwise it's usually just visually noisy for no good reason
    String unknown = TimetableActivity.days.get(TimetableActivity.days.size() - 1);
    ArrayList<Lecture> unknown_lectures = day_lectures.get(unknown);

    if (unknown_lectures.size() > 0) {
      Collections.sort(unknown_lectures);
      shown_items.add(new ListSection(unknown));
      for (Lecture l : unknown_lectures) {
        shown_items.add(l);
      }
    }

    this.notifyDataSetChanged();
  }
}




Java Source Code List

uk.co.skywelch.selp2013.AboutActivity.java
uk.co.skywelch.selp2013.CourseInformationActivity.java
uk.co.skywelch.selp2013.CourseListActivity.java
uk.co.skywelch.selp2013.CourseListAdapter.java
uk.co.skywelch.selp2013.Course.java
uk.co.skywelch.selp2013.CoursesParseTask.java
uk.co.skywelch.selp2013.CoursesXmlParser.java
uk.co.skywelch.selp2013.DrawerListAdapter.java
uk.co.skywelch.selp2013.FileDownloader.java
uk.co.skywelch.selp2013.HourMinute.java
uk.co.skywelch.selp2013.Lecture.java
uk.co.skywelch.selp2013.ListItem.java
uk.co.skywelch.selp2013.ListSection.java
uk.co.skywelch.selp2013.StringListItem.java
uk.co.skywelch.selp2013.TimetableActivity.java
uk.co.skywelch.selp2013.TimetableFragment.java
uk.co.skywelch.selp2013.TimetableListAdapter.java
uk.co.skywelch.selp2013.TimetableParseTask.java
uk.co.skywelch.selp2013.TimetableXmlParser.java
uk.co.skywelch.selp2013.VenueInformationActivity.java
uk.co.skywelch.selp2013.Venue.java
uk.co.skywelch.selp2013.VenuesParseTask.java
uk.co.skywelch.selp2013.VenuesXmlParser.java
uk.co.skywelch.selp2013.XMLUtilities.java