package cm.android.sdk.alarm; import android.content.Context; import android.content.Intent; import java.util.concurrent.atomic.AtomicBoolean; public abstract class TimerTask { public final int requestCode = TimerTask.this.hashCode(); private final AtomicBoolean startFlag = new AtomicBoolean(false); public void start(Context context) { start(context, 0); } public void start(Context context, long delayAtMillis) { if (startFlag.compareAndSet(false, true)) { Intent intent = getIntent(context); intent.setPackage(context.getPackageName()); int requestCode = getRequestCode(); AlarmUtil.schedule(context, intent, requestCode, delayAtMillis); } } public void cancel(Context context) { if (startFlag.compareAndSet(true, false)) { Intent intent = getIntent(context); intent.setPackage(context.getPackageName()); int requestCode = getRequestCode(); AlarmUtil.cancel(context, intent, requestCode); } } public void schedule(Context context) { if (!startFlag.get()) { return; } Intent intent = getIntent(context); intent.setPackage(context.getPackageName()); int requestCode = getRequestCode(); AlarmUtil.schedule(context, intent, requestCode, getDelayAtMillis()); } public int getRequestCode() { return 0; } protected abstract Intent getIntent(Context context); protected abstract long getDelayAtMillis(); }