package com.ecollege.android;
import java.util.ArrayList;
import java.util.HashMap;
import roboguice.inject.InjectView;
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.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Spinner;
import com.ecollege.android.activities.ECollegeListActivity;
import com.ecollege.android.adapter.TopicsAdapter;
import com.ecollege.android.adapter.TopicsAdapter.CourseGroupId;
import com.ecollege.android.adapter.TopicsAdapter.TopicAdapterMode;
import com.ecollege.android.adapter.UberItem;
import com.ecollege.android.adapter.UberItem.UberItemType;
import com.ecollege.android.util.CacheConfiguration;
import com.ecollege.api.ECollegeClient;
import com.ecollege.api.model.Course;
import com.ecollege.api.model.UserDiscussionTopic;
import com.ecollege.api.services.discussions.FetchDiscussionTopicsForCourseIds;
import com.google.inject.Inject;
public class DiscussionsActivity extends ECollegeListActivity {
@Inject ECollegeApplication app;
@Inject SharedPreferences prefs;
@InjectView(R.id.reload_button) Button reloadButton;
@InjectView(R.id.course_dropdown) Spinner courseDropdown;
protected ECollegeClient client;
private TopicsAdapter topicAdapter;
LayoutInflater viewInflater;
private ArrayList<String> courseDropdownTitles;
private HashMap<String, Course> courseTitleToCourseMap;
private long selectedCourseId;
private boolean firstLoadFinished = false;
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.discussions);
client = app.getClient();
viewInflater = getLayoutInflater();
loadCourseTitles();
configureControls();
topicAdapter = new TopicsAdapter(this,TopicAdapterMode.GROUP_BY_COURSE_FILTER_INACTIVE);
setListAdapter(topicAdapter);
updateCurrentTopics(false);
}
@Override protected void onActivityResult (int requestCode, int resultCode, Intent data) {
if (requestCode == UserTopicActivity.VIEW_TOPIC_REQUEST) {
updateCurrentTopics(true);
}
}
private void loadCourseTitles() {
courseDropdownTitles = new ArrayList<String>();
courseTitleToCourseMap = new HashMap<String, Course>();
courseDropdownTitles.add(getString(R.string.all_courses));
String courseTitle;
for (Course course : app.getCurrentCourseList()) {
courseTitle = Html.fromHtml(course.getTitle()).toString();
courseDropdownTitles.add(courseTitle);
courseTitleToCourseMap.put(courseTitle, course);
}
}
private void configureControls() {
reloadButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
updateCurrentTopics(true);
}
});
ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, R.layout.transparent_spinner_text_view, courseDropdownTitles);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
courseDropdown.setAdapter(adapter);
courseDropdown.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
courseSelected(arg2);
}
public void onNothingSelected(AdapterView<?> arg0) { }
});
}
protected void courseSelected(int position) {
if (firstLoadFinished) {
if (position == 0) {
selectedCourseId = 0;
} else {
String title = courseDropdownTitles.get(position);
selectedCourseId = courseTitleToCourseMap.get(title).getId();
}
updateCurrentTopics(false);
}
}
private void updateCurrentTopics(boolean reload) {
topicAdapter.beginLoading();
CacheConfiguration cacheConfiguration = new CacheConfiguration();
cacheConfiguration.bypassFileCache = reload;
cacheConfiguration.bypassResultCache = reload;
ArrayList<String> courseIds = getSelectedCourseId();
buildService(new FetchDiscussionTopicsForCourseIds(courseIds))
.configureCaching(cacheConfiguration)
.execute();
}
public void onServiceCallException(FetchDiscussionTopicsForCourseIds service, Exception ex) {
firstLoadFinished = true;
topicAdapter.hasError();
}
public void onServiceCallSuccess(FetchDiscussionTopicsForCourseIds service) {
firstLoadFinished = true;
topicAdapter.setLastUpdatedAt(service.getCompletedAt());
topicAdapter.updateItems(service.getResult());
}
private ArrayList<String> getSelectedCourseId() {
boolean allCoursesSelected = (selectedCourseId == 0);
ArrayList<String> ids = new ArrayList<String>();
if (allCoursesSelected) { // all courses selected
for (Course course : app.getCurrentCourseList()) {
ids.add(Long.toString(course.getId()));
}
} else {
ids.add(Long.toString(selectedCourseId));
}
return ids;
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
@SuppressWarnings("unchecked")
UberItem<UserDiscussionTopic> item = (UberItem<UserDiscussionTopic>)l.getItemAtPosition(position);
if (item.getItemType() == UberItemType.FOOTER) {
CourseGroupId groupId = (CourseGroupId) item.getGroupId();
long courseId = groupId.getCourseId();
Intent intent = new Intent(this, CourseDiscussionsActivity.class);
intent.putExtra(CourseDiscussionsActivity.COURSE_ID_EXTRA, courseId);
startActivity(intent);
} else {
UserDiscussionTopic selectedTopic = item.getDataItem();
Intent intent = new Intent(this, UserTopicActivity.class);
intent.putExtra(UserTopicActivity.USER_TOPIC_EXTRA, selectedTopic);
startActivityForResult(intent, UserTopicActivity.VIEW_TOPIC_REQUEST);
}
}
}