package cm.android.sdk.alarm;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
public abstract class BaseAlarmReceiver extends BroadcastReceiver {
private Context context;
private TimerTask timerTask = new TimerTask() {
@Override
protected Intent getIntent(Context context) {
return BaseAlarmReceiver.this.getIntent(context);
}
@Override
protected long getDelayAtMillis() {
return BaseAlarmReceiver.this.getDelayAtMillis();
}
@Override
public int getRequestCode() {
return BaseAlarmReceiver.this.getRequestCode();
}
};
public final void register(Context context) {
IntentFilter intentFilter = createIntentFilter();
register(context, intentFilter);
}
public final void register(Context context, IntentFilter intentFilter) {
this.context = context;
context.registerReceiver(this, intentFilter);
startAlarm();
}
public final void unregister() {
if (context == null) {
return;
}
stopAlarm();
context.unregisterReceiver(this);
context = null;
}
public final void startAlarm() {
timerTask.start(context);
}
public final void stopAlarm() {
timerTask.cancel(context);
}
@Override
public final void onReceive(Context context, Intent intent) {
if (getIntent(context).getAction().equals(intent.getAction())) {
timerTask.schedule(context);
}
onHandleIntent(context, intent);
}
public IntentFilter createIntentFilter() {
return new IntentFilter();
}
protected int getRequestCode() {
return 0;
}
protected abstract Intent getIntent(Context context);
protected abstract long getDelayAtMillis();
protected abstract void onHandleIntent(Context context, Intent intent);
}