package com.ztspeech.simutalk2.weibo;
import java.io.InputStream;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import com.ztspeech.simutalk2.R;
import com.ztspeech.simutalk2.dictionary.util.LogInfo;
import com.ztspeech.simutalk2.dictionary.util.Util;
import com.ztspeech.weibo.sdk.kaixin.Kaixin;
import com.ztspeech.weibo.sdk.kaixin.KaixinAuthError;
import com.ztspeech.weibo.sdk.kaixin.KaixinAuthListener;
import com.ztspeech.weibo.sdk.kaixin.KaixinError;
public class Ikaixin {
// private Context context;
private static final String API_KEY = "846977132847356f74f09ddd08925e42";
private static final String SECRET_KEY = "186660258ac3bbd70a9738ab1e90a332 ";
private static final String APP_ID = "100046250 ";
private static final String[] DEFAULT_PERMISSIONS = { "basic", "create_records" };
private static Kaixin kaixin;
private static final int LOGINERROR = 1001;
private ProgressDialog progress;
private static Ikaixin iKaixin = null;
private Handler handler;
private Context mContext;
private Handler mHandler;
public Ikaixin(Context context) {
mContext = context;
setHandler(mContext);
}
private void setHandler(Context context) {
Looper mainLooper = context.getMainLooper();
handler = new Handler(mainLooper) {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 200:
Util.showToast(mContext, "��Ȩ�ɹ�");
break;
case 201:
Util.showToast(mContext, (String) msg.obj);
break;
case 400:
Util.showToast(mContext, "��Ȩʧ��");
break;
case 401:
Util.showToast(mContext, (String) msg.obj);
break;
case Constant.RESULT_POST_RECORD_OK:
Util.showToast(mContext, R.string.post_record_success);
break;
case LOGINERROR:
Util.showToast(mContext, (String) msg.obj);
break;
case Constant.RESULT_POST_RECORD_FAILED:
Util.showToast(mContext, R.string.post_record_fail);
break;
// �������������
case Constant.RESULT_FAILED_NETWORK_ERR:
Util.showToast(mContext, R.string.task_failed_network_err);
break;
// JSON���������������
case Constant.RESULT_FAILED_JSON_PARSE_ERR:
Util.showToast(mContext, R.string.task_failed_json_parse_err);
break;
// ����IJ��������������
case Constant.RESULT_FAILED_ARG_ERR:
Util.showToast(mContext, R.string.task_failed_arg_err);
break;
// ����� URL,���������URL
case Constant.RESULT_FAILED_MALFORMEDURL_ERR:
Util.showToast(mContext, R.string.task_failed_malformed_url_err);
break;
// �ַ���ת��ʧ�ܣ��������
case Constant.RESULT_FAILED_ENCODER_ERR:
Util.showToast(mContext, R.string.task_failed_encoder_err);
break;
// ���������ʧ��
case Constant.RESULT_FAILED:
Util.showToast(mContext, R.string.task_failed);
break;
case Constant.RESULT_FAILED_REQUEST_ERR:
KaixinError kaixinError = (KaixinError) msg.obj;
Util.showToast(mContext, kaixinError.toString());
break;
case Constant.RESULT_USER_CANCEL_PROCESS:
Util.showToast(mContext, R.string.cancelnet);
break;
default:
break;
}
}
};
}
public void setClass() {
iKaixin = null;
}
public synchronized static Ikaixin getInstance(Context context) {
if (iKaixin == null) {
iKaixin = new Ikaixin(context);
}
return iKaixin;
}
public void init(Context context) {
kaixin = Kaixin.getInstance();
kaixin.loadStorage(context);
}
public boolean isBinder() {
return kaixin.isBinder(mContext);
}
/**
* ȡ����Ȩ
*
* @param context
*/
public void unbinderKaixin(Context context) {
kaixin.setAccessToken(null);
kaixin.setRefreshToken(null);
kaixin.setAccessExpires(0);
kaixin.updateStorage(context);
}
// ��Ȩ
public void bindKaixin(Context context, Handler _mHandler) {
mContext = context;
setHandler(mContext);
mHandler = _mHandler;
/**
* ��ɵ�¼����ȡaccess_token(User-Agent Flow��ʽ)
*/
kaixin.authorize(mContext, DEFAULT_PERMISSIONS, authBinderListener);
}
private PostRecordTask getDataTask;
private String contentString;
// ��״̬
public void sendWeibo(String contentStr, Context context) {
mContext = context;
setHandler(mContext);
contentString = contentStr;
if (kaixin != null) {
if (kaixin.isSessionValid()) {
if (contentStr.length() == 0) {
Util.showToast(mContext, R.string.post_record_empty_content);
return;
}
InputStream in = mContext.getResources().openRawResource(R.raw.photo1);
getDataTask = new PostRecordTask(context);
getDataTask.execute(kaixin, handler, contentStr, in);
} else {
/**
* ��ɵ�¼����ȡaccess_token(User-Agent Flow��ʽ)
*/
kaixin.authorize(mContext, DEFAULT_PERMISSIONS, authListener);
}
}
}
KaixinAuthListener authListener = new KaixinAuthListener() {
@Override
public void onAuthCancel(Bundle values) {
LogInfo.LogOutE("haitian", "onAuthCancel");
}
@Override
public void onAuthCancelLogin() {
LogInfo.LogOutE("haitian", "onAuthCancelLogin");
}
/**
* ��Ȩ���
*
* @param values
* ��Ȩ���������ص�key-value��ʽ�IJ�������keyΪ��������valueΪ����ֵ
*/
@Override
public void onAuthComplete(Bundle values) {
if (contentString.length() == 0) {
Util.showToast(mContext, R.string.post_record_empty_content);
return;
}
InputStream in = mContext.getResources().openRawResource(R.raw.photo1);
getDataTask = new PostRecordTask(mContext);
getDataTask.execute(kaixin, handler, contentString, in);
}
@Override
public void onAuthError(KaixinAuthError kaixinAuthError) {
LogInfo.LogOutE("haitian", "onAuthError");
Message msg = Message.obtain();
msg.obj = kaixinAuthError.getErrorDescription();
msg.what = LOGINERROR;
handler.sendMessage(msg);
}
};
KaixinAuthListener authBinderListener = new KaixinAuthListener() {
@Override
public void onAuthCancel(Bundle values) {
LogInfo.LogOutE("haitian", "onAuthCancel");
}
@Override
public void onAuthCancelLogin() {
LogInfo.LogOutE("haitian", "onAuthCancelLogin");
}
/**
* ��Ȩ���
*
* @param values
* ��Ȩ���������ص�key-value��ʽ�IJ�������keyΪ��������valueΪ����ֵ
*/
@Override
public void onAuthComplete(Bundle values) {
handler.sendEmptyMessage(200);
if (mHandler != null) {
mHandler.sendEmptyMessage(201);
mHandler = null;
}
}
@Override
public void onAuthError(KaixinAuthError kaixinAuthError) {
LogInfo.LogOutE("haitian", "onAuthError");
Message msg = Message.obtain();
msg.obj = kaixinAuthError.getErrorDescription();
msg.what = LOGINERROR;
handler.sendMessage(msg);
}
};
}