package com.gt.snssharinglibrary.service.impl; import java.io.IOException; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import com.gt.snssharinglibrary.Config; import com.gt.snssharinglibrary.Config.SHARING_TYPE; import com.gt.snssharinglibrary.Constants; import com.gt.snssharinglibrary.pojo.SNSShareDetail; import com.gt.snssharinglibrary.service.SNSService; import com.gt.snssharinglibrary.service.SNSServiceCallback; import com.gt.snssharinglibrary.service.SNSServiceImpl.SNS_LOGIN_TYPE; import com.gt.snssharinglibrary.service.weibo.AuthDialogListener; import com.gt.snssharinglibrary.util.StringUtil; import com.weibo.sdk.android.Oauth2AccessToken; import com.weibo.sdk.android.Weibo; import com.weibo.sdk.android.WeiboAuthListener; import com.weibo.sdk.android.WeiboDialogError; import com.weibo.sdk.android.WeiboException; import com.weibo.sdk.android.WeiboParameters; import com.weibo.sdk.android.api.StatusesAPI; import com.weibo.sdk.android.api.WeiboAPI; import com.weibo.sdk.android.keep.AccessTokenKeeper; import com.weibo.sdk.android.net.AsyncWeiboRunner; import com.weibo.sdk.android.net.RequestListener; import com.weibo.sdk.android.sso.SsoHandler; public class WeiboServiceImpl extends SNSServiceSuperImpl implements SNSService { private Weibo mWeibo; private String CONSUMER_KEY; private String REDIRECT_URL; private SsoHandler mSsoHandler; private Oauth2AccessToken accessToken; private SNSServiceCallback snsServiceCallback; public WeiboServiceImpl(Context context) { loadConfig(); mWeibo = Weibo.getInstance(CONSUMER_KEY, REDIRECT_URL); accessToken = AccessTokenKeeper.readAccessToken(context); } @Override public void loadConfig() { CONSUMER_KEY = Config.WEIBO_CONSUMER_KEY; REDIRECT_URL = Config.WEIBO_REDIRECT_URL; } @Override public void setSNSServiceCallback(SNSServiceCallback snsServiceCallback) { this.snsServiceCallback = snsServiceCallback; } @Override public boolean isLogged(Context context) { if (accessToken != null) { return accessToken.isSessionValid(); } return false; } @Override public void login(Activity activity, Handler handler, SNS_LOGIN_TYPE snsLoginType) { // mWeibo.authorize(activity, new AuthDialogListener(activity, this)); mSsoHandler = new SsoHandler(activity, mWeibo); mSsoHandler.authorize(new AuthDialogListener(activity, this)); } @Override public void logout(Activity activity, Handler handler) { AccessTokenKeeper.clear(activity); loggoutStatus(activity, true, null); } @Override public void logginStatus(Context context, boolean isSuccessLogin, Object errorObject) { if (snsServiceCallback != null) { snsServiceCallback.logginStatus(Constants.WEIBO_CODE, isSuccessLogin, errorObject); } } @Override public void loggoutStatus(Context context, boolean isSuccessLogout, Object errorObject) { if (snsServiceCallback != null) { snsServiceCallback.loggoutStatus(Constants.WEIBO_CODE, isSuccessLogout, errorObject); } } @Override public void post(Context context, SNSShareDetail snsShareDetail) { if (isLogged(context) && snsShareDetail != null) { String message = snsShareDetail.getDescription(); int limited = 140; if (message.length() > limited) { message = message.substring(0, limited); } // try // { // message = URLEncoder.encode(message, "UTF-8"); // } // catch (Exception e) // { // e.printStackTrace(); // } RequestListener requestListener = new RequestListener() { @Override public void onIOException(IOException arg0) { postStatus(false, arg0); } @Override public void onError(WeiboException arg0) { postStatus(false, arg0); } @Override public void onComplete(String arg0) { postStatus(true, null); } }; StatusesAPI statusesAPI = new StatusesAPI(accessToken); statusesAPI.update(message, "0.0", "0.0", requestListener); } } @Override public void postStatus(boolean isSuccessPost, Object errorObject) { if (snsServiceCallback != null) { snsServiceCallback.postStatus(Constants.WEIBO_CODE, isSuccessPost, errorObject); } } @Override public void getProfile(Context context) { // TODO Auto-generated method stub } @Override public void getProfileStatus(Context context, boolean isSuccessGetProfile, Object errorObject) { // TODO Auto-generated method stub } @Override public void onCreate(Activity activity, Bundle savedInstanceState) { // TODO Auto-generated method stub } @Override public void onStart() { // TODO Auto-generated method stub } @Override public void onStop() { // TODO Auto-generated method stub } @Override public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) { if (mSsoHandler != null) { mSsoHandler.authorizeCallBack(requestCode, resultCode, data); } } @Override public void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub } public void setAccessToken(Oauth2AccessToken accessToken) { this.accessToken = accessToken; } @Override public void getFriends(int photoWidth, int photoHeight) { // TODO Auto-generated method stub } @Override public void getFriendsStatus(boolean isSuccessGetFriends, Object friendsResultObject, Object errorObject) { // TODO Auto-generated method stub } @Override public void getFeeds() { RequestListener requestListener = new RequestListener() { @Override public void onIOException(IOException arg0) { getFeedsStatus(false, arg0, arg0); } @Override public void onError(WeiboException arg0) { getFeedsStatus(false, arg0, arg0); } @Override public void onComplete(String arg0) { getFeedsStatus(true, arg0, arg0); } }; StatusesAPI statusesAPI = new StatusesAPI(accessToken); int since_id = 0; int max_id = 0; int count = 200; int page = 1; boolean base_app = false; WeiboAPI.FEATURE feature = WeiboAPI.FEATURE.ORIGINAL; boolean trim_user = false; if (!StringUtil.isStringEmpty(Config.WEIBO_FEEDER_ID)) { try { statusesAPI.userTimeline(Long.parseLong(Config.WEIBO_FEEDER_ID), since_id, max_id, count, page, base_app, feature, trim_user, requestListener); } catch (Exception e) { statusesAPI.userTimeline(Config.WEIBO_FEEDER_ID, since_id, max_id, count, page, base_app, feature, trim_user, requestListener); } } else { getFeedsStatus(false, "", ""); } } @Override public void getFeedsStatus(boolean isSuccess, Object feedsResultObject, Object errorObject) { if (snsServiceCallback != null) { snsServiceCallback.getFeedsStatus(isSuccess, feedsResultObject, errorObject); } } @Override public void likeFeed(String feedId) { if (!StringUtil.isStringEmpty(feedId)) { RequestListener requestListener = new RequestListener() { @Override public void onIOException(IOException arg0) { likeFeedStatus(false, arg0, arg0); } @Override public void onError(WeiboException arg0) { likeFeedStatus(false, arg0, arg0); } @Override public void onComplete(String arg0) { likeFeedStatus(true, arg0, arg0); } }; StatusesAPI statusesAPI = new StatusesAPI(accessToken); statusesAPI.repost(Long.parseLong(feedId), "", WeiboAPI.COMMENTS_TYPE.NONE, requestListener); } else { likeFeedStatus(false, null, null); } } @Override public void likeFeedStatus(boolean isSuccess, Object feedsResultObject, Object errorObject) { if (snsServiceCallback != null) { snsServiceCallback.likeFeedStatus(isSuccess, feedsResultObject, errorObject); } } @Override public void openPageByWebView(Activity activity, String link) { if (activity != null && !StringUtil.isStringEmpty(link)) { Uri uri = Uri.parse(link); Intent intent = new Intent(Intent.ACTION_VIEW, uri); activity.startActivity(intent); } } }