Rev 1 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
package com.cesams.twogetskills.activity;
import android.content.Intent;
import android.os.Bundle;
import com.cesams.twogetskills.Constants;
import com.cesams.twogetskills.dao.AnswerDao;
import com.cesams.twogetskills.dao.QuestionDao;
import com.cesams.twogetskills.dao.QuizDao;
import com.cesams.twogetskills.fragment.QuizFailFragment;
import com.cesams.twogetskills.fragment.QuizIntroFragment;
import com.cesams.twogetskills.fragment.QuizMultipleAnswerFragment;
import com.cesams.twogetskills.fragment.QuizPassFragment;
import com.cesams.twogetskills.fragment.QuizRangeSimpleFragment;
import com.cesams.twogetskills.fragment.QuizSingleAnswerFragment;
import com.cesams.twogetskills.entity.Answer;
import com.cesams.twogetskills.entity.Question;
import com.cesams.twogetskills.entity.Quiz;
import com.cesams.twogetskills.pojo.QuizResponse;
import com.cesams.twogetskills.skeleton.IQuizActivity;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import android.os.CountDownTimer;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.cesams.twogetskills.R;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
public class QuizActivity extends AppCompatActivity implements IQuizActivity {
private final static String TAG = "C2GS - QuizActivity";
private final static String PREFIX_FRAG = "FRAG";
private Quiz quiz;
private String quizUuid;
private ArrayList<Question> questions;
private HashMap<String, ArrayList<Answer>> answers;
private ArrayList<QuizResponse> quizResponses;
private TextView textViewScore;
private TextView textViewQuestion;
private TextView textChronometer;
private HashMap<String, Fragment> fragmentHashMap;
private Button btnPrevious;
private Button btnNext;
private Button btnStart;
private Button btnFinish;
private Button btnExit;
private int questionIdxActive;
private int fragmentIdxActive;
private int totalPoints;
private CountDownTimer countDownTimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quiz);
questionIdxActive = 0;
fragmentIdxActive = 0;
questions = new ArrayList<>();
answers = new HashMap<>();
quizResponses = new ArrayList<>();
fragmentHashMap = new HashMap<>();
//companyUuid = getIntent().getStringExtra("companyUuid");
//topicUuid = getIntent().getStringExtra("topicUuid");
//capsuleUuid = getIntent().getStringExtra("capsuleUuid");
// slideUuid = getIntent().getStringExtra("slideUuid");
quizUuid = getIntent().getStringExtra("quizUuid");
//userUuid = getIntent().getStringExtra("userUuid");
quiz = new Quiz();
quiz.setCompanyUuid(getIntent().getStringExtra("quiz_company_uuid"));
quiz.setUuid(getIntent().getStringExtra("quiz_uuid"));
quiz.setName(getIntent().getStringExtra("quiz_name"));
quiz.setText(getIntent().getStringExtra("quiz_text"));
quiz.setFailed(getIntent().getStringExtra("quiz_failed"));
quiz.setPoints(getIntent().getIntExtra("quiz_points", 0));
quiz.setMinimumPointsRequired(getIntent().getIntExtra("quiz_minimum_points_required", 0));
quiz.setMaxTime(getIntent().getIntExtra("quiz_max_time", 0));
int maxAnswer = 0;
int maxQuestion = getIntent().getIntExtra("questions", 0);
Question question;
Answer answer;
ArrayList<Answer> questionAnswers;
for(int i = 1; i <= maxQuestion; i++){
question = new Question();
question.setQuizUuid(quizUuid);
question.setUuid(getIntent().getStringExtra("question" + i + "_uuid"));
question.setText(getIntent().getStringExtra("question" + i + "_text"));
question.setPoints(getIntent().getIntExtra("question" + i + "_points", 0));
question.setMaxlength(getIntent().getIntExtra("question" + i + "_max_length", 0));
question.setType(getIntent().getStringExtra("question" + i + "_type"));
questions.add(question);
maxAnswer = getIntent().getIntExtra("question" + i + "_answers", 0);
questionAnswers = new ArrayList<>();
for(int j = 1; j <= maxAnswer; j++ ) {
answer = new Answer();
answer.setQuestionUuid(question.getUuid());
answer.setUuid(getIntent().getStringExtra("question" + i + "_answer_uuid" + j));
answer.setText(getIntent().getStringExtra("question" + i + "_answer_text" + j));
answer.setPoints(getIntent().getIntExtra("question" + i + "_answer_points" + j, 0));
answer.setCorrect(getIntent().getStringExtra("question" + i + "_answer_correct" + j));
questionAnswers.add(answer);
}
answers.put(question.getUuid(), questionAnswers);
}
textViewScore = (TextView) findViewById(R.id.activity_quiz_textview_score);
textViewScore.setText("0");
textViewQuestion = (TextView) findViewById(R.id.activity_quiz_textview_question_count);
textViewQuestion.setText(String.valueOf(questions.size()));
textChronometer = (TextView) findViewById(R.id.activity_quiz_textview_chronometer);
textChronometer.setText("00:00");
btnPrevious = (Button) findViewById(R.id.activity_quiz_button_previous);
btnPrevious.setVisibility(View.INVISIBLE);
btnPrevious.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (questionIdxActive > 0) {
questionIdxActive--;
}
showQuestions();
}
});
btnNext = (Button) findViewById(R.id.activity_quiz_button_next);
btnNext.setVisibility(View.INVISIBLE);
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (questionIdxActive < (questions.size() - 1)) {
questionIdxActive++;
showQuestions();
}
}
});
btnExit = (Button) findViewById(R.id.activity_quiz_button_exit);
btnExit.setVisibility(View.INVISIBLE);
btnExit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(totalPoints >= quiz.getMinimumPointsRequired()) {
exitQuizPass();
} else {
exitQuizFail();
}
}
});
btnStart = (Button) findViewById(R.id.activity_quiz_button_start);
btnStart.setVisibility(View.VISIBLE);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(Constants.FORMAT_DATETIME_SERVICE);
String dateOn = simpleDateFormat.format(date);
long millisInFuture = quiz.getMaxTime() * 60000;
countDownTimer = new CountDownTimer(millisInFuture, 1000) {
public void onTick(long millisUntilFinished) {
long minutes = millisUntilFinished / 60000;
long seconds = (millisUntilFinished - (minutes * 60000)) / 1000;
String sMinutes = minutes < 10 ? "0" + minutes : String.valueOf(minutes);
String sSeconds = seconds < 10 ? "0" + seconds : String.valueOf(seconds);
textChronometer.setText(sMinutes + ":" + sSeconds);
}
public void onFinish() {
textChronometer.setText("--:--");
finishQuiz();
}
}.start();
btnStart.setVisibility(View.INVISIBLE);
if (questions.size() == 1) {
btnFinish.setVisibility(View.VISIBLE);
} else {
btnNext.setVisibility(View.VISIBLE);
}
showQuestions();
}
});
btnFinish = (Button) findViewById(R.id.activity_quiz_button_finish);
btnFinish.setVisibility(View.INVISIBLE);
btnFinish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finishQuiz();
}
});
invokeFragment(Constants.IDX_QUIZ_FRAGMENT_INTRO);
}
@Override
public int getTotalPoints() {
return totalPoints;
}
@Override
public void exitQuizFail()
{
Intent intent = new Intent();
intent.putExtra("completed", false);
intent.putExtra("requestCode", Constants.REQUEST_CODE_QUIZ);
setResult(RESULT_CANCELED, intent);
finish();
}
@Override
public void exitQuizPass()
{
Intent intent = new Intent();
intent.putExtra("completed", true);
intent.putExtra("requestCode", Constants.REQUEST_CODE_QUIZ);
setResult(RESULT_OK, intent);
finish();
}
public void finishQuiz()
{
if(countDownTimer != null) {
countDownTimer.cancel();
}
textChronometer.setText("--:--");
totalPoints = 0;
for(int i = 0; i < quizResponses.size(); i++)
{
totalPoints += quizResponses.get(i).getPoints();
}
textViewScore.setText(totalPoints + " / " + quiz.getPoints());
btnFinish.setVisibility(View.INVISIBLE);
btnExit.setVisibility(View.VISIBLE);
if(totalPoints >= quiz.getMinimumPointsRequired()) {
//Pass
invokeFragment(Constants.IDX_QUIZ_FRAGMENT_PASS);
} else {
//Fail
invokeFragment(Constants.IDX_QUIZ_FRAGMENT_FAIL);
}
}
public void showQuestions()
{
btnStart.setVisibility(View.INVISIBLE);
btnFinish.setVisibility(View.INVISIBLE);
btnNext.setVisibility(View.INVISIBLE);
btnPrevious.setVisibility(View.INVISIBLE);
if(questionIdxActive == 0) {
if(questions.size() > 1) {
btnNext.setVisibility(View.VISIBLE);
} else {
btnFinish.setVisibility(View.VISIBLE);
}
} else {
if(questionIdxActive == (questions.size() - 1)) {
btnFinish.setVisibility(View.VISIBLE);
} else {
btnNext.setVisibility(View.VISIBLE);
}
}
int score = 0;
for(int i = 0; i < quizResponses.size(); i++)
{
score += quizResponses.get(i).getPoints();
}
textViewQuestion.setText((1 + questionIdxActive) + " / " + questions.size() );
textViewScore.setText(String.valueOf(score));
Question question = questions.get(questionIdxActive);
if(question.getType().equals(Constants.QUESTION_TYPE_RANGE_1_10)) {
invokeFragment(Constants.IDX_QUIZ_FRAGMENT_QUESTION_RANGE_SIMPLE);
} else if(question.getType().equals(Constants.QUESTION_TYPE_RANGE_1_6)) {
invokeFragment(Constants.IDX_QUIZ_FRAGMENT_QUESTION_RANGE_SIMPLE);
} else if(question.getType().equals(Constants.QUESTION_TYPE_RANGE_1_5)) {
invokeFragment(Constants.IDX_QUIZ_FRAGMENT_QUESTION_RANGE_SIMPLE);
} else if(question.getType().equals(Constants.QUESTION_TYPE_SINGLE_SELECTION)) {
invokeFragment(Constants.IDX_QUIZ_FRAGMENT_QUESTION_SIMPLE);
} else if(question.getType().equals(Constants.QUESTION_TYPE_MULTIPLE_SELECTION)) {
invokeFragment(Constants.IDX_QUIZ_FRAGMENT_QUESTION_MULTIPLE);
}
}
@Override
public void onBackPressed() {
return;
/*
Intent intent = new Intent();
setResult(RESULT_CANCELED, intent);
finish();*/
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
public Quiz getQuiz()
{
return quiz;
}
@Override
public ArrayList<Question> getQuestions()
{
return questions;
}
@Override
public ArrayList<Answer> getAnswers(String questionUuid)
{
if(answers.containsKey(questionUuid)) {
return answers.get(questionUuid);
} else {
return null;
}
}
@Override
public ArrayList<QuizResponse> getQuizResponses()
{
return quizResponses;
}
@Override
public Question getQuestionActive()
{
return questions.get(questionIdxActive);
}
public void invokeFragment(int fragmentIdxActiveNuevo)
{
String fragmentKeyActual = PREFIX_FRAG + fragmentIdxActive;
String fragmentKeyNuevo = PREFIX_FRAG + fragmentIdxActiveNuevo;
fragmentIdxActive = fragmentIdxActiveNuevo;
Fragment fragment;
// if(!fragmentKeyActual.equalsIgnoreCase(fragmentKeyNuevo)) {
if(fragmentHashMap.containsKey(fragmentKeyActual)) {
fragment = fragmentHashMap.get(fragmentKeyActual);
if(fragment != null) {
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.hide(fragment);
fragmentTransaction.commit();
}
}
//}
boolean add = false;
fragment = null;
switch(fragmentIdxActiveNuevo) {
case Constants.IDX_QUIZ_FRAGMENT_QUESTION_RANGE_SIMPLE :
if(fragmentHashMap.containsKey(fragmentKeyNuevo)) {
fragment = fragmentHashMap.get(fragmentKeyNuevo);
} else {
add = true;
fragment = new QuizRangeSimpleFragment(this);
}
break;
case Constants.IDX_QUIZ_FRAGMENT_QUESTION_SIMPLE :
if(fragmentHashMap.containsKey(fragmentKeyNuevo)) {
fragment = fragmentHashMap.get(fragmentKeyNuevo);
} else {
add = true;
fragment = new QuizSingleAnswerFragment(this);
}
break;
case Constants.IDX_QUIZ_FRAGMENT_QUESTION_MULTIPLE :
if(fragmentHashMap.containsKey(fragmentKeyNuevo)) {
fragment = fragmentHashMap.get(fragmentKeyNuevo);
} else {
add = true;
fragment = new QuizMultipleAnswerFragment(this);
}
break;
case Constants.IDX_QUIZ_FRAGMENT_PASS :
if(fragmentHashMap.containsKey(fragmentKeyNuevo)) {
fragment = fragmentHashMap.get(fragmentKeyNuevo);
} else {
add = true;
fragment = new QuizPassFragment(this);
}
break;
case Constants.IDX_QUIZ_FRAGMENT_FAIL :
if(fragmentHashMap.containsKey(fragmentKeyNuevo)) {
fragment = fragmentHashMap.get(fragmentKeyNuevo);
} else {
add = true;
fragment = new QuizFailFragment(this);
}
break;
default :
if(fragmentHashMap.containsKey(fragmentKeyNuevo)) {
fragment = fragmentHashMap.get(fragmentKeyNuevo);
} else {
add = true;
fragment = new QuizIntroFragment();
}
break;
}
if(add) {
fragmentHashMap.put(fragmentKeyNuevo, fragment);
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.activity_quiz_fragment_container, fragment, fragmentKeyNuevo);
fragmentTransaction.commit();
}
if(fragment != null) {
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.show(fragment);
fragmentTransaction.commit();
}
}
}