package com.android.ddj.fzbmzxc.common;
import com.android.ddj.fzbmzxc.R;
import com.android.ddj.fzbmzxc.util.StringUtils;
import com.weibo.net.AccessToken;
import com.weibo.net.DialogError;
import com.weibo.net.Weibo;
import com.weibo.net.WeiboDialogListener;
import com.weibo.net.WeiboException;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;
/**
* 新浪微博帮助类
* @author liux (http://my.oschina.net/liux)
* @version 1.0
* @created 2012-3-22
*/
public class SinaWeiboHelper {
private static final String CONSUMER_KEY = "3616966952";
private static final String CONSUMER_SECRET = "fd81f6d31427b467f49226e48a741e28";
private static final String REDIRECT_URL = "http://www.oschina.net";
public static final int OAUTH_ERROR = 0;
public static final int OAUTH_RequestToken_ACCESS = 1;
public static final int OAUTH_RequestToken_ERROR = 2;
public static final int OAUTH_AccessToken_ACCESS = 3;
public static final int OAUTH_AccessToken_ERROR = 4;
public static final int OAUTH_AccessToken_SXPIRED = 5;
public static final int Weibo_Message_CHECKED = 6;
public static final int Weibo_Message_NULL = 7;
public static final int Weibo_Message_LONG = 8;
public static final int Weibo_Share_Success = 9;
public static final int Weibo_Share_Error = 10;
public static final int Weibo_Share_Repeat = 11;
private static Weibo weibo = null;
private static AccessToken accessToken = null;
private static String shareImage = null;
private static String shareMessage = null;
private static Activity context = null;
public static ProgressDialog progressDialog = null;
public static void setAccessToken(String accessKey,String accessSecret,long expiresIn){
accessToken = new AccessToken(accessKey, accessSecret);
accessToken.setExpiresIn(expiresIn);
}
public static Handler handler = new Handler(){
public void handleMessage(Message msg) {
if(progressDialog != null)
progressDialog.dismiss();
switch (msg.what)
{
case OAUTH_ERROR:
Toast.makeText(context, context.getString(R.string.OAUTH_ERROR), Toast.LENGTH_SHORT).show();
break;
case OAUTH_RequestToken_ACCESS:
Toast.makeText(context, context.getString(R.string.OAUTH_RequestToken_ACCESS), Toast.LENGTH_SHORT).show();
break;
case OAUTH_RequestToken_ERROR:
Toast.makeText(context, context.getString(R.string.OAUTH_RequestToken_ERROR), Toast.LENGTH_SHORT).show();
break;
case OAUTH_AccessToken_ACCESS:
Toast.makeText(context, context.getString(R.string.OAUTH_AccessToken_ACCESS), Toast.LENGTH_SHORT).show();
break;
case OAUTH_AccessToken_ERROR:
Toast.makeText(context, context.getString(R.string.OAUTH_AccessToken_ERROR), Toast.LENGTH_SHORT).show();
authorize(context, shareMessage, shareImage);//跳转到授权页面
break;
case OAUTH_AccessToken_SXPIRED:
Toast.makeText(context, context.getString(R.string.OAUTH_AccessToken_SXPIRED), Toast.LENGTH_SHORT).show();
authorize(context, shareMessage, shareImage);//跳转到授权页面
break;
case Weibo_Message_NULL:
Toast.makeText(context, context.getString(R.string.Weibo_Message_NULL), Toast.LENGTH_SHORT).show();
break;
case Weibo_Message_LONG:
Toast.makeText(context, context.getString(R.string.Weibo_Message_LONG), Toast.LENGTH_SHORT ).show();
break;
case Weibo_Share_Success:
Toast.makeText(context, context.getString(R.string.Weibo_Share_Success), Toast.LENGTH_SHORT).show();
break;
case Weibo_Share_Error:
Toast.makeText(context, context.getString(R.string.Weibo_Share_Error), Toast.LENGTH_SHORT).show();
break;
case Weibo_Share_Repeat:
Toast.makeText(context, context.getString(R.string.Weibo_Share_Repeat), Toast.LENGTH_SHORT).show();
break;
}
};
};
/**
* 判断weibo是否为null
* @return
*/
public static boolean isWeiboNull()
{
if(weibo == null)
return true;
else
return false;
}
/**
* 初始化weibo
*/
public static void initWeibo()
{
weibo = Weibo.getInstance();
weibo.setupConsumerConfig(CONSUMER_KEY, CONSUMER_SECRET);
weibo.setRedirectUrl(REDIRECT_URL);
}
/**
* 微博授权 并 分享(文本)
*/
public static void authorize(Activity cont, String shareMsg)
{
authorize(cont, shareMsg, null);
}
/**
* 微博授权 并 分享(文本、图片)
*/
public static void authorize(final Activity cont,final String shareMsg,final String shareImg)
{
context = cont;
if(isWeiboNull())
{
initWeibo();
}
weibo.authorize(cont, new WeiboDialogListener() {
@Override
public void onComplete(Bundle values) {
try
{
String token = values.getString(Weibo.TOKEN);
String expires_in = values.getString(Weibo.EXPIRES);
accessToken = new AccessToken(token, CONSUMER_SECRET);
accessToken.setExpiresIn(expires_in);
//保存AccessToken
//AppConfig.getAppConfig(cont).setAccessInfo(accessToken.getToken(), accessToken.getSecret(), accessToken.getExpiresIn());
//微博分享
shareMessage(cont, shareMsg, shareImg);
}
catch (Exception e)
{
e.printStackTrace();
}
}
@Override
public void onError(DialogError e) {
Toast.makeText(context,"授权失败 : " + e.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onCancel() {
//Toast.makeText(context, "取消授权", Toast.LENGTH_LONG).show();
}
@Override
public void onWeiboException(WeiboException e) {
Toast.makeText(context,"授权异常 : " + e.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
/**
* 数据合法性判断
* @return
*/
public static int messageChecked(String shareMsg)
{
int ret = Weibo_Message_CHECKED;
if( StringUtils.isEmpty(shareMsg) )
{
ret = Weibo_Message_NULL;
}
else if( shareMsg.length() > 140 )
{
ret = Weibo_Message_LONG;
}
return ret;
}
/**
* 微博分享
* 分享内容shareMessage & 分享图片shareImage & 当前Activity
* Toast会提示分享成功或失败
*/
public static void shareMessage(Activity cont, String shareMsg, String shareImg)
{
context = cont;
shareMessage = shareMsg;
shareImage = shareImg;
if(isWeiboNull())
{
initWeibo();
}
Message msg = new Message();
msg.what = Weibo_Share_Error;
//判断是否授权
if(accessToken == null)
{
msg.what = OAUTH_AccessToken_ERROR;
handler.sendMessage(msg);
return;
}
//判断token是否过期
if(accessToken.getExpiresIn() < System.currentTimeMillis())
{
msg.what = OAUTH_AccessToken_SXPIRED;
handler.sendMessage(msg);
return;
}
//检查文本是否超出限制
int checkCode = messageChecked(shareMsg);
if(checkCode != Weibo_Message_CHECKED)
{
msg.what = checkCode;
handler.sendMessage(msg);
return;
}
try
{
if( StringUtils.isEmpty(shareImage) )
{
weibo.shareToweibo(cont, accessToken.getToken(), accessToken.getSecret(), shareMessage);
}
else
{
weibo.shareToweiboWithFile(cont, accessToken.getToken(), accessToken.getSecret(), shareMessage, shareImage);
}
msg.what = Weibo_Share_Success;
}
catch(WeiboException e)
{
int statusCode = e.getStatusCode();
if(statusCode == 20019 || e.getMessage().contains("repeat"))
msg.what = Weibo_Share_Repeat;
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
handler.sendMessage(msg);
}
/**
* 微博分享
* 分享内容shareMessage & 当前Activity
* Toast会提示分享成功或失败
*/
public static void shareMessage(Activity cont, String shareMsg)
{
shareMessage(cont, shareMsg, null);
}
}