package org.aisen.weibo.sina.service;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import org.aisen.android.common.context.GlobalContext;
import org.aisen.weibo.sina.base.AppContext;
import org.aisen.weibo.sina.service.publisher.InterfacePublisher;
import org.aisen.weibo.sina.service.publisher.PublishManager;
import org.aisen.weibo.sina.support.bean.PublishBean;
import org.aisen.weibo.sina.support.bean.PublishBean.PublishStatus;
import org.aisen.weibo.sina.support.sqlit.PublishDB;
/**
* 任务发布服务,将所有发布任务保存在一个队列依次发布
*
* @author wangdan
*
*/
public class PublishService extends Service implements InterfacePublisher {
public static void publish(Context context, PublishBean bean) {
Intent intent = new Intent(context, PublishService.class);
intent.setAction("org.aisen.weibo.sina.PUBLISH");
intent.putExtra("data", bean);
context.startService(intent);
}
public static void stopPublish() {
Intent intent = new Intent(GlobalContext.getInstance(), PublishService.class);
GlobalContext.getInstance().stopService(intent);
}
private PublishManager publishManager;
private PublishService publisher;
private PublishBinder binder;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (publisher == null)
publisher = this;
if (binder == null)
binder = new PublishBinder();
if (publishManager == null)
publishManager = new PublishManager(this, AppContext.getAccount());
if (intent != null) {
if ("org.aisen.weibo.sina.PUBLISH".equals(intent.getAction())) {
PublishBean data = (PublishBean) intent.getSerializableExtra("data");
if (data != null)
publish(data);
}
else if ("org.aisen.weibo.sina.Cancel".equals(intent.getAction())) {
publishManager.cancelPublish();
}
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public void publish(PublishBean data) {
if (data.getStatus() == PublishStatus.create) {
publishManager.onPublish(data);
} else {
// 如果不是新建的,都当做草稿重新发布
data.setStatus(PublishStatus.create);
PublishDB.addPublish(data, AppContext.getAccount().getUser());
publishManager.onPublish(data);
}
}
@Override
public void onDestroy() {
super.onDestroy();
publishManager.stop();
}
@Override
public IBinder onBind(Intent intent) {
return binder;
}
public class PublishBinder extends Binder {
public InterfacePublisher getPublisher() {
return publisher;
}
}
}