package com.kescoode.xmail.service.task.internal;
import android.content.Context;
import android.content.Intent;
import android.os.Parcelable;
import android.os.Process;
import android.support.annotation.NonNull;
import com.kescoode.xmail.AppConstant;
import com.kescoode.xmail.domain.Account;
/**
* 用Runnable封装的邮件命令
*
* @author Kesco Lin
*/
public abstract class Command implements Runnable, Comparable<Command> {
public enum Priority {
HIGH(-1), NORMAL(0), LOW(1);
private byte mLevel;
private Priority(int level) {
mLevel = (byte) level;
}
}
protected final Context context;
private Priority priority = Priority.NORMAL;
protected final Account account;
public Command(Context context, Account account) {
this.context = context;
this.account = account;
}
public final void setPriority(@NonNull Priority priority) {
this.priority = priority;
}
/**
* 发送事件广播
*
* @param event 事件对象
*/
protected void sendBroadCaset(Parcelable event) {
Intent intent = new Intent(AppConstant.Event.BROADCAST);
intent.putExtra(AppConstant.Event.TAG, event);
context.sendBroadcast(intent);
}
@Override
public final void run() {
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
task();
}
public abstract void task();
@Override
public int compareTo(@NonNull Command another) {
if (another.priority.mLevel == priority.mLevel) {
return 0;
} else if (another.priority.mLevel < priority.mLevel) {
return 1;
} else {
return -1;
}
}
}