package com.ecollege.android;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
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.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Spinner;
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.util.CacheConfiguration;
import com.ecollege.api.model.Course;
import com.ecollege.api.model.RosterUser;
import com.ecollege.api.services.users.FetchRosterService;
import com.google.inject.Inject;
public class CoursePeopleActivity extends ECollegeListActivity {
@Inject ECollegeApplication app;
@Inject SharedPreferences prefs;
@InjectView(R.id.title_text) TextView titleText;
@InjectView(R.id.course_title_text) TextView courseTitleText;
@InjectView(R.id.reload_button) Button reloadButton;
@InjectView(R.id.role_dropdown) Spinner roleDropdown;
@InjectExtra(CoursesActivity.COURSE_EXTRA) Course course;
@InjectResource(R.string.all_roles) String allRoles;
@InjectResource(R.string.student_role) String studentRole;
@InjectResource(R.string.instructor_role) String instructorRole;
private LayoutInflater viewInflater;
private PeopleAdapter personAdapter;
private OnItemSelectedListener onRoleSelected;
private String currentRoleFilter;
private List<RosterUser> allPeopleInCourse;
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.people);
viewInflater = getLayoutInflater();
titleText.setText(R.string.people);
reloadButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
loadPeopleForCourse(true);
}
});
displayCourse();
loadPeopleForCourse(false);
setupRoleFilter();
}
private void setupRoleFilter() {
currentRoleFilter = allRoles;
String[] roles = new String[] {allRoles,studentRole,instructorRole};
ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, R.layout.transparent_spinner_text_view, roles);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
roleDropdown.setAdapter(adapter);
onRoleSelected = new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
currentRoleFilter = (String)parent.getItemAtPosition(position);
updateCurrentPeople();
}
public void onNothingSelected(AdapterView<?> parent) {
currentRoleFilter = allRoles;
updateCurrentPeople();
}
};
}
private void updateCurrentPeople() {
if (allPeopleInCourse != null) {
if (currentRoleFilter.equals(allRoles)) {
personAdapter.updateItems(allPeopleInCourse);
} else {
List<RosterUser> filteredPeople = new ArrayList<RosterUser>();
for (int i=0;i<allPeopleInCourse.size();i++) {
RosterUser ru = allPeopleInCourse.get(i);
if (currentRoleFilter.equals(instructorRole)) {
if (RosterUser.ROLE_CODE_INSTRUCTOR.equals(ru.getRoleCode())) {
filteredPeople.add(ru);
}
} else if (currentRoleFilter.equals(studentRole)) {
if (RosterUser.ROLE_CODE_STUDENT.equals(ru.getRoleCode())) {
filteredPeople.add(ru);
}
}
}
personAdapter.updateItems(filteredPeople);
}
}
}
private void displayCourse() {
courseTitleText.setText(Html.fromHtml(course.getTitle()));
}
private void loadPeopleForCourse(boolean reload) {
personAdapter = new PeopleAdapter(this);
setListAdapter(personAdapter);
CacheConfiguration cacheConfiguration = new CacheConfiguration();
cacheConfiguration.bypassFileCache = reload;
cacheConfiguration.bypassResultCache = reload;
personAdapter.beginLoading();
buildService(new FetchRosterService(course.getId())).configureCaching(cacheConfiguration).execute();
}
public void onServiceCallSuccess(FetchRosterService service) {
roleDropdown.setOnItemSelectedListener(onRoleSelected);
personAdapter.setLastUpdatedAt(service.getCompletedAt());
allPeopleInCourse = service.getResult();
Collections.sort(allPeopleInCourse);
updateCurrentPeople();
}
public void onServiceCallException(FetchRosterService service, Exception ex) {
personAdapter.hasError();
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
@SuppressWarnings("unchecked")
UberItem<RosterUser> item = (UberItem<RosterUser>)l.getItemAtPosition(position);
Intent i = new Intent(this,PersonActivity.class);
i.putExtra(PersonActivity.COURSE_EXTRA, course);
i.putExtra(PersonActivity.PERSON_EXTRA, item.getDataItem());
i.putExtra(PersonActivity.FINISH_ON_CLICK_ALL_PEOPLE_EXTRA, true);
startActivity(i);
}
protected class PersonViewHolder {
public TextView personNameText;
public TextView personRoleText;
}
protected class PeopleAdapter extends UberAdapter<RosterUser> {
public PeopleAdapter(Context context) {
super(context, true, false, false);
}
@Override
protected Object groupIdFunction(RosterUser item) {
return item.getLastNameFirstChar();
}
@Override
protected View getDataItemView(View convertView, ViewGroup parent,
UberItem<RosterUser> item) {
PersonViewHolder holder;
if (convertView == null) {
holder = new PersonViewHolder();
convertView = viewInflater.inflate(R.layout.person_list_item, null);
holder.personNameText = (TextView) convertView.findViewById(R.id.person_name_text);
holder.personRoleText = (TextView) convertView.findViewById(R.id.person_role_text);
convertView.setTag(holder);
} else {
holder = (PersonViewHolder) convertView.getTag();
}
RosterUser user = item.getDataItem();
holder.personNameText.setText(user.getDisplayName());
holder.personRoleText.setText(user.getFriendlyRole());
return convertView;
}
}
}