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;@Overrideprotected 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic void onClick(View view) {finishQuiz();}});invokeFragment(Constants.IDX_QUIZ_FRAGMENT_INTRO);}@Overridepublic int getTotalPoints() {return totalPoints;}@Overridepublic void exitQuizFail(){Intent intent = new Intent();intent.putExtra("completed", false);intent.putExtra("requestCode", Constants.REQUEST_CODE_QUIZ);setResult(RESULT_CANCELED, intent);finish();}@Overridepublic 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()) {//PassinvokeFragment(Constants.IDX_QUIZ_FRAGMENT_PASS);} else {//FailinvokeFragment(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);}}@Overridepublic void onBackPressed() {return;/*Intent intent = new Intent();setResult(RESULT_CANCELED, intent);finish();*/}@Overrideprotected void onDestroy() {super.onDestroy();}@Overridepublic Quiz getQuiz(){return quiz;}@Overridepublic ArrayList<Question> getQuestions(){return questions;}@Overridepublic ArrayList<Answer> getAnswers(String questionUuid){if(answers.containsKey(questionUuid)) {return answers.get(questionUuid);} else {return null;}}@Overridepublic ArrayList<QuizResponse> getQuizResponses(){return quizResponses;}@Overridepublic 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();}}}