Proyectos de Subversion Android Microlearning

Rev

Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
package com.cesams.twogetskills.activity;
2
 
3
import android.content.Intent;
4
import android.os.Bundle;
5
 
6
import com.cesams.twogetskills.Constants;
7
import com.cesams.twogetskills.dao.AnswerDao;
8
import com.cesams.twogetskills.dao.QuestionDao;
9
import com.cesams.twogetskills.dao.QuizDao;
10
import com.cesams.twogetskills.fragment.QuizFailFragment;
11
import com.cesams.twogetskills.fragment.QuizIntroFragment;
12
import com.cesams.twogetskills.fragment.QuizMultipleAnswerFragment;
13
import com.cesams.twogetskills.fragment.QuizPassFragment;
14
import com.cesams.twogetskills.fragment.QuizRangeSimpleFragment;
15
import com.cesams.twogetskills.fragment.QuizSingleAnswerFragment;
16
import com.cesams.twogetskills.entity.Answer;
17
import com.cesams.twogetskills.entity.Question;
18
import com.cesams.twogetskills.entity.Quiz;
19
import com.cesams.twogetskills.pojo.QuizResponse;
20
import com.cesams.twogetskills.skeleton.IQuizActivity;
21
 
22
import androidx.appcompat.app.AppCompatActivity;
23
import androidx.fragment.app.Fragment;
24
import androidx.fragment.app.FragmentTransaction;
25
 
26
import android.os.CountDownTimer;
27
import android.view.View;
28
import android.widget.Button;
29
import android.widget.TextView;
30
 
31
import com.cesams.twogetskills.R;
32
 
33
import java.text.SimpleDateFormat;
34
import java.util.ArrayList;
35
import java.util.Calendar;
36
import java.util.Date;
37
import java.util.HashMap;
38
 
