3

I have Implemented a countdowntimer in my application.it's working fine.Now i implemented a quit button in my app with dialog box permission (yes or no).when user press yes then quit and no back to game.Now my problem is how to pause the Countdowntimer when i click on quit button and resume on no button in dialog box.

Here is my code:-

public class QuestionActivity extends Activity implements OnClickListener{
    private Question currentQ;
    private GamePlay currentGame;
    public CountDownTimer counterTimer;
    private Button nextBtn1, nextBtn2, nextBtn3, nextBtn4, nextBtn5;


            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.question);
                processScreen();
         }
                /**
         * Configure current game and get question
         */
         private void processScreen()
         {
        currentGame = ((Application)getApplication()).getCurrentGame();
        currentQ = currentGame.getNextQuestion();
        nextBtn1 = (Button) findViewById(R.id.answer1);
        nextBtn1.setEnabled(true);
        nextBtn1.setOnClickListener(this);
        nextBtn2 = (Button) findViewById(R.id.answer2);
        nextBtn2.setEnabled(true);
        nextBtn2.setOnClickListener(this);
        nextBtn3 = (Button) findViewById(R.id.answer3);
        nextBtn3.setEnabled(true);
        nextBtn3.setOnClickListener(this);
        nextBtn4 = (Button) findViewById(R.id.answer4);
        nextBtn4.setEnabled(true);
        nextBtn4.setOnClickListener(this);
        nextBtn5 = (Button) findViewById(R.id.answer5);
        nextBtn5.setEnabled(true);
        nextBtn5.setOnClickListener(this);
        /**
         * Update the question and answer options..
         */
        setQuestions();

    }

     /**
     * Method to set the text for the question and answers from the current games
     * current question
     */
    private void setQuestions() {
        //set the question text from current question
        String question = Utility.capitalise(currentQ.getQuestion());
        TextView qText = (TextView) findViewById(R.id.question);
        qText.setText(question);
         //set the available options
        List<String> answers = currentQ.getQuestionOptions();
        TextView option1 = (TextView) findViewById(R.id.answer1);
        option1.setText(Utility.capitalise(answers.get(0)));
        TextView option2 = (TextView) findViewById(R.id.answer2);
        option2.setText(Utility.capitalise(answers.get(1)));
        TextView option3 = (TextView) findViewById(R.id.answer3);
        option3.setText(Utility.capitalise(answers.get(2)));
        TextView option4 = (TextView) findViewById(R.id.answer4);
        option4.setText(Utility.capitalise(answers.get(3)));
        int score = currentGame.getScore();
        String scr = String.valueOf(score);
        TextView score1 = (TextView) findViewById(R.id.score);
        score1.setText(scr);

        counterTimer = new CountDownTimer(15000, 1000) {
        public void onFinish() {                
                if(currentGame.getRound()==20)
                {
                nextBtn1.setEnabled(false);
                nextBtn2.setEnabled(false);
                nextBtn3.setEnabled(false);
                nextBtn4.setEnabled(false);
                nextBtn5.setEnabled(false);
                final Handler handle = new Handler();
                Toast.makeText(QuestionActivity.this, "Time's Up", Toast.LENGTH_SHORT).show();
                Runnable delay = new Runnable() {
                    public void run() {
                        System.exit(0);
                    }
                };
                handle.postDelayed(delay,3000);
                }

                else if(currentGame.getRound()==0)
                {
                currentGame.decrementScore();
                final Handler handle = new Handler();
                Runnable delay = new Runnable() {
                    public void run() {
                        processScreen();
                    }
                };
                handle.postDelayed(delay,3000);
                }

                else if(currentGame.getRound()==19)
                {
                        nextBtn1.setEnabled(false);
                        nextBtn2.setEnabled(false);
                        nextBtn3.setEnabled(false);
                        nextBtn4.setEnabled(false);
                        nextBtn5.setEnabled(false);
                        currentGame.decrementScore();
                        final Handler handle = new Handler();
                        Toast.makeText(QuestionActivity.this, "Time's Up", Toast.LENGTH_SHORT).show();
                        Runnable delay = new Runnable() {
                            public void run() {
                                processScreen();
                            }
                        };
                        handle.postDelayed(delay,3000);
                 }
            }

            public void onTick(long millisUntilFinished) {
                TextView time = (TextView) findViewById(R.id.timers);
                time.setText( ""+millisUntilFinished/1000);
                                }
        };
        counterTimer.start();
    }


    @Override
    public void onResume() {
        super.onResume();
    }


    @Override
    public void onClick(View arg0) 
    {
        nextBtn1.setEnabled(false);
        nextBtn2.setEnabled(false);
        nextBtn3.setEnabled(false);
        nextBtn4.setEnabled(false);
        nextBtn5.setEnabled(false);
        arg0.setEnabled(true);
        //Log.d("Questions", "Moving to next question");
        if(arg0.getId()==R.id.answer5)
        {       
            Button yes, no;
            final Dialog dialog = new Dialog(this, R.style.FullHeightDialog); //this is a reference to the style above
            dialog.setContentView(R.layout.dialog1); //I saved the xml file above as yesnomessage.xml
            dialog.setCancelable(true);

            //to set the message
            TextView message =(TextView) dialog.findViewById(R.id.tvmessagedialogtext);
            message.setText("Are you sure you want to Exit?");
            yes = (Button) dialog.findViewById(R.id.bmessageDialogYes);
            yes.setOnClickListener(new OnClickListener() {
            public void onClick(View v) 
            {
             counterTimer.cancel();
             finish();
             startActivity(new Intent(QuestionActivity.this, SplashActivity.class));             
             }
                        });

             no = (Button) dialog.findViewById(R.id.bmessageDialogNo);
             no.setOnClickListener(new OnClickListener() {
             public void onClick(View v)  
             {
             dialog.dismiss();
             nextBtn1.setEnabled(true);
             nextBtn2.setEnabled(true);
             nextBtn3.setEnabled(true);
             nextBtn4.setEnabled(true);
             }
                        });
             dialog.show();
    }

        else
        {
            if(!checkAnswer(arg0)) return;  

        /**
         * check if end of game
         */
        if (currentGame.isGameOver()){
            //Log.d("Questions", "End of game! lets add up the scores..");
            //Log.d("Questions", "Questions Correct: " + currentGame.getRight());
            //Log.d("Questions", "Questions Wrong: " + currentGame.getWrong());
            final Handler handle = new Handler();
            Runnable delay = new Runnable() {
                public void run() {
                    startActivity(new Intent(QuestionActivity.this, EndgameActivity.class));
                    finish();
                }
            };
            handle.postDelayed(delay,2000);

        }
            else
            {
                final Handler handle = new Handler();
                Runnable delay = new Runnable() {
                    public void run() {
                   startActivity(new Intent(QuestionActivity.this, QuestionActivity.class));
                   finish();
                    }
                };
                handle.postDelayed(delay,2000);
                      }
                  }
              }


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        switch (keyCode)
        {
        case KeyEvent.KEYCODE_BACK :
            return true;
        }

        return super.onKeyDown(keyCode, event);
    }


    /**
     * Check if a checkbox has been selected, and if it
     * has then check if its correct and update gamescore
     */
    private boolean checkAnswer(View v) {
        final Button b = (Button) v;
        String answer = b.getText().toString();
         counterTimer.cancel();
         b.setBackgroundResource(R.drawable.ans);
         b.setEnabled(false);
        //Log.d("Questions", "Valid Checkbox selection made - check if correct");
            if (currentQ.getAnswer().equalsIgnoreCase(answer))
                {
                b.setBackgroundResource(R.drawable.ansgreen);
                //Log.d("Questions", "Correct Answer!");
                Toast.makeText(QuestionActivity.this, "Correct Answer", Toast.LENGTH_SHORT).show();
                currentGame.incrementScore();
                }

            else{
                b.setBackgroundResource(R.drawable.ansred);
                //Log.d("Questions", "Incorrect Answer!");
                Toast.makeText(QuestionActivity.this, "Incorrect Answer", Toast.LENGTH_SHORT).show();
                currentGame.decrementScore1();
                            }
            return true;
        }

    public void show() 
    {
    counterTimer.cancel();          
    }

}
UchihaSasuke
  • 353
  • 2
  • 23

