Setting a countdown timer with time picker dialog android

Leyton Taylor

My end goal is to have a countdown timer that is set using the time picker dialog in android. As of now I have a time picker that can be set to any time, and I have a countdown timer. So my question is how do I set the textview in my countdown timer to what was set in my time picker. In my code I just have my countdown timer set to three minutes, but I would like it set to the time picker dialogs set time.

Here is what I have...

public class SleepTimer extends AppCompatActivity {
TimePicker myTimePicker;
Button buttonstartSetDialog;
TextView textAlarmPrompt;
TimePickerDialog timePickerDialog;
final static int RQS_1 = 1;
Button btnStart, btnStop;
TextView textViewTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sleep_timer);

    btnStart = (Button)findViewById(R.id.btnStart);
    btnStop= (Button)findViewById(R.id.btnStop);
    textViewTime = (TextView)findViewById(R.id.textViewTime);



    final CounterClass timer = new CounterClass(180000, 1000);

    btnStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            timer.start();
        }
    });
    btnStop.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View v) {
            timer.cancel();
        }
    });

    textAlarmPrompt = (TextView)findViewById(R.id.alarmprompt);
    buttonstartSetDialog = (Button)findViewById(R.id.startSetDialog);
    buttonstartSetDialog.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            textAlarmPrompt.setText("");
            openTimePickerDialog(false);
        }
    });


}

private void openTimePickerDialog(boolean is24r){
    Calendar calendar = Calendar.getInstance();

    timePickerDialog = new TimePickerDialog(
            SleepTimer.this,
            onTimeSetListener,
            calendar.get(Calendar.HOUR_OF_DAY),
            calendar.get(Calendar.MINUTE),
            is24r);
    timePickerDialog.setTitle("Set Sleep Time");

    timePickerDialog.show();
}

TimePickerDialog.OnTimeSetListener onTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

        Calendar calNow = Calendar.getInstance();
        Calendar calSet = (Calendar) calNow.clone();

        calSet.set(Calendar.HOUR_OF_DAY, hourOfDay);
        calSet.set(Calendar.MINUTE, minute);
        calSet.set(Calendar.SECOND, 0);
        calSet.set(Calendar.MILLISECOND, 0);

        if(calSet.compareTo(calNow) <= 0){

            calSet.add(Calendar.DATE, 1);
        }

        setAlarm(calSet);

    }};


public class CounterClass extends CountDownTimer {

    /**
     * @param millisInFuture    The number of millis in the future from the call
     *                          to {@link #start()} until the countdown is done and {@link #onFinish()}
     *                          is called.
     * @param countDownInterval The interval along the way to receive
     *                          {@link #onTick(long)} callbacks.
     */

    public CounterClass(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

    @TargetApi(Build.VERSION_CODES.GINGERBREAD)
    @Override
    public void onTick(long millisUntilFinished) {
        long millis = millisUntilFinished;
        String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
                TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
        System.out.println(hms);
        textViewTime.setText(hms);

    }

    @Override
    public void onFinish() {

    }
}

If anyone knows how to do this please respond. Thanks:)

noev

First change this method so it looks like this

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        timer = new CounterClass((minute * 60 * 1000) + (hourOfDay * 60* 60 * 1000), 1000);
        long millis = (minute * 60 * 1000) + (hourOfDay * 60* 60 * 1000);
        String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
                TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
        System.out.println(hms);
        textViewTime.setText(hms);

    }};

Then remove final CounterClass timer = new CounterClass(180000, 1000) and add it as a field instead as

CounterClass timer;

This code sets the TextView and also updates your counter with the time picked. But I reused your code and now we have the same code repeating which is not good. Extract it into a method so we don't repeat ourselves.

COPY PASTE EDITION

public class SleepTimer extends AppCompatActivity {
TimePicker myTimePicker;
Button buttonstartSetDialog;
TextView textAlarmPrompt;
TimePickerDialog timePickerDialog;
final static int RQS_1 = 1;
Button btnStart, btnStop;
TextView textViewTime;
CounterClass timer;

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

    btnStart = (Button) findViewById(R.id.btnStart);
    btnStop = (Button) findViewById(R.id.btnStop);
    textViewTime = (TextView) findViewById(R.id.textViewTime);




    btnStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            timer.start();
        }
    });
    btnStop.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View v) {
            timer.cancel();
        }
    });

    textAlarmPrompt = (TextView) findViewById(R.id.alarmprompt);
    buttonstartSetDialog = (Button) findViewById(R.id.startSetDialog);
    buttonstartSetDialog.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            textAlarmPrompt.setText("");
            openTimePickerDialog(false);
        }
    });


}

private void openTimePickerDialog(boolean is24r) {
    Calendar calendar = Calendar.getInstance();

    timePickerDialog = new TimePickerDialog(
            SleepTimer.this,
            onTimeSetListener,
            calendar.get(Calendar.HOUR_OF_DAY),
            calendar.get(Calendar.MINUTE),
            is24r);
    timePickerDialog.setTitle("Set Sleep Time");

    timePickerDialog.show();
}

TimePickerDialog.OnTimeSetListener onTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    timer = new CounterClass((minute * 60 * 1000) + (hourOfDay * 60* 60 * 1000), 1000);
    long millis = (minute * 60 * 1000) + (hourOfDay * 60* 60 * 1000);
    String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
            TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
    System.out.println(hms);
    textViewTime.setText(hms);

}};


public class CounterClass extends CountDownTimer {

    /**
     * @param millisInFuture    The number of millis in the future from the call
     *                          to {@link #start()} until the countdown is done and {@link #onFinish()}
     *                          is called.
     * @param countDownInterval The interval along the way to receive
     *                          {@link #onTick(long)} callbacks.
     */

    public CounterClass(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

    @TargetApi(Build.VERSION_CODES.GINGERBREAD)
    @Override
    public void onTick(long millisUntilFinished) {
        long millis = millisUntilFinished;
        String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
                TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
        System.out.println(hms);
        textViewTime.setText(hms);

    }

    @Override
    public void onFinish() {

    }
}

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Android Dialog with CountDown TImer

From Dev

Android Dialog with CountDown TImer

From Dev

Start countdown timer when time is chosen from Time Picker in android

From Dev

How to make time picker dialog for timer

From Dev

Countdown timer, not displaying time

From Dev

Android ProgressBar timer countdown

From Dev

Faster Countdown timer in android

From Dev

Resuming Android countdown timer

From Dev

Android TimePickerDialog selected time not passing through to the actual Countdown Timer

From Dev

Dialog on time picker

From Dev

time picker dialog not working

From Dev

Countdown timer changed with local time

From Dev

Create expired time, or countdown timer

From Dev

how can i put date and time picker in a dialog in android

From Dev

how can i put date and time picker in a dialog in android

From Dev

Android - Properly creating and countdown of timer?

From Dev

Android User input to countdown timer

From Dev

Timer, Time code, Time format countdown

From Dev

Timer, Time code, Time format countdown

From Dev

android dialog with clock timer

From Dev

android - countdown with decreasing time

From Dev

how to implement Countdown timer with custom starting time?

From Dev

Real-time form countdown timer with javascript

From Dev

JavaScript Countdown Timer to specific time everyday

From Dev

setting the boolean with the Timer on android

From Dev

How to set time from time picker dialog?

From Dev

Wheel picker on dialog box android

From Dev

Android PreferenceActivity dialog with number picker

From Dev

Wheel picker on dialog box android