package com.gt.snssharinglibrary.service.impl;
import java.io.IOException;
import java.net.MalformedURLException;
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.Constants;
import com.gt.snssharinglibrary.StringMapping;
import com.gt.snssharinglibrary.asynctask.TwitterPostTweetAsyncTask;
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.twitter.LoginDialogListener;
import com.gt.snssharinglibrary.service.twitter.TwitterSessionStore;
import com.gt.snssharinglibrary.util.LogController;
import com.gt.snssharinglibrary.util.StringUtil;
import com.sugree.twitter.DialogError;
import com.sugree.twitter.Twitter;
import com.sugree.twitter.TwitterError;
import com.sugree.twitter.Util;
public class TwitterServiceImpl extends SNSServiceSuperImpl implements
SNSService {
private Twitter twitter;
private String CONSUMER_KEY;
private String CONSUMER_SECRET;
private SNSServiceCallback snsServiceCallback;
private boolean duringShare = false;
private int twitterDialogCloseBtnResId = 0;
public TwitterServiceImpl(Context context)
{
loadConfig();
this.twitter = new Twitter(context.getResources(), twitterDialogCloseBtnResId);
TwitterSessionStore.restore(twitter, context);
}
@Override
public void loadConfig() {
CONSUMER_KEY = Config.TWITTER_CONSUMER_KEY;
CONSUMER_SECRET = Config.TWITTER_CONSUMER_SECRET;
twitterDialogCloseBtnResId = Config.TWITTER_DIALOG_CLOSE_BTN_RESOURCES_ID;
}
@Override
public void setSNSServiceCallback(SNSServiceCallback snsServiceCallback) {
this.snsServiceCallback = snsServiceCallback;
}
@Override
public boolean isLogged(Context context) {
if (twitter != null)
{
return this.twitter.isSessionValid();
}
return false;
}
@Override
public void login(Activity activity, Handler handler,
SNS_LOGIN_TYPE snsLoginType) {
if (!this.isLogged(activity))
{
LoginDialogListener loginDialogListener = new LoginDialogListener(activity, this);
this.twitter.authorize(activity, handler, this.CONSUMER_KEY, this.CONSUMER_SECRET, loginDialogListener);
}
else
{
this.logginStatus(activity, true, null);
}
}
@Override
public void logout(Activity activity, Handler handler) {
if (this.twitter != null)
{
try
{
this.twitter.logout(activity);
loggoutStatus(activity, true, null);
return;
}
catch (MalformedURLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
loggoutStatus(activity, false, null);
}
}
@Override
public void logginStatus(Context context, boolean isSuccessLogin,
Object errorObject) {
if (errorObject != null)
{
if (errorObject instanceof String)
{
if (!((String) errorObject).equals("Action Cancel"))
{
super.showMessageDialog((Activity) context, StringMapping.TWITTER_LOGIN_DIALOG_TITLE_LABLE, StringMapping.TWITTER_LOGIN_DIALOG_FAILED_MESSAGE);
LogController.log("Twitter logginStatus : " + isSuccessLogin + " " + (String) errorObject);
}
}
else if (errorObject instanceof TwitterError)
{
LogController.log("no unknown error");
super.showMessageDialog((Activity) context, StringMapping.TWITTER_LOGIN_DIALOG_TITLE_LABLE, ((TwitterError) errorObject).getMessage());
}
else if (errorObject instanceof DialogError)
{
DialogError dialogError = (DialogError) errorObject;
LogController.log("no unknown error");
super.showMessageDialog((Activity) context, StringMapping.TWITTER_LOGIN_DIALOG_TITLE_LABLE, "Network disconnected");
}
else
{
LogController.log("unknown error" + errorObject);
super.showMessageDialog((Activity) context, StringMapping.TWITTER_LOGIN_DIALOG_TITLE_LABLE, "unknow error.");
}
}
if (isSuccessLogin && twitter != null)
{
TwitterSessionStore.save(twitter, context);
LogController.log("Twitter logginStatus : " + twitter.getAccessToken());
LogController.log("Twitter logginStatus : " + twitter.getSecretToken());
}
if (this.snsServiceCallback != null)
{
this.snsServiceCallback.logginStatus(Constants.TWITTER_CODE, isSuccessLogin, errorObject);
}
}
@Override
public void loggoutStatus(Context context, boolean isSuccessLogout,
Object errorObject) {
if (isSuccessLogout)
{
if (twitter != null)
{
twitter.setAccessToken(null);
twitter.setSecretToken(null);
}
TwitterSessionStore.clear(context);
Util.clearCookies(context);
}
if (this.snsServiceCallback != null)
{
this.snsServiceCallback.loggoutStatus(Constants.TWITTER_CODE, isSuccessLogout, errorObject);
}
}
@Override
public void post(Context context, final SNSShareDetail snsShareDetail) {
if (!this.duringShare && snsShareDetail != null && twitter != null)
{
this.duringShare = true;
TwitterPostTweetAsyncTask twitterPostTweetAsyncTask = new TwitterPostTweetAsyncTask(context, this, twitter, snsShareDetail);
twitterPostTweetAsyncTask.execute((Void) null);
}
}
@Override
public void postStatus(boolean isSuccessPost, Object errorObject) {
if (snsServiceCallback != null)
{
snsServiceCallback.postStatus(Constants.TWITTER_CODE, isSuccessPost, errorObject);
}
this.duringShare = false;
}
@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) {
// TODO Auto-generated method stub
}
@Override
public void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
}
@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() {
// TODO Auto-generated method stub
}
@Override
public void getFeedsStatus(boolean isSuccess, Object FeedsResultObject,
Object errorObject) {
// TODO Auto-generated method stub
}
@Override
public void likeFeed(String feedId) {
// TODO Auto-generated method stub
}
@Override
public void likeFeedStatus(boolean isSuccess, Object feedsResultObject,
Object errorObject) {
// TODO Auto-generated method stub
}
@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);
}
}
}