package org.adaptlab.chpir.android.survey;
import java.util.ArrayList;
import org.adaptlab.chpir.android.survey.Models.Question;
import org.adaptlab.chpir.android.survey.Models.Survey;
import org.adaptlab.chpir.android.survey.Tasks.SendResponsesTask;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.text.Html;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class ReviewPageFragment extends ListFragment {
public final static String EXTRA_REVIEW_QUESTION_IDS = "org.adaptlab.chpir.android.survey.review_question_ids";
public final static String EXTRA_REVIEW_SURVEY_ID = "org.adaptlab.chpir.android.survey.review_survey_id";
private ArrayList<Question> mSkippedQuestions;
private Survey mSurvey;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
mSkippedQuestions = new ArrayList<Question>();
ArrayList<String> skippedQuestionsIds = new ArrayList<String>();
skippedQuestionsIds = getActivity().getIntent().getExtras().getStringArrayList(EXTRA_REVIEW_QUESTION_IDS);
mSurvey = Survey.load(Survey.class, getActivity().getIntent().getExtras().getLong(EXTRA_REVIEW_SURVEY_ID));
for (String id : skippedQuestionsIds) {
Question q = Question.findByQuestionIdentifier(id);
if (q != null) {
mSkippedQuestions.add(q);
}
}
setListAdapter(new QuestionAdapter(mSkippedQuestions));
getActivity().setTitle("Skipped Questions");
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
Question question = ((QuestionAdapter) getListAdapter()).getItem(position);
setReturnResults(question.getRemoteId());
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.fragment_review, menu);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
menu.findItem(R.id.menu_item_back).setEnabled(true).setVisible(true);
menu.findItem(R.id.menu_item_complete).setEnabled(true).setVisible(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_item_back:
returnToSurvey();
return true;
case R.id.menu_item_complete:
completeSurvey();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void returnToSurvey() {
setReturnResults(mSkippedQuestions.get(0).getRemoteId());
}
private void completeSurvey() {
mSurvey.setAsComplete();
mSurvey.save();
setReturnResults(Long.MIN_VALUE);
new SendResponsesTask(getActivity()).execute();
}
private void setReturnResults(Long id) {
Intent i = new Intent();
i.putExtra(SurveyFragment.EXTRA_QUESTION_ID, id);
getActivity().setResult(Activity.RESULT_OK, i);
getActivity().finish();
}
private class QuestionAdapter extends ArrayAdapter<Question> {
public QuestionAdapter(ArrayList<Question> questions) {
super(getActivity(), 0, questions);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = getActivity().getLayoutInflater().inflate(R.layout.review_page, null);
}
Question question = getItem(position);
TextView questionNumberTextView = (TextView) convertView.findViewById(R.id.review_question_number);
questionNumberTextView.setText(String.valueOf(question.getNumberInInstrument()));
questionNumberTextView.setTextColor(Color.BLACK);
TextView questionTextView = (TextView) convertView.findViewById(R.id.review_question_text);
questionTextView.setText(Html.fromHtml(question.getText()));
questionTextView.setMaxLines(2);
return convertView;
}
}
}