
Kodlar:
package com.serdal.quiz;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.speech.tts.TextToSpeech;
import android.text.TextUtils;
import android.text.method.ScrollingMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.QuerySnapshot;
import com.serdal.quiz.dialogs.ChallengeResultDialog;
import com.serdal.quiz.dialogs.QuizImageAndExpDialog;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
public class ChallengeQuizFragment extends Fragment implements View.OnClickListener, TextToSpeech.OnInitListener {
//Declare
private NavController navController;
private FirebaseFirestore firebaseFirestore;
private Animation fadeInAnim;
private int totalPoint, previousPoint;
private CountDownTimer countDownTimer;
private String docID, winnerResult, nextAction;
private boolean jokerPlus1, goOn;
private long totalQuestionsToAnswer;
private boolean continuable = true;
private boolean canAnswer = false;
private int currentQuestion = 1;
private Long timeToAnswer;
//This code uses to change choices location instantly and randomly.
private final List<Integer> shuffledChoices = new ArrayList<>(Arrays.asList(1, 2, 3, 4));
//allQuestionsList is used to obtain all data from firebase.
private List<QuestionsModel> allQuestionsList = new ArrayList<>();
//questionsToAnswer is picked question data to solve.
private final List<QuestionsModel> questionsToAnswer = new ArrayList<>();
//UI Elements
private TextView quizTitle;
private Button optionOneBtn;
private Button optionTwoBtn;
private Button optionThreeBtn;
private Button optionFourBtn;
private Button quizJoker50Btn;
private Button quizJokerPlus1Btn;
private Button quizImageBtn;
private Button quizAudioBtn;
private TextView questionFeedback;
private TextView questionText;
private TextView pointText;
private TextView questionTime;
private ProgressBar questionProgress;
private TextView questionNumber;
private MediaPlayer mediaPlayer;
private TextToSpeech tts;
private QuizImageAndExpDialog quizImageAndExpDialog;
public static final int DATE_PICKER_FRAGMENT = 1; // adding this line
private String quizImage;
private String quizAudio;
private MediaPlayer audioPlay;
public ChallengeQuizFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
tts = new TextToSpeech(requireContext(), this);
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_challenge_quiz, container, false);
}
public void onStart() {
super.onStart();
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//For Back Button Disabling
((MainActivity) getActivity()).backAction = "Cancel";
//Required variable implementation to use navigation among fragments easily.
//To use NavController you have to create navigation in nav_graph.xml and Rebuild project one time to see it in your codes.
navController = Navigation.findNavController(view);
//Firebase get Instance
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
firebaseFirestore = FirebaseFirestore.getInstance();
//Check if user logged in.
if (firebaseAuth.getCurrentUser() == null) {
navController.navigateUp();
}
//UI Initialize
quizTitle = view.findViewById(R.id.challenge_quiz_title);
optionOneBtn = view.findViewById(R.id.challenge_quiz_option_one);
optionTwoBtn = view.findViewById(R.id.challenge_quiz_option_two);
optionThreeBtn = view.findViewById(R.id.challenge_quiz_option_three);
optionFourBtn = view.findViewById(R.id.challenge_quiz_option_four);
quizImageBtn = view.findViewById(R.id.challenge_quiz_image_btn);
questionFeedback = view.findViewById(R.id.challenge_quiz_question_feedback);
questionText = view.findViewById(R.id.challenge_quiz_question);
questionTime = view.findViewById(R.id.challenge_quiz_question_time);
pointText = view.findViewById(R.id.challenge_quiz_point_text);
questionProgress = view.findViewById(R.id.challenge_quiz_question_progress);
questionNumber = view.findViewById(R.id.challenge_quiz_question_number);
quizJoker50Btn = view.findViewById(R.id.challenge_quiz_joker_50_btn);
quizJokerPlus1Btn = view.findViewById(R.id.challenge_quiz_joker_plus1_btn);
Button quizSpeechBtn = view.findViewById(R.id.quiz_speech_btn);
quizAudioBtn = view.findViewById(R.id.quiz_play_btn);
questionText.setMovementMethod(new ScrollingMovementMethod());
fadeInAnim = AnimationUtils.loadAnimation(getContext(), R.anim.fade_in);
//Get QuizId
if (getArguments() != null) {
docID = ChallengeQuizFragmentArgs.fromBundle(getArguments()).getDocid();
totalQuestionsToAnswer = ChallengeQuizFragmentArgs.fromBundle(getArguments()).getTotalQuestionsToAnswer();
}
questionText.startAnimation(fadeInAnim);
//Get All Questions From the quiz
firebaseFirestore.collection("Challenges")
.document(docID).collection("Questions")
.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
//Add all questions to list
allQuestionsList = Objects.requireNonNull(task.getResult()).toObjects(QuestionsModel.class);
//Pick a questions from list
loadUI();
} else {
//Error getting Questions
quizTitle.setText(getString(R.string.message_loading_error));
}
}
});
//Set Button Click Listeners
optionOneBtn.setOnClickListener(this);
optionTwoBtn.setOnClickListener(this);
optionThreeBtn.setOnClickListener(this);
optionFourBtn.setOnClickListener(this);
quizJoker50Btn.setOnClickListener(this);
quizJokerPlus1Btn.setOnClickListener(this);
quizAudioBtn.setOnClickListener(this);
quizSpeechBtn.setOnClickListener(this);
quizImageBtn.setOnClickListener(this);
}
private void loadUI() {
//Quiz Data Loaded, Load the UI
questionText.setText(getString(R.string.message_loading));
pickQuestion();
//Load First Questions
loadFirstQuestion();
//Enable Options
enableOptions();
}
//app loads first question from argument to avoid more reads on fireStore.
@SuppressLint("SetTextI18n")
private void loadFirstQuestion() {
//set Question Number
questionNumber.setText("1");
//Load Question Text
if (getArguments() != null) {
questionText.setText(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getQuestion());
}
//Load Options
Collections.shuffle(shuffledChoices);
switch (shuffledChoices.get(0)) {
case 1:
optionOneBtn.setText(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getOptionA());
break;
case 2:
optionOneBtn.setText(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getOptionB());
break;
case 3:
optionOneBtn.setText(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getOptionC());
break;
case 4:
optionOneBtn.setText(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getOptionD());
break;
}
switch (shuffledChoices.get(1)) {
case 1:
optionTwoBtn.setText(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getOptionA());
break;
case 2:
optionTwoBtn.setText(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getOptionB());
break;
case 3:
optionTwoBtn.setText(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getOptionC());
break;
case 4:
optionTwoBtn.setText(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getOptionD());
break;
}
switch (shuffledChoices.get(2)) {
case 1:
optionThreeBtn.setText(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getOptionA());
break;
case 2:
optionThreeBtn.setText(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getOptionB());
break;
case 3:
optionThreeBtn.setText(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getOptionC());
break;
case 4:
optionThreeBtn.setText(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getOptionD());
break;
}
switch (shuffledChoices.get(3)) {
case 1:
optionFourBtn.setText(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getOptionA());
break;
case 2:
optionFourBtn.setText(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getOptionB());
break;
case 3:
optionFourBtn.setText(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getOptionC());
break;
case 4:
optionFourBtn.setText(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getOptionD());
break;
}
quizTitle.setText(getString(R.string.quiz_fragment_category_title) + ChallengeQuizFragmentArgs.fromBundle(getArguments()).getCategory());
//Questions Loaded, set can answer
canAnswer = true;
currentQuestion = 1;
timeToAnswer = ChallengeQuizFragmentArgs.fromBundle(getArguments()).getTimer();
}
@SuppressLint("SetTextI18n")
private void loadQuestion(int questNum) {
//set Question Number
questionNumber.setText(String.valueOf(questNum));
//Load Question Text
pointText.setText(String.valueOf(totalPoint));
questionText.setText(questionsToAnswer.get(questNum - 1).getQuestion());
//Load Options
Collections.shuffle(shuffledChoices);
switch (shuffledChoices.get(0)) {
case 1:
optionOneBtn.setText(questionsToAnswer.get(questNum - 1).getOption_a());
break;
case 2:
optionOneBtn.setText(questionsToAnswer.get(questNum - 1).getOption_b());
break;
case 3:
optionOneBtn.setText(questionsToAnswer.get(questNum - 1).getOption_c());
break;
case 4:
optionOneBtn.setText(questionsToAnswer.get(questNum - 1).getOption_d());
break;
}
switch (shuffledChoices.get(1)) {
case 1:
optionTwoBtn.setText(questionsToAnswer.get(questNum - 1).getOption_a());
break;
case 2:
optionTwoBtn.setText(questionsToAnswer.get(questNum - 1).getOption_b());
break;
case 3:
optionTwoBtn.setText(questionsToAnswer.get(questNum - 1).getOption_c());
break;
case 4:
optionTwoBtn.setText(questionsToAnswer.get(questNum - 1).getOption_d());
break;
}
switch (shuffledChoices.get(2)) {
case 1:
optionThreeBtn.setText(questionsToAnswer.get(questNum - 1).getOption_a());
break;
case 2:
optionThreeBtn.setText(questionsToAnswer.get(questNum - 1).getOption_b());
break;
case 3:
optionThreeBtn.setText(questionsToAnswer.get(questNum - 1).getOption_c());
break;
case 4:
optionThreeBtn.setText(questionsToAnswer.get(questNum - 1).getOption_d());
break;
}
switch (shuffledChoices.get(3)) {
case 1:
optionFourBtn.setText(questionsToAnswer.get(questNum - 1).getOption_a());
break;
case 2:
optionFourBtn.setText(questionsToAnswer.get(questNum - 1).getOption_b());
break;
case 3:
optionFourBtn.setText(questionsToAnswer.get(questNum - 1).getOption_c());
break;
case 4:
optionFourBtn.setText(questionsToAnswer.get(questNum - 1).getOption_d());
break;
}
quizTitle.setText(getString(R.string.quiz_fragment_category_title) + questionsToAnswer.get(questNum - 1).getCategory());
try {
if (!questionsToAnswer.get(questNum - 1).getImage().isEmpty()) {
quizImageBtn.setVisibility(View.VISIBLE);
quizImage = questionsToAnswer.get(questNum - 1).getImage();
}
} catch (Exception ignored) {
}
try {
if (!questionsToAnswer.get(questNum - 1).getAudio().isEmpty()) {
quizAudio = questionsToAnswer.get(questNum - 1).getAudio();
quizAudioBtn.setVisibility(View.VISIBLE);
}
} catch (Exception ignored) {
}
//Questions Loaded, set can answer
canAnswer = true;
currentQuestion = questNum;
//Start Question Timer
timeToAnswer = questionsToAnswer.get(questNum - 1).getTimer();
}
//Check if the internet connection has or not.
public boolean isConnectedToInternet() {
ConnectivityManager cm = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm != null) {
NetworkInfo netInfo = cm.getActiveNetworkInfo();
return netInfo != null && netInfo.isConnectedOrConnecting();
} else return false;
}
private void startTimer() {
//Start countdown
countDownTimer = new CountDownTimer(timeToAnswer * 1000, 10) {
@Override
public void onTick(long millisUntilFinished) {
//Update Time
questionTime.setText(String.valueOf(millisUntilFinished / 1000));
//Progress in percent
long percent = millisUntilFinished / (timeToAnswer * 10);
questionProgress.setProgress((int) percent);
}
@Override
public void onFinish() {
//Time Up, Cannot answer questions anymore
canAnswer = false;
try {
//Dismiss Image panel
quizImageAndExpDialog.dismiss();
} catch (Exception e) {
e.getStackTrace();
}
//Play Sound
if (MainFragment.isSoundAllowed) {
mediaPlayer = MediaPlayer.create(getContext(), R.raw.wrong);
mediaPlayer.start();
}
goOn = false;
if (getArguments() != null) {
if (ChallengeQuizFragmentArgs.fromBundle(getArguments()).getIshost()) {
updateChallengeSession("hostGoOn", false);
} else {
updateChallengeSession("clientGoOn", false);
}
}
//Alter resultsViews according to finish action
questionFeedback.setText(getString(R.string.quiz_fragment_time_up_message));
questionFeedback.setTextColor(getResources().getColor(R.color.colorRed, null));
continuable = false;
sendResults();
}
};
countDownTimer.start();
}
private void enableOptions() {
startTimer();
//Enable All Buttons
optionOneBtn.setEnabled(true);
optionTwoBtn.setEnabled(true);
optionThreeBtn.setEnabled(true);
optionFourBtn.setEnabled(true);
//Reset Timer UI
questionProgress.setProgress(100);
//Set Timer Text
questionTime.setText(String.valueOf(timeToAnswer));
//Hide image Button Button
quizImageBtn.setVisibility(View.INVISIBLE);
quizAudioBtn.setVisibility(View.INVISIBLE);
//Hide Options
optionOneBtn.startAnimation(fadeInAnim);
optionFourBtn.startAnimation(fadeInAnim);
optionThreeBtn.startAnimation(fadeInAnim);
optionTwoBtn.startAnimation(fadeInAnim);
//Hide Feedback and next Button
questionFeedback.setVisibility(View.INVISIBLE);
jokerPlus1 = false;
}
private void pickQuestion() {
int totalQuestionsNumber = allQuestionsList.size();
//pull number of questions mentioned in firebase. variable is totalQuestionsToAnswer
for (int i = 0; i < totalQuestionsToAnswer; i++) {
int randomNumber = getRandomInteger(totalQuestionsNumber, 0);
if (allQuestionsList.get(randomNumber).getDifficulty() == i + 1) {
questionsToAnswer.add(allQuestionsList.get(randomNumber));
} else {
i--;
}
}
}
//Random method
public static int getRandomInteger(int maximum, int minimum) {
return ((int) (Math.random() * (maximum - minimum))) + minimum;
}
@SuppressLint({"UseCompatLoadingForDrawables", "NonConstantResourceId"})
@Override
public void onClick(View v) {
//determine which button or option was selected and do actions.
switch (v.getId()) {
case R.id.challenge_quiz_option_one:
if (jokerPlus1 && !questionsToAnswer.get(currentQuestion - 1).getAnswer().contentEquals(optionOneBtn.getText())) {
optionOneBtn.setEnabled(false);
optionOneBtn.setBackground(getResources().getDrawable(R.drawable.option_wrong_btn_bg, null));
jokerPlus1 = false;
} else verifyAnswer(optionOneBtn);
break;
case R.id.challenge_quiz_option_two:
if (jokerPlus1 && !questionsToAnswer.get(currentQuestion - 1).getAnswer().contentEquals(optionTwoBtn.getText())) {
optionTwoBtn.setEnabled(false);
optionTwoBtn.setBackground(getResources().getDrawable(R.drawable.option_wrong_btn_bg, null));
jokerPlus1 = false;
} else verifyAnswer(optionTwoBtn);
break;
case R.id.challenge_quiz_option_three:
if (jokerPlus1 && !questionsToAnswer.get(currentQuestion - 1).getAnswer().contentEquals(optionThreeBtn.getText())) {
optionThreeBtn.setEnabled(false);
optionThreeBtn.setBackground(getResources().getDrawable(R.drawable.option_wrong_btn_bg, null));
jokerPlus1 = false;
} else verifyAnswer(optionThreeBtn);
break;
case R.id.challenge_quiz_option_four:
if (jokerPlus1 && !questionsToAnswer.get(currentQuestion - 1).getAnswer().contentEquals(optionFourBtn.getText())) {
optionFourBtn.setEnabled(false);
optionFourBtn.setBackground(getResources().getDrawable(R.drawable.option_wrong_btn_bg, null));
jokerPlus1 = false;
} else verifyAnswer(optionFourBtn);
break;
case R.id.challenge_quiz_joker_50_btn:
joker50();
break;
case R.id.challenge_quiz_joker_plus1_btn:
jokerPlus1();
break;
case R.id.challenge_quiz_image_btn:
Bundle args = new Bundle();
args.putString("type", "Image");
args.putString("image", quizImage);
quizImageAndExpDialog = new QuizImageAndExpDialog();
quizImageAndExpDialog.setArguments(args);
quizImageAndExpDialog.setCancelable(true);
quizImageAndExpDialog.show(getParentFragmentManager().beginTransaction(), "");
break;
case R.id.quiz_play_btn:
audioPlay = new MediaPlayer();
audioPlay.setAudioStreamType(AudioManager.STREAM_MUSIC);
ToastMaker(getString(R.string.quiz_fragment_audio_loading_text));
quizAudioBtn.setEnabled(false);
try {
audioPlay.setDataSource(getContext(), Uri.parse(quizAudio));
audioPlay.prepareAsync();
audioPlay.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
audioPlay.start();
}
});
} catch (IOException e) {
e.printStackTrace();
ToastMaker(e.getMessage());
}
break;
case R.id.quiz_speech_btn:
tts.speak(questionText.getText().toString(), TextToSpeech.QUEUE_FLUSH, null, null);
break;
}
}
private void jokerPlus1() {
//jokerPlus1 gives one more right to chose option.
if (canAnswer) {
quizJokerPlus1Btn.setAlpha((float) 0.5);
quizJokerPlus1Btn.setEnabled(false);
jokerPlus1 = true;
questionFeedback.setText(getString(R.string.quiz_fragment_joker_plus_1_message));
questionFeedback.setVisibility(View.VISIBLE);
}
}
private void joker50() {
//joker50 gives 50% percent of chance
if (canAnswer) {
quizJoker50Btn.setEnabled(false);
quizJoker50Btn.setAlpha((float) 0.5);
if (questionsToAnswer.get(currentQuestion - 1).getAnswer().contentEquals(optionOneBtn.getText())) {
optionFourBtn.setEnabled(false);
optionTwoBtn.setEnabled(false);
}
if (questionsToAnswer.get(currentQuestion - 1).getAnswer().contentEquals(optionTwoBtn.getText())) {
optionThreeBtn.setEnabled(false);
optionFourBtn.setEnabled(false);
}
if (questionsToAnswer.get(currentQuestion - 1).getAnswer().contentEquals(optionThreeBtn.getText())) {
optionTwoBtn.setEnabled(false);
optionOneBtn.setEnabled(false);
}
if (questionsToAnswer.get(currentQuestion - 1).getAnswer().contentEquals(optionFourBtn.getText())) {
optionOneBtn.setEnabled(false);
optionThreeBtn.setEnabled(false);
}
}
}
private void submitResults() {
//pass question points via nac_graph arguments. navigate to next fragment which is result Fragment.
ChallengeQuizFragmentDirections.ActionChallengeQuizFragmentToChallengeResultFragment action = ChallengeQuizFragmentDirections.actionChallengeQuizFragmentToChallengeResultFragment();
action.setDocID(docID);
action.setIsHost(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getIshost());
action.setClientname(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getClientusername());
action.setClientimage(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getClientimage());
if (isConnectedToInternet()) action.setHostpoint(totalPoint);
else action.setHostpoint(previousPoint);
action.setResulttext(winnerResult);
action.setName(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getName());
action.setImage(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getImage());
action.setPoint(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getPoint());
action.setClientID(ChallengeQuizFragmentArgs.fromBundle(getArguments()).getClientID());
navController.navigate(action);
}
@SuppressLint("UseCompatLoadingForDrawables")
private void resetOptionsUI() {
//Change background drawable and text color to initial condition.
optionOneBtn.setBackground(getResources().getDrawable(R.drawable.option_btn_bg, null));
optionTwoBtn.setBackground(getResources().getDrawable(R.drawable.option_btn_bg, null));
optionThreeBtn.setBackground(getResources().getDrawable(R.drawable.option_btn_bg, null));
optionFourBtn.setBackground(getResources().getDrawable(R.drawable.option_btn_bg, null));
optionOneBtn.setTextColor(getResources().getColor(R.color.colorDarkerText, null));
optionTwoBtn.setTextColor(getResources().getColor(R.color.colorDarkerText, null));
optionThreeBtn.setTextColor(getResources().getColor(R.color.colorDarkerText, null));
optionFourBtn.setTextColor(getResources().getColor(R.color.colorDarkerText, null));
questionFeedback.setVisibility(View.INVISIBLE);
}
@SuppressLint({"UseCompatLoadingForDrawables", "SetTextI18n"})
private void verifyAnswer(Button selectedAnswerBtn) {
//Check Answer
if (canAnswer) {
//Set Answer Btn Text Color to Black
if (questionsToAnswer.get(currentQuestion - 1).getAnswer().contentEquals(selectedAnswerBtn.getText())) {
//Correct Answer
previousPoint = totalPoint;
totalPoint = (Integer.parseInt(questionTime.getText().toString()) * currentQuestion * currentQuestion) + totalPoint;
selectedAnswerBtn.setBackground(getResources().getDrawable(R.drawable.option_correct_btn_bg, null));
//Play Sound
if (MainFragment.isSoundAllowed) {
mediaPlayer = MediaPlayer.create(getContext(), R.raw.correct);
mediaPlayer.start();
}
//Set feedback text
questionFeedback.setText(getString(R.string.quiz_fragment_right_answer_message));
questionFeedback.setTextColor(getResources().getColor(R.color.colorGreen, null));
goOn = true;
//Update current users challenge data.
if (getArguments() != null) {
if (ChallengeQuizFragmentArgs.fromBundle(getArguments()).getIshost()) {
updateChallengeSession("hostGoOn", true);
updateChallengeSession("hostCurrent", currentQuestion);
updateChallengeSession("hostPoint", totalPoint);
} else {
updateChallengeSession("clientGoOn", true);
updateChallengeSession("clientCurrent", currentQuestion);
updateChallengeSession("clientPoint", totalPoint);
}
}
} else {
//Wrong Answer
selectedAnswerBtn.setBackground(getResources().getDrawable(R.drawable.option_wrong_btn_bg, null));
//Play Sound
if (MainFragment.isSoundAllowed) {
mediaPlayer = MediaPlayer.create(getContext(), R.raw.wrong);
mediaPlayer.start();
}
//Set feedback text
questionFeedback.setText(getString(R.string.quiz_fragment_wrong_answer_message));
questionFeedback.setTextColor(getResources().getColor(R.color.colorRed, null));
continuable = false;
goOn = false;
//Update current users challenge data.
if (getArguments() != null) {
if (ChallengeQuizFragmentArgs.fromBundle(getArguments()).getIshost()) {
updateChallengeSession("hostGoOn", false);
} else {
updateChallengeSession("clientGoOn", false);
}
}
}
//Set Can answer to false
canAnswer = false;
//Stop timer
countDownTimer.cancel();
//Show Next Button
sendResults();
}
}
//Update current users challenge data to fireStore.
private void updateChallengeSession(String fieldID, Object value) {
firebaseFirestore.collection("Challenges").document(docID)
.update(fieldID, value);
}
private void sendResults() {
questionFeedback.setVisibility(View.VISIBLE);
//Put current data to argument to navigate it.
Bundle args = new Bundle();
if (getArguments() != null) {
args.putString("clientName", ChallengeQuizFragmentArgs.fromBundle(getArguments()).getClientusername());
args.putString("clientImage", ChallengeQuizFragmentArgs.fromBundle(getArguments()).getClientimage());
args.putInt("remainingTime", Integer.parseInt(questionTime.getText().toString()));
args.putString("docID", ChallengeQuizFragmentArgs.fromBundle(getArguments()).getDocid());
args.putInt("currentQuestion", currentQuestion);
args.putBoolean("isHost", ChallengeQuizFragmentArgs.fromBundle(getArguments()).getIshost());
args.putBoolean("goOn", goOn);
args.putLong("totalQuestionToAnswer", totalQuestionsToAnswer);
ChallengeResultDialog challengeResultDialog = new ChallengeResultDialog();
challengeResultDialog.setArguments(args);
challengeResultDialog.setCancelable(false);
challengeResultDialog.setTargetFragment(this, DATE_PICKER_FRAGMENT);
challengeResultDialog.show(getParentFragmentManager().beginTransaction(), "");
}
if (currentQuestion >= totalQuestionsToAnswer) {
if (continuable) currentQuestion++;
continuable = false;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == DATE_PICKER_FRAGMENT) {//check whether result is exist or not.
if (resultCode == Activity.RESULT_OK) {
// here the part where I get my selected date from the saved variable in the intent and the displaying it.
Bundle bundle = data.getExtras();
if (bundle != null) {
nextAction = bundle.getString("nextAction");
winnerResult = bundle.getString("winnerResult");
}
//Catch bundles data coming from dialog and verify it.
if (TextUtils.equals(nextAction, "next")) {
if (continuable) {
currentQuestion++;
resetOptionsUI();
enableOptions();
loadQuestion(currentQuestion);
}
} else submitResults();
}
}
}
//Toast is the message that we use to give info or warning.
//I use this code block to made it easy use and modify.
public void ToastMaker(String message) {
try {
Toast toast = Toast.makeText(getContext(), message, Toast.LENGTH_SHORT);
/*
View view = toast.getView();
toast.setGravity(Gravity.CENTER, 0, 300);
view.getBackground().setColorFilter(getResources().getColor(R.color.colorRed, null), PorterDuff.Mode.SRC_IN);
TextView text = view.findViewById(android.R.id.message);
text.setTextColor(getResources().getColor(R.color.colorOverBackground, null));
text.setGravity(Gravity.CENTER);
Typeface font = ResourcesCompat.getFont(getContext(), R.font.karu_light);
text.setTypeface(font);
*/
toast.show();
} catch (Exception e) {
e.getStackTrace();
}
}
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
int result = tts.setLanguage(Locale.US);
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
Toast.makeText(requireContext().getApplicationContext(), "Language not supported", Toast.LENGTH_SHORT).show();
} else {
//Disable the button if any.
}
} else {
Toast.makeText(requireContext().getApplicationContext(), "Init failed", Toast.LENGTH_SHORT).show();
}
}
}