package cn.bidaround.ytcore.kaixin;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONException;
import org.json.JSONObject;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import cn.bidaround.ytcore.YtShareListener;
import cn.bidaround.ytcore.data.BaseShare;
import cn.bidaround.ytcore.data.ShareData;
import cn.bidaround.ytcore.data.YtPlatform;
import cn.bidaround.ytcore.login.AuthListener;
import cn.bidaround.ytcore.login.AuthUserInfo;
import cn.bidaround.ytcore.util.Util;
/**
* 开心网分享类, 必须带有文字,图片随意
* @author youtui
* @since 2014/9/29
*
*/
public class KaixinShare extends BaseShare{
private YtPlatform platform = YtPlatform.PLATFORM_KAIXIN;
/** 开心网分享成功 */
private final int KAIXIN_SHARE_SUCCESS = 4;
/** 开心网分享失败 */
private final int KAIXIN_SHARE_FAIL = 5;
/** 开心网分享错误 */
private final int KAIXIN_SHARE_ERROR = 6;
/** 处理人人分享回调 */
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
/** 处理开心网分享成功 */
case KAIXIN_SHARE_SUCCESS:
// 开心网积分处理
YtShareListener.sharePoint(activity, platform.getChannleId(), !shareData.isAppShare());
if (listener != null)
listener.onSuccess(platform, (String) msg.obj);
break;
/** 处理开心网分享失败*/
case KAIXIN_SHARE_FAIL:
case KAIXIN_SHARE_ERROR:
if (listener != null)
listener.onError(platform, (String) msg.obj);
break;
}
};
};
/**
* 分享时的构造函数
*/
public KaixinShare(Activity activity, ShareData shareData, YtShareListener listener){
super(activity, shareData, listener);
}
/**
* 分享到开心网,首先验证授权,如果授权有效,则直接分享;否则,则先授权;
*/
public void shareToKaixin(){
doShare();
}
/**
* 授权会话是否有效,如果无效则授权
*/
public boolean isAuthValid(){
Kaixin kaixin = Kaixin.getInstance();
if (!kaixin.isSessionValid(activity)) {
return false;
}
return true;
}
/**
* 授权,第三方不能使用
*/
public void doAuth(){
Kaixin kaixin = Kaixin.getInstance();
String[] permissions = {"basic", "create_records"};
kaixin.authorize(activity, permissions, authListener);
}
/**
* 授权,第三方使用
* @param authListener
*/
public void doAuth(final Activity activity, final AuthListener authListener){
Kaixin kaixin = Kaixin.getInstance();
String[] permissions = {"basic", "create_records"};
kaixin.authorize(activity, permissions, authListener);
}
private AuthListener authListener = new AuthListener() {
@Override
public void onAuthSucess(AuthUserInfo userInfo) {
doShare();
}
@Override
public void onAuthFail() {
Util.dismissDialog();
}
@Override
public void onAuthCancel() {
Util.dismissDialog();
}
};
// 分享到开心网http请求
private void doShare(){
new Thread(new Runnable() {
@Override
public void run() {
try {
// 开心网分享类, 必须带有文字,图片随意
if(TextUtils.isEmpty(shareData.getText())){
mHandler.sendEmptyMessage(KAIXIN_SHARE_FAIL);
return;
}
Bundle bundle = new Bundle();
bundle.putString("content", getShareDataText());
Map<String, Object> photoes = new HashMap<String, Object>();
setImageBundle(photoes, bundle);
Kaixin kaixin = Kaixin.getInstance();
String result = kaixin.uploadContent(activity, "/records/add.json", bundle, photoes);
parseResult(result);
} catch (IOException e) {
e.printStackTrace();
mHandler.sendEmptyMessage(KAIXIN_SHARE_FAIL);
}finally{
Util.dismissDialog();
}
}
}).start();
}
private String getShareDataText(){
StringBuffer sb = new StringBuffer(shareData.getText());
if(shareData.getShareType() == ShareData.SHARETYPE_VIDEO)
sb.append(" " + shareData.getVideoUrl());
else if(shareData.getShareType() == ShareData.SHARETYPE_MUSIC)
sb.append(" " + shareData.getMusicUrl());
sb.append(" " + getTargetUrl());
return sb.toString();
}
private String getTargetUrl(){
if(!TextUtils.isEmpty(shareData.getTargetUrl()))
return shareData.getTargetUrl();
else
return "";
}
private void setImageBundle(Map<String, Object> photoes, Bundle bundle) throws FileNotFoundException{
// 分享SDcard中的图片或分享的网络图片已经被下载
if(!TextUtils.isEmpty(shareData.getImagePath())){
photoes.put("filename", new FileInputStream(new File(shareData.getImagePath())));
}
// 分享网络图片
else if(!TextUtils.isEmpty(shareData.getImageUrl())){
bundle.putString("picurl", shareData.getImageUrl());
}
}
// 解析请求开心网提供的接口的返回结果
private void parseResult(String result){
KaixinError kaixinError = cn.bidaround.ytcore.kaixin.KaixinUtil.parseRequestError(result);
if (kaixinError != null) {
Message msg = Message.obtain();
msg.what = KAIXIN_SHARE_ERROR;
if(kaixinError.getErrorCode() == 40031){
msg.obj = "上传照片出错";
}
else if(kaixinError.getErrorCode() == 40036){
msg.obj = "提交内容超过140个汉字";
}
else if(kaixinError.getErrorCode() == 40043){
msg.obj = "图片链接下载错误";
}
else{
msg.obj = "分享失败";
}
mHandler.sendMessage(msg);
} else {
long rid = getRecordID(result);
if (rid > 0) {
mHandler.sendEmptyMessage(KAIXIN_SHARE_SUCCESS);
} else {
mHandler.sendEmptyMessage(KAIXIN_SHARE_FAIL);
}
}
}
/**
* 人人分享成功会返回记录id
* @param jsonResult
* @return
* @throws JSONException
*/
private long getRecordID(String result) {
try {
JSONObject jsonObj = new JSONObject(result);
long rid = jsonObj.optInt("rid");
return rid;
} catch (Exception e) {
Log.i("", "kaixin share fail. the result do not have the rid key.");
}
return -1;
}
}