39
public class QuizActivity extends AppCompatActivity implements IQuizActivity {
40
    private final static String TAG = "C2GS - QuizActivity";
41
    private final static String PREFIX_FRAG = "FRAG";
42
    private Quiz quiz;
43
    private String quizUuid;
44
    private ArrayList<Question> questions;
45
    private HashMap<String, ArrayList<Answer>> answers;
46
    private ArrayList<QuizResponse> quizResponses;
47
    private TextView textViewScore;
48
    private TextView textViewQuestion;
49
    private TextView textChronometer;
50
    private HashMap<String, Fragment> fragmentHashMap;
51
    private Button btnPrevious;
52
    private Button btnNext;
53
    private Button btnStart;
54
    private Button btnFinish;
55
    private Button btnExit;
56
    private int questionIdxActive;
57
    private int fragmentIdxActive;
58
    private int totalPoints;
59
    private CountDownTimer countDownTimer;
60
 
61
    @Override
62
    protected void onCreate(Bundle savedInstanceState) {
63
        super.onCreate(savedInstanceState);
64
        setContentView(R.layout.activity_quiz);
65
 
66
        questionIdxActive = 0;
67
        fragmentIdxActive = 0;
68
        questions = new ArrayList<>();
69
        answers = new HashMap<>();
70
        quizResponses = new ArrayList<>();
71
        fragmentHashMap = new HashMap<>();
72
 
73
        //companyUuid = getIntent().getStringExtra("companyUuid");
74
        //topicUuid = getIntent().getStringExtra("topicUuid");
75
        //capsuleUuid = getIntent().getStringExtra("capsuleUuid");
76
       // slideUuid = getIntent().getStringExtra("slideUuid");
77
        quizUuid = getIntent().getStringExtra("quizUuid");
78
        //userUuid = getIntent().getStringExtra("userUuid");
79
 
80
        quiz = new Quiz();
81
        quiz.setCompanyUuid(getIntent().getStringExtra("quiz_company_uuid"));
82
        quiz.setUuid(getIntent().getStringExtra("quiz_uuid"));
83
        quiz.setName(getIntent().getStringExtra("quiz_name"));
84
        quiz.setText(getIntent().getStringExtra("quiz_text"));
85
        quiz.setFailed(getIntent().getStringExtra("quiz_failed"));
86
        quiz.setPoints(getIntent().getIntExtra("quiz_points", 0));
87
        quiz.setMinimumPointsRequired(getIntent().getIntExtra("quiz_minimum_points_required", 0));
88
        quiz.setMaxTime(getIntent().getIntExtra("quiz_max_time", 0));
89
 
90
 
91
 
92
        int maxAnswer = 0;
93
        int maxQuestion = getIntent().getIntExtra("questions", 0);
94
        Question question;
95
        Answer answer;
96
        ArrayList<Answer> questionAnswers;
97
        for(int i = 1; i <= maxQuestion; i++){
98
            question = new Question();
99
            question.setQuizUuid(quizUuid);
100
            question.setUuid(getIntent().getStringExtra("question" + i + "_uuid"));
101
            question.setText(getIntent().getStringExtra("question" + i + "_text"));
102
            question.setPoints(getIntent().getIntExtra("question" + i + "_points", 0));
103
            question.setMaxlength(getIntent().getIntExtra("question" + i + "_max_length", 0));
104
            question.setType(getIntent().getStringExtra("question" + i + "_type"));
105
 
106
            questions.add(question);
107
 
108
            maxAnswer = getIntent().getIntExtra("question" + i + "_answers", 0);
109
 
110
 
111
            questionAnswers = new ArrayList<>();
112
            for(int j = 1; j <= maxAnswer; j++ ) {
113
                answer = new Answer();
114
                answer.setQuestionUuid(question.getUuid());
115
                answer.setUuid(getIntent().getStringExtra("question" + i + "_answer_uuid" + j));
116
                answer.setText(getIntent().getStringExtra("question" + i + "_answer_text" + j));
117
                answer.setPoints(getIntent().getIntExtra("question" + i + "_answer_points" + j, 0));
118
                answer.setCorrect(getIntent().getStringExtra("question" + i + "_answer_correct" + j));
119
 
120
                questionAnswers.add(answer);
121
            }
122
 
123
 
124
            answers.put(question.getUuid(), questionAnswers);
125
        }
126
 
127
 
128
        textViewScore = (TextView) findViewById(R.id.activity_quiz_textview_score);
129
        textViewScore.setText("0");
130
 
131
        textViewQuestion = (TextView) findViewById(R.id.activity_quiz_textview_question_count);
132
        textViewQuestion.setText(String.valueOf(questions.size()));
133
 
134
        textChronometer = (TextView) findViewById(R.id.activity_quiz_textview_chronometer);
135
        textChronometer.setText("00:00");
136
 
137
        btnPrevious = (Button) findViewById(R.id.activity_quiz_button_previous);
138
        btnPrevious.setVisibility(View.INVISIBLE);
139
        btnPrevious.setOnClickListener(new View.OnClickListener() {
140
            @Override
141
            public void onClick(View view) {
142
                if (questionIdxActive > 0) {
143
                    questionIdxActive--;
144
                }
145
                showQuestions();
146
            }
147
        });
148
 
149
        btnNext = (Button) findViewById(R.id.activity_quiz_button_next);
150
        btnNext.setVisibility(View.INVISIBLE);
151
        btnNext.setOnClickListener(new View.OnClickListener() {
152
            @Override
153
            public void onClick(View view) {
154
                if (questionIdxActive < (questions.size() - 1)) {
155
                    questionIdxActive++;
156
                    showQuestions();
157
                }
158
            }
159
        });
160
 
161
        btnExit = (Button) findViewById(R.id.activity_quiz_button_exit);
162
        btnExit.setVisibility(View.INVISIBLE);
163
        btnExit.setOnClickListener(new View.OnClickListener() {
164
            @Override
165
            public void onClick(View view) {
166
               if(totalPoints >= quiz.getMinimumPointsRequired()) {
167
                   exitQuizPass();
168
               } else {
169
                   exitQuizFail();
170
               }
171
            }
172
        });
173
 
174
        btnStart = (Button) findViewById(R.id.activity_quiz_button_start);
175
        btnStart.setVisibility(View.VISIBLE);
176
        btnStart.setOnClickListener(new View.OnClickListener() {
177
            @Override
178
            public void onClick(View view) {
179
                Calendar calendar = Calendar.getInstance();
180
                Date date = calendar.getTime();
181
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat(Constants.FORMAT_DATETIME_SERVICE);
182
                String dateOn = simpleDateFormat.format(date);
183
 
184
                long millisInFuture = quiz.getMaxTime() * 60000;
185
 
186
                countDownTimer = new CountDownTimer(millisInFuture, 1000) {
187
 
188
                    public void onTick(long millisUntilFinished) {
189
                        long minutes = millisUntilFinished / 60000;
190
                        long seconds = (millisUntilFinished - (minutes * 60000)) / 1000;
191
 
192
                        String sMinutes = minutes < 10 ? "0" + minutes : String.valueOf(minutes);
193
                        String sSeconds = seconds < 10 ? "0" + seconds : String.valueOf(seconds);
194
 
195
                        textChronometer.setText(sMinutes + ":" + sSeconds);
196
 
197
                    }
198
 
199
                    public void onFinish() {
200
                        textChronometer.setText("--:--");
201
                        finishQuiz();
202
                    }
203
                }.start();
204
 
205
                btnStart.setVisibility(View.INVISIBLE);
206
 
207
                if (questions.size() == 1) {
208
                    btnFinish.setVisibility(View.VISIBLE);
209
                } else {
210
                    btnNext.setVisibility(View.VISIBLE);
211
                }
212
 
213
                showQuestions();
214
            }
215
 
216
        });
217
 
218
        btnFinish = (Button) findViewById(R.id.activity_quiz_button_finish);
219
        btnFinish.setVisibility(View.INVISIBLE);
220
        btnFinish.setOnClickListener(new View.OnClickListener() {
221
            @Override
222
            public void onClick(View view) {
223
                finishQuiz();
224
 
225
            }
226
        });
227
 
228
        invokeFragment(Constants.IDX_QUIZ_FRAGMENT_INTRO);
229
 
230
 
231
    }
232
 
233
    @Override
234
    public int getTotalPoints() {
235
        return totalPoints;
236
    }
237
 
238
 
239
 
240
    @Override
241
    public void exitQuizFail()
242
    {
243
        Intent intent = new Intent();
244
        intent.putExtra("completed", false);
245
        intent.putExtra("requestCode", Constants.REQUEST_CODE_QUIZ);
246
        setResult(RESULT_CANCELED, intent);
247
        finish();
248
    }
249
 
250
    @Override
251
    public void exitQuizPass()
252
    {
253
        Intent intent = new Intent();
254
        intent.putExtra("completed", true);
255
        intent.putExtra("requestCode", Constants.REQUEST_CODE_QUIZ);
256
        setResult(RESULT_OK, intent);
257
        finish();
258
    }
259
 
260
    public void finishQuiz()
261
    {
262
        if(countDownTimer != null) {
263
            countDownTimer.cancel();
264
        }
265
        textChronometer.setText("--:--");
266
 
267
        totalPoints = 0;
268
        for(int i = 0; i < quizResponses.size(); i++)
269
        {
270
            totalPoints += quizResponses.get(i).getPoints();
271
        }
272
 
273
        textViewScore.setText(totalPoints + " / " + quiz.getPoints());
274
 
275
        btnFinish.setVisibility(View.INVISIBLE);
276
        btnExit.setVisibility(View.VISIBLE);
277
        if(totalPoints >= quiz.getMinimumPointsRequired()) {
278
            //Pass
279
 
280
            invokeFragment(Constants.IDX_QUIZ_FRAGMENT_PASS);
281
        } else {
282
            //Fail
283
            invokeFragment(Constants.IDX_QUIZ_FRAGMENT_FAIL);
284
        }
285
    }
286
 
287
    public void showQuestions()
288
    {
289
        btnStart.setVisibility(View.INVISIBLE);
290
        btnFinish.setVisibility(View.INVISIBLE);
291
        btnNext.setVisibility(View.INVISIBLE);
292
        btnPrevious.setVisibility(View.INVISIBLE);
293
 
294
        if(questionIdxActive == 0) {
295
 
296
            if(questions.size() > 1) {
297
                btnNext.setVisibility(View.VISIBLE);
298
            } else {
299
                btnFinish.setVisibility(View.VISIBLE);
300
            }
301
        } else {
302
            if(questionIdxActive == (questions.size() - 1)) {
303
                btnFinish.setVisibility(View.VISIBLE);
304
            } else {
305
                btnNext.setVisibility(View.VISIBLE);
306
            }
307
        }
308
 
309
        int score = 0;
310
        for(int i = 0; i < quizResponses.size(); i++)
311
        {
312
            score += quizResponses.get(i).getPoints();
313
        }
314
 
315
        textViewQuestion.setText((1 + questionIdxActive) + " / " + questions.size()  );
316
        textViewScore.setText(String.valueOf(score));
317
 
318
 
319
        Question question = questions.get(questionIdxActive);
320
        if(question.getType().equals(Constants.QUESTION_TYPE_RANGE_1_10)) {
321
            invokeFragment(Constants.IDX_QUIZ_FRAGMENT_QUESTION_RANGE_SIMPLE);
322
        } else if(question.getType().equals(Constants.QUESTION_TYPE_RANGE_1_6)) {
323
            invokeFragment(Constants.IDX_QUIZ_FRAGMENT_QUESTION_RANGE_SIMPLE);
324
        } else if(question.getType().equals(Constants.QUESTION_TYPE_RANGE_1_5)) {
325
            invokeFragment(Constants.IDX_QUIZ_FRAGMENT_QUESTION_RANGE_SIMPLE);
326
        } else if(question.getType().equals(Constants.QUESTION_TYPE_SINGLE_SELECTION)) {
327
            invokeFragment(Constants.IDX_QUIZ_FRAGMENT_QUESTION_SIMPLE);
328
        } else if(question.getType().equals(Constants.QUESTION_TYPE_MULTIPLE_SELECTION)) {
329
            invokeFragment(Constants.IDX_QUIZ_FRAGMENT_QUESTION_MULTIPLE);
330
        }
331
 
332
    }
333
 
334
 
335
    @Override
336
    public void onBackPressed() {
337
 
338
        return;
339
          /*
340
        Intent intent = new Intent();
341
        setResult(RESULT_CANCELED, intent);
342
        finish();*/
343
    }
344
 
345
    @Override
346
    protected void onDestroy() {
347
        super.onDestroy();
348
 
349
 
350
    }
351
 
352
 
353
    @Override
354
    public Quiz getQuiz()
355
    {
356
        return quiz;
357
    }
358
 
359
    @Override
360
    public ArrayList<Question> getQuestions()
361
    {
362
        return questions;
363
    }
364
 
365
    @Override
366
    public ArrayList<Answer> getAnswers(String questionUuid)
367
    {
368
        if(answers.containsKey(questionUuid)) {
369
            return answers.get(questionUuid);
370
        } else {
371
            return null;
372
        }
373
 
374
 
375
    }
376
 
377
    @Override
378
    public ArrayList<QuizResponse> getQuizResponses()
379
    {
380
        return quizResponses;
381
    }
382
 
383
    @Override
384
    public Question getQuestionActive()
385
    {
386
        return questions.get(questionIdxActive);
387
    }
388
 
389
 
390
    public void invokeFragment(int fragmentIdxActiveNuevo)
391
    {
392
        String fragmentKeyActual 	= PREFIX_FRAG + fragmentIdxActive;
393
        String fragmentKeyNuevo 	= PREFIX_FRAG + fragmentIdxActiveNuevo;
394
        fragmentIdxActive = fragmentIdxActiveNuevo;
395
 
396
        Fragment fragment;
397
       // if(!fragmentKeyActual.equalsIgnoreCase(fragmentKeyNuevo)) {
398
            if(fragmentHashMap.containsKey(fragmentKeyActual)) {
399
                fragment = fragmentHashMap.get(fragmentKeyActual);
400
                if(fragment != null) {
401
                    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
402
                    fragmentTransaction.hide(fragment);
403
                    fragmentTransaction.commit();
404
                }
405
            }
406
        //}
407
 
408
        boolean add = false;
409
        fragment = null;
410
 
411
 
412
        switch(fragmentIdxActiveNuevo) {
413
 
414
            case Constants.IDX_QUIZ_FRAGMENT_QUESTION_RANGE_SIMPLE :
415
                if(fragmentHashMap.containsKey(fragmentKeyNuevo)) {
416
                    fragment = fragmentHashMap.get(fragmentKeyNuevo);
417
                } else {
418
                    add = true;
419
                    fragment = new QuizRangeSimpleFragment(this);
420
                }
421
                break;
422
 
423
            case Constants.IDX_QUIZ_FRAGMENT_QUESTION_SIMPLE :
424
                if(fragmentHashMap.containsKey(fragmentKeyNuevo)) {
425
                    fragment = fragmentHashMap.get(fragmentKeyNuevo);
426
                } else {
427
                    add = true;
428
                    fragment = new QuizSingleAnswerFragment(this);
429
                }
430
                break;
431
 
432
            case Constants.IDX_QUIZ_FRAGMENT_QUESTION_MULTIPLE :
433
                if(fragmentHashMap.containsKey(fragmentKeyNuevo)) {
434
                    fragment = fragmentHashMap.get(fragmentKeyNuevo);
435
                } else {
436
                    add = true;
437
                    fragment = new QuizMultipleAnswerFragment(this);
438
                }
439
                break;
440
 
441
            case Constants.IDX_QUIZ_FRAGMENT_PASS :
442
                if(fragmentHashMap.containsKey(fragmentKeyNuevo)) {
443
                    fragment = fragmentHashMap.get(fragmentKeyNuevo);
444
                } else {
445
                    add = true;
446
                    fragment = new QuizPassFragment(this);
447
                }
448
                break;
449
 
450
            case Constants.IDX_QUIZ_FRAGMENT_FAIL :
451
                if(fragmentHashMap.containsKey(fragmentKeyNuevo)) {
452
                    fragment = fragmentHashMap.get(fragmentKeyNuevo);
453
                } else {
454
                    add = true;
455
                    fragment = new QuizFailFragment(this);
456
                }
457
                break;
458
 
459
            default :
460
                if(fragmentHashMap.containsKey(fragmentKeyNuevo)) {
461
                    fragment = fragmentHashMap.get(fragmentKeyNuevo);
462
                } else {
463
                    add = true;
464
                    fragment = new QuizIntroFragment();
465
                }
466
                break;
467
 
468
 
469
        }
470
 
471
        if(add) {
472
            fragmentHashMap.put(fragmentKeyNuevo, fragment);
473
 
474
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
475
            fragmentTransaction.add(R.id.activity_quiz_fragment_container, fragment, fragmentKeyNuevo);
476
            fragmentTransaction.commit();
477
        }
478
 
479
 
480
        if(fragment != null) {
481
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
482
            fragmentTransaction.show(fragment);
483
            fragmentTransaction.commit();
484
        }
485
 
486
    }
487
 
488
 
489
}