package ca.etsmtl.applets.etsmobile.ui.fragment;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import com.octo.android.robospice.persistence.exception.SpiceException;
import com.octo.android.robospice.request.springandroid.SpringAndroidSpiceRequest;
import ca.etsmtl.applets.etsmobile.ApplicationManager;
import ca.etsmtl.applets.etsmobile.model.Moodle.MoodleCourse;
import ca.etsmtl.applets.etsmobile.model.Moodle.MoodleCourses;
import ca.etsmtl.applets.etsmobile.model.Moodle.MoodleProfile;
import ca.etsmtl.applets.etsmobile.model.Moodle.MoodleToken;
import ca.etsmtl.applets.etsmobile.model.UserCredentials;
import ca.etsmtl.applets.etsmobile.ui.activity.MoodleCourseActivity;
import ca.etsmtl.applets.etsmobile.ui.adapter.MoodleCoursesAdapter;
import ca.etsmtl.applets.etsmobile.util.SecurePreferences;
import ca.etsmtl.applets.etsmobile2.R;
/**
* Interacts with Moodle API
*
* @author Thibaut
*
*/
public class MoodleFragment extends HttpFragment {
ListView moodleCoursesListView;
private MoodleCoursesAdapter moodleCoursesAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup v = (ViewGroup) inflater.inflate(R.layout.fragment_moodle, container, false);
super.onCreateView(inflater, v, savedInstanceState);
moodleCoursesListView = (ListView) v.findViewById(R.id.listView_moodle_courses);
queryMoodleToken();
return v;
}
@Override
void updateUI() {
loadingView.showLoadingView();
}
@Override
public void onRequestFailure(SpiceException e) {
super.onRequestFailure(e);
}
@Override
public void onRequestSuccess(Object o) {
try {
if (o instanceof MoodleToken) {
MoodleToken moodleToken = (MoodleToken) o;
SecurePreferences securePreferences = new SecurePreferences(getActivity());
securePreferences.edit().putString(UserCredentials.MOODLE_TOKEN, moodleToken.getToken()).commit();
ApplicationManager.userCredentials.setMoodleToken(moodleToken.getToken());
if (moodleToken.getToken().equals("")) {
throw new Exception("Impossible de se connecter");
}
queryMoodleProfile(moodleToken);
}
if (o instanceof MoodleProfile) {
MoodleProfile moodleProfile = (MoodleProfile) o;
queryMoodleCourses(moodleProfile);
}
if (o instanceof MoodleCourses) {
MoodleCourses moodleCourses = (MoodleCourses) o;
moodleCoursesAdapter = new MoodleCoursesAdapter(getActivity(), R.layout.row_moodle_course, moodleCourses, this);
moodleCoursesListView.setAdapter(moodleCoursesAdapter);
moodleCoursesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
MoodleCourse moodleCourse = (MoodleCourse) parent.getItemAtPosition(position);
Intent i = new Intent(getActivity(), MoodleCourseActivity.class);
i.putExtra("idCours", moodleCourse.getId());
i.putExtra("nameCours", moodleCourse.getShortname());
getActivity().startActivity(i);
}
});
super.onRequestSuccess(null);
}
}catch (Exception e) {
if(getActivity()!=null)
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
/**
* Query for moodle courses
* @param moodleProfile
*/
private void queryMoodleCourses(final MoodleProfile moodleProfile) {
SpringAndroidSpiceRequest<Object> request = new SpringAndroidSpiceRequest<Object>(null) {
@Override
public MoodleCourses loadDataFromNetwork() throws Exception {
String url = getActivity().getString(R.string.moodle_api_enrol_get_users_courses, ApplicationManager.userCredentials.getMoodleToken(),moodleProfile.getUserId());
return getRestTemplate().getForObject(url, MoodleCourses.class);
}
};
dataManager.sendRequest(request, MoodleFragment.this);
}
/**
* Query for Moodle profile
* @param moodleToken
*/
private void queryMoodleProfile(final MoodleToken moodleToken) {
SpringAndroidSpiceRequest<Object> request = new SpringAndroidSpiceRequest<Object>(null) {
@Override
public MoodleProfile loadDataFromNetwork() throws Exception {
String url = getActivity().getString(R.string.moodle_api_get_siteinfo, moodleToken.getToken());
return getRestTemplate().getForObject(url, MoodleProfile.class);
}
};
dataManager.sendRequest(request, MoodleFragment.this);
}
/**
* Query for Moodle token
*/
private void queryMoodleToken() {
if(getActivity()!=null) {
SpringAndroidSpiceRequest<Object> request = new SpringAndroidSpiceRequest<Object>(null) {
@Override
public MoodleToken loadDataFromNetwork() throws Exception {
String url = getActivity().getString(R.string.moodle_api_get_token, ApplicationManager.userCredentials.getUsername(), ApplicationManager.userCredentials.getPassword());
return getRestTemplate().getForObject(url, MoodleToken.class);
}
};
dataManager.sendRequest(request, MoodleFragment.this);
}
}
/**
* @deprecated Opens Moodle's official application
*/
private void openMoodle() {
Intent intent = getActivity().getPackageManager().getLaunchIntentForPackage(getString(R.string.moodle));
if (intent != null) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} else {
// bring user to the market
// or let them choose an app?
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("market://details?id=" + getString(R.string.moodle)));
startActivity(intent);
}
}
}