package com.nith.appteam.hillffair17.Activities; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.util.Pair; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import com.nith.appteam.hillffair17.Fragments.QuizFragment; import com.nith.appteam.hillffair17.Models.QuizQuestionsModel; import com.nith.appteam.hillffair17.Models.SingleQuestionModel; import com.nith.appteam.hillffair17.R; import com.nith.appteam.hillffair17.Utils.APIINTERFACE; import com.nith.appteam.hillffair17.Utils.Connection; import com.nith.appteam.hillffair17.Utils.ScoreCalculator; import com.nith.appteam.hillffair17.Utils.SharedPref; import com.nith.appteam.hillffair17.Utils.UpdateScoreModel; import com.nith.appteam.hillffair17.Utils.Utils; import java.util.List; import java.util.StringTokenizer; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; public class QuizQuestionActivity extends AppCompatActivity { private Toolbar toolbar; private ViewPager pager; private ProgressBar progressBar; private Button back2home,finish; private LinearLayout staytuned_message; private TextView message,time_left; private FragmentManager manager; private static timer t; private ScoreCalculator scoreCalculator; private Intent i1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_quiz_question); manager=getSupportFragmentManager(); toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); pager=(ViewPager)findViewById(R.id.question_pager); back2home=(Button)findViewById(R.id.home_link); finish=(Button)findViewById(R.id.finish_button); staytuned_message=(LinearLayout)findViewById(R.id.stay_tuned_message); progressBar=(ProgressBar)findViewById(R.id.progress); message=(TextView)findViewById(R.id.message); time_left=(TextView)findViewById(R.id.time_left); scoreCalculator= ScoreCalculator.getInstance(); back2home.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); getSupportActionBar().setDisplayHomeAsUpEnabled(true); SharedPref pref=new SharedPref(this); String userId=pref.getUserId(); i1 = getIntent(); String category = i1.getExtras().getString("Category_Name"); String topic = i1.getExtras().getString("Topic_Name"); if(!userId.isEmpty()){ loadQuizwithRetrofit(userId,category,topic); t=new timer(this,time_left);} else { message.setText("Please Login to Play Quiz "); } } public void loadQuizwithRetrofit(String userId,String category,String topic){ APIINTERFACE apiservice= Utils.getRetrofitService(); Call<QuizQuestionsModel> call=apiservice.getQuiz(userId,category,topic); Log.v("ronaldo","quiz get request for "+userId); call.enqueue(new Callback<QuizQuestionsModel>() { @Override public void onResponse(Call<QuizQuestionsModel> call, Response<QuizQuestionsModel> response) { progressBar.setVisibility(View.GONE); QuizQuestionsModel model=response.body(); int status=response.code(); if(model!=null && response.isSuccess()){ if(model.isSuccess()){ // set viewpager ScoreCalculator sc=ScoreCalculator.getInstance(); sc.setSpecial(1); final List<SingleQuestionModel> questions=model.getQuestions(); pager.setVisibility(View.VISIBLE); if(questions!=null){ for(int i=0;i<questions.size();i++){ Log.i("first-option "+i,"#"+questions.get(i).getOptionsA()+"#"); } t.execute(); //initialize scoreCalculator //ScoreCalculator sc=ScoreCalculator.getInstance(); String answers[]=new String[questions.size()]; String selectedChoices[]=new String[questions.size()]; int question_type[]=new int[questions.size()]; for(int i1=0;i1<questions.size();i1++){ SingleQuestionModel ques=questions.get(i1); answers[i1]=ques.getAnswer()+""; selectedChoices[i1]=" "; if(ques.isSingleChoice()){ question_type[i1]=1; }else{ question_type[i1]=2; } } // array initialization sc.setAnswers(answers); sc.setSelectedChoices(selectedChoices); sc.setQuestion_type(question_type); FragmentManager fragmentManager=getSupportFragmentManager(); pager.setAdapter(new FragmentStatePagerAdapter(fragmentManager) { @Override public Fragment getItem(int position) { Bundle b=new Bundle(); b.putInt("num",position+1); b.putSerializable("ques",questions.get(position)); if(position==questions.size()-1){ b.putBoolean("finish",true); }else{ b.putBoolean("finish",false); } QuizFragment fragment=new QuizFragment(); fragment.setArguments(b); return fragment; } @Override public int getCount() { return questions.size(); } }); }else{ staytuned_message.setVisibility(View.VISIBLE); } }else{ staytuned_message.setVisibility(View.VISIBLE); // message.setText("Some error occurred !! \nPlease try again later.."); message.setText(model.getMsg()); if (status == 503) { Toast.makeText(QuizQuestionActivity.this, "Server Down", Toast.LENGTH_SHORT).show(); } } Toast.makeText(QuizQuestionActivity.this, ""+model.getMsg(), Toast.LENGTH_SHORT).show(); }else{ staytuned_message.setVisibility(View.VISIBLE); message.setText(model.getMsg()); if (status == 503) { Toast.makeText(QuizQuestionActivity.this, "Server Down", Toast.LENGTH_SHORT).show(); } } } @Override public void onFailure(Call<QuizQuestionsModel> call, Throwable t) { progressBar.setVisibility(View.GONE); staytuned_message.setVisibility(View.VISIBLE); message.setText("Some error occurred !! \nPlease try again later.."); } }); } @Override public void onBackPressed() { if(staytuned_message.getVisibility()== View.GONE || progressBar.getVisibility()== View.VISIBLE){ QuizDialog dialog=new QuizDialog(); dialog.show(manager,"dialog"); }else { super.onBackPressed(); } } @Override public boolean onOptionsItemSelected(MenuItem menuItem) { if (menuItem.getItemId() == android.R.id.home) { if(staytuned_message.getVisibility()== View.GONE || progressBar.getVisibility()== View.VISIBLE){ QuizDialog dialog=new QuizDialog(); dialog.show(manager,"dialog"); }else { super.onBackPressed(); } } return super.onOptionsItemSelected(menuItem); } public void submitScore(){ progressBar.setVisibility(View.VISIBLE); if(finish!=null) finish.setEnabled(false); SharedPref pref=new SharedPref(this); ScoreCalculator sc=ScoreCalculator.getInstance(); int score_calculated=sc.calculateScore(); Log.v("calculated_score is ",score_calculated+""); sc.resetInstance(); //Important finishAndUpdateScore(pref.getUserId(),score_calculated); } public void finishAndUpdateScore(String id, final int score){ APIINTERFACE service= Utils.getRetrofitService(); Call<UpdateScoreModel> call=service.updateScore(id,score); call.enqueue(new Callback<UpdateScoreModel>() { @Override public void onResponse(Call<UpdateScoreModel> call, Response<UpdateScoreModel> response) { if(finish!=null){ finish.setEnabled(true); } progressBar.setVisibility(View.GONE); int status=response.code(); UpdateScoreModel model=response.body(); if(model!=null && response.isSuccess()){ if(model.isSuccess()){ scoreCalculator.setSpecial(0); Toast.makeText(QuizQuestionActivity.this,model.getMsg() , Toast.LENGTH_SHORT); finish(); Intent in=new Intent(QuizQuestionActivity.this,QuizScoreActivity.class); in.putExtra("score",score); startActivity(in); t.cancel(true); }else{ Toast.makeText(QuizQuestionActivity.this,model.getMsg() , Toast.LENGTH_SHORT); } }else{ Toast.makeText(QuizQuestionActivity.this,"Some error occurred !!", Toast.LENGTH_SHORT); } } @Override public void onFailure(Call<UpdateScoreModel> call, Throwable t) { Toast.makeText(QuizQuestionActivity.this,"Some error occurred !!", Toast.LENGTH_SHORT); progressBar.setVisibility(View.GONE); if(finish!=null){ finish.setEnabled(true); } } }); } public static class QuizDialog extends DialogFragment { @Override public Dialog onCreateDialog(Bundle saveInstanceState) { android.app.AlertDialog.Builder builder= new android.app.AlertDialog.Builder(getActivity()); builder.setTitle("Are you sure?"); builder.setMessage("Note that these questions will not appear again, so better to attempt it now. " + "Do you still want to exit from quiz?"); builder.setNegativeButton("NO", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dismiss(); } }); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { if(t!=null) t.cancel(true); getActivity().finish(); } }); Dialog d=builder.create(); return d; } } private static class timer extends AsyncTask<Void, Pair<String, String>, Void> { private TextView timer_text=null; private Context context; public timer(Context context, TextView timer_text) { this.context=context; this.timer_text = timer_text; } @Override protected void onPreExecute() { } @Override protected Void doInBackground(Void... voids) { for(int i=1;i>=0;i--){ // 1 minutes for(int j=59;j>=0;j--){ // 59 seconds if(isCancelled()){ Log.v("cancel","called"); return null; } //Log.v("timer",i+" mins "+j+" seconds"); publishProgress(new Pair<String, String>(i+"",j+"")); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } return null; } @Override protected void onProgressUpdate(Pair<String, String>... values) { String str=""; if(values[0].first.length()==1){ str+="0"; } str+=values[0].first+" mins "; if(values[0].second.length()==1){ str+="0"; } str+=values[0].second+" seconds "; timer_text.setText(str); } @Override protected void onPostExecute(Void aVoid) { if(new Connection(context).isInternet()){ Log.v("internet","available"); ScoreCalculator sc=ScoreCalculator.getInstance(); if(sc.getSpecial()==1) ((QuizQuestionActivity)context).submitScore(); }else{ Log.v("internet","not available"); Toast.makeText(context.getApplicationContext(),"No internet Connection", Toast.LENGTH_SHORT); ((AppCompatActivity)context).finish(); Intent in=new Intent(context,QuizScoreActivity.class); in.putExtra("score",0); context.startActivity(in); } } } }