package com.ecollege.android; import java.util.List; import roboguice.inject.InjectView; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import com.ecollege.android.activities.ECollegeListActivity; import com.ecollege.android.adapter.UberAdapter; import com.ecollege.android.adapter.UberItem; import com.ecollege.android.tasks.TaskPostProcessor; import com.ecollege.api.ECollegeClient; import com.ecollege.api.model.Course; import com.ecollege.api.services.courses.FetchMyCoursesService; import com.google.inject.Inject; public class CoursesActivity extends ECollegeListActivity { public static final String COURSE_EXTRA = "COURSE_EXTRA"; @Inject ECollegeApplication app; @Inject SharedPreferences prefs; @InjectView(R.id.reload_button) Button reloadButton; protected ECollegeClient client; protected LayoutInflater viewInflater; protected List<Course> courses; protected CourseArrayAdapter courseAdapter; protected View.OnClickListener reloadClickListener = new View.OnClickListener() { public void onClick(View v) { reloadAndDisplayCourses(); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.courses); client = app.getClient(); viewInflater = getLayoutInflater(); courses = app.getCurrentCourseList(); reloadButton.setOnClickListener(reloadClickListener); loadAndDisplayCourses(app.getCurrentCourseListLastLoaded()); } protected void loadAndDisplayCourses(long lastUpdatedAt) { if (courseAdapter == null) courseAdapter = new CourseArrayAdapter(this); courseAdapter.updateItems(courses); courseAdapter.setLastUpdatedAt(lastUpdatedAt); setListAdapter(courseAdapter); } protected void reloadAndDisplayCourses() { courseAdapter.beginLoading(); buildService(new FetchMyCoursesService()) .bypassFileCache() .bypassResultCache() .setPostProcessor(new TaskPostProcessor<FetchMyCoursesService>() { @Override public FetchMyCoursesService onPostProcess(FetchMyCoursesService service) { app.setCurrentCourseList(service.getResult()); return service; } }) .execute(); } public void onServiceCallSuccess(FetchMyCoursesService service) { loadAndDisplayCourses(service.getCompletedAt()); } public void onServiceCallException(FetchMyCoursesService service, Exception ex) { courseAdapter.hasError(); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { @SuppressWarnings("unchecked") UberItem<Course> item = (UberItem<Course>)l.getItemAtPosition(position); Intent intent = new Intent(this, CourseActivity.class); intent.putExtra(COURSE_EXTRA, item.getDataItem()); startActivity(intent); } protected class CourseViewHolder { public TextView courseTitleText; public TextView courseDescriptionText; } protected class CourseArrayAdapter extends UberAdapter<Course> { public CourseArrayAdapter(Context context) { super(context,false,false,false); } @Override protected View getDataItemView(View convertView, ViewGroup parent, UberItem<Course> item) { CourseViewHolder holder; if (convertView == null) { convertView = viewInflater.inflate(R.layout.course_item, null); holder = new CourseViewHolder(); holder.courseTitleText = (TextView) convertView.findViewById(R.id.title_text); holder.courseDescriptionText = (TextView) convertView.findViewById(R.id.description_text); convertView.setTag(holder); } else { holder = (CourseViewHolder) convertView.getTag(); } Course course = item.getDataItem(); holder.courseTitleText.setText(Html.fromHtml(course.getTitle())); holder.courseDescriptionText.setText(course.getDisplayCourseCode()); return convertView; } } }