package cn.bidaround.ytcore.sina;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.Toast;
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.AuthLogin;
import cn.bidaround.ytcore.login.AuthUserInfo;
import cn.bidaround.ytcore.util.Util;
import cn.bidaround.ytcore.util.YtLog;
import com.sina.weibo.sdk.exception.WeiboException;
import com.sina.weibo.sdk.net.AsyncWeiboRunner;
import com.sina.weibo.sdk.net.RequestListener;
import com.sina.weibo.sdk.net.WeiboParameters;
/**
* 新浪微博分享操作以及分享回调
*
* @author youtui
* @since 14/4/25
*/
public class SinaHttpShare extends BaseShare{
private YtPlatform platform = YtPlatform.PLATFORM_SINAWEIBO;
public SinaHttpShare(Activity activity, ShareData shareData, YtShareListener listener) {
super(activity, shareData, listener);
}
/**
* 发送共享到新浪微博
*/
public void shareToSina() {
if (shareData.getShareType() == ShareData.SHARETYPE_MUSIC || shareData.getShareType() == ShareData.SHARETYPE_VIDEO) {
Toast.makeText(activity, "新浪微博不支持音乐和视频分享", Toast.LENGTH_SHORT).show();
return;
}
if (SinaAccessTokenKeeper.readAccessToken(activity).isSessionValid())
doHTTPShare();
// 未授权的情况
else
sinaWebAuth();
}
/**
* 调用web方式进行新浪微博分享
*/
private void doHTTPShare() {
if (shareData.getShareType() == ShareData.SHARETYPE_IMAGE || shareData.getShareType() == ShareData.SHARETYPE_IMAGEANDTEXT) {
WeiboParameters params = new WeiboParameters();
params.put("access_token", SinaAccessTokenKeeper.readAccessToken(activity).getToken());
// 添加新浪微博分享文字文字
if (shareData != null) {
String text = shareData.getText();
if (shareData.getShareType() == ShareData.SHARETYPE_IMAGEANDTEXT) {
// 如果文字太长,截取部分,不然微博无法发送
if (text.length() > 110) {
text = text.substring(0, 109);
text += "...";
}
if (shareData.getTargetUrl() != null && !"".equals(shareData.getTargetUrl()) && !"null".equals(shareData.getTargetUrl())) {
text += shareData.getTargetUrl();
}
params.put("status", text);
} else if (shareData.getShareType() == ShareData.SHARETYPE_IMAGE) {
params.put("status", "图片分享");
}
}
// 添加新浪微博分享图片
if (shareData != null && shareData.getImagePath() != null) {
Bitmap bitmap = BitmapFactory.decodeFile(shareData.getImagePath());
params.put("pic", bitmap);
}
YtLog.d("SinaNoKeyShare", "statuses/upload shareToSina");
// 发送http请求进行分享
AsyncWeiboRunner.requestAsync("https://upload.api.weibo.com/2/statuses/upload.json", params, "POST", new RequestListener() {
@Override
public void onWeiboException(WeiboException e) {
Util.dismissDialog();
if (listener != null)
listener.onError(platform, e.getMessage());
}
@Override
public void onComplete(String result) {
Util.dismissDialog();
YtShareListener.sharePoint(activity, YtPlatform.PLATFORM_SINAWEIBO.getChannleId(), !shareData.isAppShare());
if (listener != null)
listener.onSuccess(platform, result);
}
});
} else if (shareData.getShareType() == ShareData.SHARETYPE_TEXT) {
WeiboParameters params = new WeiboParameters();
params.put("access_token", SinaAccessTokenKeeper.readAccessToken(activity).getToken());
// 如果文字太长,截取部分,不然微博无法发送
String text = shareData.getText();
if (text.length() > 110) {
text = text.substring(0, 109);
text += "...";
}
if (shareData.getTargetUrl() != null && !"".equals(shareData.getTargetUrl()) && !"null".equals(shareData.getTargetUrl())) {
text += shareData.getTargetUrl();
}
params.put("status", text);
// 发送http请求进行分享
AsyncWeiboRunner.requestAsync("https://api.weibo.com/2/statuses/update.json", params, "POST", new RequestListener() {
@Override
public void onWeiboException(WeiboException e) {
Util.dismissDialog();
if (listener != null)
listener.onError(platform, e.getMessage());
}
@Override
public void onComplete(String result) {
Util.dismissDialog();
YtShareListener.sharePoint(activity, YtPlatform.PLATFORM_SINAWEIBO.getChannleId(), !shareData.isAppShare());
if (listener != null)
listener.onSuccess(platform, result);
}
});
}
}
/**
* 采用网页形式对新浪微博进行授权
*/
private void sinaWebAuth() {
AuthLogin auth = new AuthLogin();
AuthListener listener = new AuthListener() {
@Override
public void onAuthSucess(AuthUserInfo userInfo) {
doHTTPShare();
}
@Override
public void onAuthFail() {
Util.dismissDialog();
}
@Override
public void onAuthCancel() {
Util.dismissDialog();
}
};
auth.sinaAuth(activity, listener);
}
}