package net.dev123.yibo.service.task;
import java.util.ArrayList;
import java.util.List;
import net.dev123.entity.StatusUpdate;
import net.dev123.exception.LibException;
import net.dev123.mblog.MicroBlog;
import net.dev123.sns.Sns;
import net.dev123.yibo.EditMicroBlogActivity;
import net.dev123.yibo.R;
import net.dev123.yibo.common.Constants;
import net.dev123.yibo.common.GlobalVars;
import net.dev123.yibo.common.ResourceBook;
import net.dev123.yibo.db.LocalAccount;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.util.Log;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class UpdateStatusTask extends AbstractUpdateStatusTask<Void, Void, net.dev123.mblog.entity.Status> {
private static final String TAG = UpdateStatusTask.class.getSimpleName();
private LocalAccount account;
private ProgressDialog dialog;
private boolean isShowDialog = false;
private String resultMsg = null;
public UpdateStatusTask(EditMicroBlogActivity context, StatusUpdate statusUpdate, LocalAccount account) {
super(context, statusUpdate);
this.account = account;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
if (isShowDialog) {
dialog = ProgressDialog.show(context, null,
context.getString(R.string.msg_blog_sending));
dialog.setCancelable(true);
dialog.setOnCancelListener(onCancelListener);
dialog.setOwnerActivity((Activity)context);
}
}
@Override
protected net.dev123.mblog.entity.Status doInBackground(Void... params) {
net.dev123.mblog.entity.Status newStatus = null;
if (statusUpdate.getImage() != null) {
rotateImage();
compressImage();
}
try {
if (account.isSnsAccount()) {
Sns sns = GlobalVars.getSns(account);
if (sns != null) {
boolean result = false;
if (statusUpdate.getImage() != null) {
result = sns.uploadPhoto(statusUpdate.getImage(), statusUpdate.getStatus());
} else {
result = sns.createStatus(statusUpdate.getStatus());
}
if (result) {
newStatus = new net.dev123.mblog.entity.Status();
}
}
} else {
MicroBlog microBlog = GlobalVars.getMicroBlog(account);
if (microBlog != null) {
newStatus = microBlog.updateStatus(statusUpdate);
}
}
} catch (LibException e) {
if (Constants.DEBUG) Log.e(TAG, "Task", e);
resultMsg = ResourceBook.getStatusCodeValue(e.getExceptionCode(), context);
}
return newStatus;
}
@Override
protected void onPostExecute(net.dev123.mblog.entity.Status result) {
super.onPostExecute(result);
if (isShowDialog && dialog != null && dialog.getContext() != null) {
try {
dialog.dismiss();
} catch(Exception e){}
}
if (result != null) {
if (!context.isUpdateSinaAndPauseOthers()) {
//退出onPause清空临时保存数据
EditText etText = (EditText)((Activity)context).findViewById(R.id.etText);
if (etText != null) {
etText.setText("");
}
}
if (isShowDialog) {
Toast.makeText(context, R.string.msg_status_success, Toast.LENGTH_LONG).show();
if (context.isUpdateSinaAndPauseOthers()) {
List<LocalAccount> sinaList = new ArrayList<LocalAccount>();
sinaList.add(account);
context.removeAllSinaAccount(sinaList);
context.updateSelectorText();
Button btnSend = (Button) ((Activity)context).findViewById(R.id.btnOperate);
btnSend.setEnabled(true);
} else {
((Activity)context).finish();
}
}
} else {
Button btnSend = (Button) ((Activity)context).findViewById(R.id.btnOperate);
btnSend.setEnabled(true);
Toast.makeText(context, resultMsg, Toast.LENGTH_LONG).show();
}
}
private OnCancelListener onCancelListener = new OnCancelListener() {
public void onCancel(DialogInterface dialog) {
Button btnSend = (Button) ((Activity)context).findViewById(R.id.btnOperate);
btnSend.setEnabled(true);
UpdateStatusTask.this.cancel(true);
}
};
public boolean isShowDialog() {
return isShowDialog;
}
public void setShowDialog(boolean isShowDialog) {
this.isShowDialog = isShowDialog;
}
}