package ezy.sdk3rd.social.platforms.weibo;
import android.app.Activity;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import android.util.Log;
import com.sina.weibo.sdk.api.ImageObject;
import com.sina.weibo.sdk.api.TextObject;
import com.sina.weibo.sdk.api.WeiboMultiMessage;
import com.sina.weibo.sdk.api.share.BaseResponse;
import com.sina.weibo.sdk.api.share.IWeiboHandler;
import com.sina.weibo.sdk.api.share.IWeiboShareAPI;
import com.sina.weibo.sdk.api.share.SendMultiMessageToWeiboRequest;
import com.sina.weibo.sdk.api.share.WeiboShareSDK;
import com.sina.weibo.sdk.constant.WBConstants;
import java.util.Map;
import java.util.WeakHashMap;
import ezy.sdk3rd.social.sdk.IResult;
import ezy.sdk3rd.social.sdk.OnCallback;
import ezy.sdk3rd.social.sdk.Platform;
import ezy.sdk3rd.social.sdk.ResultCode;
import ezy.sdk3rd.social.share.IShareable;
import ezy.sdk3rd.social.share.ShareData;
import ezy.sdk3rd.social.share.image.resource.ImageResource;
import ezy.sdk3rd.social.share.media.MoImage;
/**
* Created by ezy on 17/3/18.
*/
public class WBShare implements IShareable, IWeiboHandler.Response {
public static final String TAG = "ezy.sdk3rd.weibo.share";
public static int REQUEST_CODE = 1998;
static Map<IResult, Boolean> services = new WeakHashMap<>();
Activity mActivity;
Platform mPlatform;
IWeiboShareAPI mApi;
OnCallback<String> mCallback;
WBShare(Activity activity, Platform platform) {
mActivity = activity;
mPlatform = platform;
mApi = WeiboShareSDK.createWeiboAPI(mActivity, platform.getAppId());
mApi.registerApp();
services.put(this, true);
}
TextObject toText(String text) {
TextObject object = new TextObject();
object.text = text;
return object;
}
ImageObject toImage(ImageResource resource) {
ImageObject object = new ImageObject();
object.imagePath = resource.toUri();
if (TextUtils.isEmpty(object.imagePath)) {
object.imageData = resource.toBytes();
}
return object;
}
@Override
public void share(@NonNull final ShareData data, @NonNull final OnCallback<String> callback) {
if (!mApi.isWeiboAppInstalled()) {
callback.onFailed(mActivity, ResultCode.RESULT_FAILED, "您未安装微博!");
return;
}
WeiboMultiMessage message = new WeiboMultiMessage();
if (data.hasText()) {
message.textObject = toText(data.hasUrl() ? (data.text + " " + data.url) : data.text);
}
if (data.media instanceof MoImage) {
message.imageObject = toImage(((MoImage) data.media).resource);
}
if (message.textObject == null && message.imageObject == null) {
// unsupported
callback.onFailed(mActivity, ResultCode.RESULT_FAILED, "不支持的分享类型");
return;
}
mCallback = callback;
mCallback.onStarted(mActivity);
SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest();
request.transaction = String.valueOf(System.currentTimeMillis());
request.multiMessage = message;
request.packageName = mActivity.getPackageName();
mApi.sendRequest(mActivity, request);
}
@Override
public void onResult(int requestCode, int resultCode, Intent data) {
Log.e(TAG, "==> requestCode = " + requestCode + ", " + data);
if (mApi != null && requestCode == REQUEST_CODE) {
mApi.handleWeiboResponse(data, this);
}
}
@Override
public void onResponse(BaseResponse response) {
if (response == null) {
switch (response.errCode) {
case WBConstants.ErrorCode.ERR_OK:
mCallback.onSucceed(mActivity, "");
break;
case WBConstants.ErrorCode.ERR_CANCEL:
mCallback.onFailed(mActivity, ResultCode.RESULT_CANCELLED, response.errMsg);
break;
case WBConstants.ErrorCode.ERR_FAIL:
mCallback.onFailed(mActivity, ResultCode.RESULT_FAILED, response.errMsg);
break;
}
mCallback.onCompleted(mActivity);
}
}
}