1 Answers1

1

Hello do something like that-

package com.example.dialogboxwithtimer;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
    private TextView textTimer;
    private Button startButton;
    private Button pauseButton;
    private long startTime = 0L;
    private Handler myHandler = new Handler();
    long timeInMillies = 0L;
    long timeSwap = 0L;
    long finalTime = 0L;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn = (Button) findViewById(R.id.button1);

        textTimer = (TextView) findViewById(R.id.textTimer);

        startButton = (Button) findViewById(R.id.btnStart);
        startButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                startTime = SystemClock.uptimeMillis();
                myHandler.postDelayed(updateTimerMethod, 0);

            }
        });

        pauseButton = (Button) findViewById(R.id.btnPause);
        pauseButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                timeSwap += timeInMillies;
                myHandler.removeCallbacks(updateTimerMethod);

            }
        });

        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                alertMessage();
                timeSwap += timeInMillies;
                myHandler.removeCallbacks(updateTimerMethod);
            }
        });
    }

    public void alertMessage() {
        DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                switch (which) {
                case DialogInterface.BUTTON_POSITIVE:
                    // Yes button clicked

                    Toast.makeText(MainActivity.this, "Yes Clicked",
                            Toast.LENGTH_LONG).show();
                    break;

                case DialogInterface.BUTTON_NEGATIVE:
                    // No button clicked
                    // do nothing
                    startTime = SystemClock.uptimeMillis();
                    myHandler.postDelayed(updateTimerMethod, 0);

                    Toast.makeText(MainActivity.this, "No Clicked",
                            Toast.LENGTH_LONG).show();
                    break;
                }
            }
        };

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("Are you sure?")
                .setPositiveButton("Yes", dialogClickListener)
                .setNegativeButton("No", dialogClickListener).show();
    }

    private Runnable updateTimerMethod = new Runnable() {

        public void run() {
            timeInMillies = SystemClock.uptimeMillis() - startTime;
            finalTime = timeSwap + timeInMillies;

            int seconds = (int) (finalTime / 1000);
            int minutes = seconds / 60;
            seconds = seconds % 60;
            int milliseconds = (int) (finalTime % 1000);
            textTimer.setText("" + minutes + ":"
                    + String.format("%02d", seconds) + ":"
                    + String.format("%03d", milliseconds));
            myHandler.postDelayed(this, 0);
        }

    };

}

And in your layout-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Popup" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#000000" >

        <TextView
            android:id="@+id/textTimer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@+id/btnPause"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="37dp"
            android:text="00:00:00"
            android:textColor="#ffffff"
            android:textSize="40sp" />

        <Button
            android:id="@+id/btnPause"
            android:layout_width="90dp"
            android:layout_height="45dp"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/btnStart"
            android:text="Pause" />

        <Button
            android:id="@+id/btnStart"
            android:layout_width="90dp"
            android:layout_height="45dp"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:layout_marginLeft="48dp"
            android:text="Start" />
    </RelativeLayout>

</LinearLayout>

For more help see these url- http://www.androidhub4you.com/2013/04/countdown-demo-in-android-custom-timer.html and http://www.androidhub4you.com/2012/09/alert-dialog-box-or-confirmation-box-in.html

Blockquote

Manish Srivastava
  • 1,810
  • 2
  • 15
  • 23