package com.parttime.utils;
import java.util.Timer;
import java.util.TimerTask;
/**
* Created by cjz on 2015/7/24.
*/
public class CountDownTimer {
private Timer mTimer;
private int mSecondsLeft;
private TimeTick mCallback;
private TimerTask mTask;
public CountDownTimer(int howManySeconds, TimeTick callback) {
mTimer = new Timer();
mTask = new CountDownTask();
mCallback = callback;
mSecondsLeft = howManySeconds;
}
public void start() {
if (mTimer == null) {
throw new IllegalStateException("Each instance of CountDownTimer can only be used once");
}
mTimer.schedule(mTask, 1000, 1000);
}
public void cancel() {
if (mTask != null) {
mTask.cancel();
}
if (mTimer != null) {
mTimer.cancel();
}
mTimer = null;
mCallback.cancelled();
}
public void pause() {
if (mTask != null) {
mTask.cancel();
}
if (mTimer != null) {
mTimer.cancel();
}
mCallback.paused();
}
public void goOn() {
mTask = new CountDownTask();
mTimer = new Timer();
mTimer.schedule(mTask, 1000, 1000);
mCallback.goOn();
}
public boolean isCounting() {
return (mSecondsLeft > 0);
}
public int getSecondsLeft() {
return mSecondsLeft;
}
public interface TimeTick {
void ticking(int secondsLeft);
void stoped();
void paused();
void cancelled();
void goOn();
}
private class CountDownTask extends TimerTask {
@Override
public void run() {
if (--mSecondsLeft <= 0) {
mCallback.stoped();
this.cancel();
mTimer = null;
} else {
mCallback.ticking(mSecondsLeft);
}
}
}
}