/**
   * Trata os pedidos de inicialização do Service: se começou uma nova lista, se enviou o nome do
   * usuário da nova lista, se carregou uma lista que ja estava sendo respodida.
   */
  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    Log.v("BackService", "onStartCommand");
    int start = intent.getIntExtra("start", 0);
    switch (start) {
      case START_NEW_QUESTIONLIST:
        Intent i = new Intent(IFILTER);
        String xml = intent.getStringExtra("xml");

        QuestionList ql = QuestionList.fromXML(xml);
        if (ql == null) {
          Log.v("BackService", "Erro ao carregar question list.");
          i.putExtra("load", false);
          sendBroadcast(i);
          stopSelf();
          return 0;
        }
        mQL = ql;
        i.putExtra("load", true);
        sendBroadcast(i);
        Log.v("BackService", "Question list carregada com sucesso,Broadcast enviado!");
        break;
      case START_NEW_USERNAME:
        mUser = new User(intent.getStringExtra("username"), mQL);
        Log.v("BackService", "Username " + mUser.getNome());
        mAvaliacao = mUser.QL.getAvaliacao();
        break;
      case START_LOAD_USER:
        Intent i2 = new Intent(IFILTER);
        String xml2 = intent.getStringExtra("xml");
        User usr = User.fromXML(xml2);
        if (usr == null) {
          Log.v("BackService", "Erro ao carregar user.");
          i2.putExtra("load", false);
          sendBroadcast(i2);
          stopSelf();
          return 0;
        }
        Log.v("BackService", "User carregado com sucesso.");
        mUser = usr;
        i2.putExtra("load", true);
        sendBroadcast(i2);
        Log.v("BackService", "Broadcast enviado!");
        mAvaliacao = mUser.QL.getAvaliacao();
        break;
    }
    return Service.START_STICKY;
  }
 /**
  * Muda para a próxima questão.
  *
  * @return
  */
 public boolean nextQuestion() {
   if (mAtualQuestion + 1 < mUser.QL.size()) {
     mAtualQuestion++;
     return true;
   }
   return false;
 }
 /**
  * Bundle contendo: int acertos; int total; int tentativas; boolean[] corretas;
  *
  * @return o bundle contendo as informações da lista totalmente respondida
  * @return null se nao tiver sido totalmente respondida
  */
 public Bundle verificaRespondeuTodas() {
   Log.d("BackService", "verificaRespondeuTodas");
   if (mUser.isCompletelyAnswered()) {
     Bundle b = new Bundle();
     b.putInt("acertos", mUser.getAcertos());
     b.putInt("total", mUser.QL.getArrayListQuestion().size());
     //			b.putInt("tentativas", mUser.getTentativas());
     boolean[] corretas = mUser.getRespostasCorretas();
     boolean[] corretas2 = new boolean[corretas.length];
     int i = 0;
     for (Question q : mUser.QL.getArrayListQuestion()) {
       corretas2[i] = corretas[q.ID];
       i++;
     }
     b.putBooleanArray("corretas", corretas2);
     return b;
   }
   return null;
 }
  /**
   * A questão atual será setada para a requisitada. Bundle contendo: String title; String text;
   * ArrayList<String> list; int answer;
   *
   * @param pos posição da questão na lista.
   * @return
   */
  public Bundle getQuestionInfo(int pos) {
    mAtualQuestion = pos; // a questão atual é esta que se pede.

    Bundle b = new Bundle();

    Question q = mUser.QL.getQuestion(pos);
    b.putString("title", q.Titulo);
    b.putString("text", q.Enunciado);
    ArrayList<String> list = q.getArrayListStringAlternatives();
    b.putStringArrayList("list", list);
    b.putInt("answer", mUser.getResposta(q.ID));

    return b;
  }
 /**
  * Bundle contendo: ArrayList<String> list; String title; int number_of_questions;
  *
  * @return
  */
 public Bundle getQuestionListInfo() {
   Bundle b = new Bundle();
   ArrayList<Question> qlist = mUser.QL.getArrayListQuestion();
   ArrayList<String> list = new ArrayList<String>();
   int i = 1;
   for (Question q : qlist) {
     StringBuilder sb = new StringBuilder();
     sb.append((i++) + " : ");
     if (q.Titulo.equals("")) {
       if (q.Enunciado.length() > 100) {
         sb.append(q.Enunciado.subSequence(0, 100).toString());
       } else {
         sb.append(q.Enunciado);
       }
     } else {
       sb.append(q.Titulo);
     }
     list.add(sb.toString());
   }
   b.putStringArrayList("list", list);
   b.putString("title", mUser.QL.Titulo);
   b.putInt("number_of_questions", mUser.QL.size());
   return b;
 }