package com.ecollege.android; import roboguice.inject.InjectExtra; import roboguice.inject.InjectResource; 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.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.api.model.Course; import com.ecollege.api.model.Grade; import com.ecollege.api.model.GradebookItem; import com.ecollege.api.model.UserGradebookItem; import com.ecollege.api.services.courses.FetchUserGradebookItemsForCourseId; import com.google.inject.Inject; import com.ocpsoft.pretty.time.PrettyTime; public class CourseGradebookActivity extends ECollegeListActivity { @Inject ECollegeApplication app; @Inject SharedPreferences prefs; @InjectView(R.id.title_text) TextView titleText; @InjectView(R.id.course_title_text) TextView courseTitleText; @InjectResource(R.string.gradebook) String gradebookTitleResource; @InjectResource(R.string.no_grade) String noGradeResource; @InjectExtra(CoursesActivity.COURSE_EXTRA) Course course; private LayoutInflater viewInflater; private UserGradebookItemAdapter gradebookAdapter; private static final PrettyTime prettyTimeFormatter = new PrettyTime(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.course_menu_item_detail_view); viewInflater = getLayoutInflater(); titleText.setText(gradebookTitleResource); displayCourse(); loadAndDisplayUserGradebookItems(); } private void displayCourse() { courseTitleText.setText(Html.fromHtml(course.getTitle())); } private void loadAndDisplayUserGradebookItems() { if (gradebookAdapter == null) { gradebookAdapter = new UserGradebookItemAdapter(this); gradebookAdapter.beginLoading(); buildService(new FetchUserGradebookItemsForCourseId(course.getId(), true)).execute(); } setListAdapter(gradebookAdapter); } public void onServiceCallSuccess(FetchUserGradebookItemsForCourseId service) { gradebookAdapter.updateItems(service.getResult()); } public void onServiceCallException(FetchUserGradebookItemsForCourseId service, Exception ex) { gradebookAdapter.hasError(); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { @SuppressWarnings("unchecked") UberItem<UserGradebookItem> item = (UberItem<UserGradebookItem>)l.getItemAtPosition(position); if (item.getDataItem().getGrade() != null) { GradebookItem gradebookItem = item.getDataItem().getGradebookItem(); Intent i = new Intent(this,GradeActivity.class); i.putExtra("courseId", course.getId()); i.putExtra("gradebookItemGuid", gradebookItem.getId()); i.putExtra(GradeActivity.FINISH_ON_CLICK_ALL_GRADES_EXTRA, true); startActivity(i); } } protected class UserGradebookItemHolder { public TextView titleText; public TextView gradeText; public TextView dateText; } protected class UserGradebookItemAdapter extends UberAdapter<UserGradebookItem> { public UserGradebookItemAdapter (Context context) { super(context,false,false,false); } @Override protected View getDataItemView(View convertView, ViewGroup parent, UberItem<UserGradebookItem> item) { UserGradebookItemHolder holder; if (convertView == null) { holder = new UserGradebookItemHolder(); convertView = viewInflater.inflate(R.layout.gradebook_item, null); holder.titleText = (TextView) convertView.findViewById(R.id.item_title); holder.dateText = (TextView) convertView.findViewById(R.id.date_text); holder.gradeText = (TextView) convertView.findViewById(R.id.grade_text); convertView.setTag(holder); } else { holder = (UserGradebookItemHolder) convertView.getTag(); } UserGradebookItem ugbi = item.getDataItem(); GradebookItem gradebookItem = ugbi.getGradebookItem(); Grade grade = ugbi.getGrade(); holder.titleText.setText(gradebookItem.getTitle()); if (null == grade) { holder.dateText.setText(noGradeResource); holder.gradeText.setText(null); } else { holder.dateText.setText(prettyTimeFormatter.format(grade.getUpdatedDate().getTime())); holder.gradeText.setText(ugbi.getDisplayedGrade()); } return convertView; } } }