package cn.mutils.core.task;
import cn.mutils.core.event.IListener;
@SuppressWarnings("UnnecessaryInterfaceModifier")
public class RepeatTask extends Task {
public static interface IRepeatTaskListener extends IListener {
public void onStart(RepeatTask task);
public void onStop(RepeatTask task);
/**
* Prepare repeat
*
* @param task Task
* @return return true to intercept repeat
*/
public boolean onPreRepeat(RepeatTask task);
public abstract void onRepeat(RepeatTask task);
}
public static abstract class RepeatTaskListener implements IRepeatTaskListener {
public void onStart(RepeatTask task) {
}
public void onStop(RepeatTask task) {
}
public boolean onPreRepeat(RepeatTask task) {
return false;
}
}
protected String mName = "";
protected int mCount = 1;
public String getName() {
return mName;
}
public void setName(String name) {
if (mStarted || mStopped) {
return;
}
mName = name;
}
public void setCount(int count) {
if (mStarted || mStopped) {
return;
}
mCount = count;
}
public void addListener(RepeatTaskListener listener) {
super.addListener(listener);
}
public void repeat() {
if (!isRunning()) {
return;
}
if (mCount <= 0) {
stop();
return;
}
if (onPreRepeat()) {// Intercept repeat
stop();
return;
}
mCount--;
onRepeat();
}
protected boolean onPreRepeat() {
for (IRepeatTaskListener listener : getListeners(IRepeatTaskListener.class)) {
if (listener.onPreRepeat(this)) {
return true;
}
}
return false;
}
protected void onRepeat() {
for (IRepeatTaskListener listener : getListeners(IRepeatTaskListener.class)) {
listener.onRepeat(this);
}
}
@Override
protected void onStart() {
for (IRepeatTaskListener listener : getListeners(IRepeatTaskListener.class)) {
listener.onStart(this);
}
repeat();
}
@Override
protected void onStop() {
for (IRepeatTaskListener listener : getListeners(IRepeatTaskListener.class)) {
listener.onStop(this);
}
}
}