package com.gt.snssharinglibrary.service.impl; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import com.facebook_2_0.android.AsyncFacebookRunner; import com.facebook_2_0.android.Facebook; import com.facebook_2_0.android.Util; import com.gt.snssharinglibrary.Config; import com.gt.snssharinglibrary.Constants; import com.gt.snssharinglibrary.StringMapping; import com.gt.snssharinglibrary.asynctask.FacebookGetUserProfileAsyncTask; import com.gt.snssharinglibrary.pojo.CusProgressDialog; 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.facebook_2_0.FacebookSessionStore; import com.gt.snssharinglibrary.service.facebook_2_0.LoginDialogListener; import com.gt.snssharinglibrary.service.facebook_2_0.LogoutRequestListener; import com.gt.snssharinglibrary.service.facebook_2_0.PostFeedListener; import com.gt.snssharinglibrary.service.facebook_2_0.SampleAuthListener; import com.gt.snssharinglibrary.service.facebook_2_0.SessionEvents; import com.gt.snssharinglibrary.util.StringUtil; public class FacebookService20Impl extends SNSServiceSuperImpl implements SNSService { private Facebook facebook; private AsyncFacebookRunner asyncFacebookRunner; private SampleAuthListener sampleAuthListener; private LoginDialogListener loginDialogListener; private String appId; private String[] permissions; private int facebookDialogCloseBtnResId = 0; private CusProgressDialog logoutProgressDialog; // Facebook Login Callback Activity RequestCode public static final int FACEBOOK_SERVICE_LOGIN_CALLBACK_REQUEST_CODE = 3387; public FacebookService20Impl(Resources resources) { loadConfig(); this.facebook = new Facebook(appId, resources, facebookDialogCloseBtnResId); this.asyncFacebookRunner = new AsyncFacebookRunner(facebook); } @Override public void loadConfig() { this.appId = Config.FACEBOOK_2_0_APP_ID; this.permissions = Config.FACEBOOK_2_0_PERMISSIONS; this.facebookDialogCloseBtnResId = Config.FACEBOOK_2_0_DIALOG_CLOSE_BTN_RESOURCES_ID; } @Override public void setSNSServiceCallback(SNSServiceCallback snsServiceCallback) { this.snsServiceCallback = snsServiceCallback; } @Override public boolean isLogged(Context context) { return FacebookSessionStore.restore(this.facebook, context); } @Override public void login(Activity activity, Handler handler, SNS_LOGIN_TYPE snsLoginType) { if (!this.isLogged(activity)) { if (sampleAuthListener != null) { sampleAuthListener.removeSNSservice(); SessionEvents.removeAuthListener(sampleAuthListener); } sampleAuthListener = new SampleAuthListener(activity, this); SessionEvents.addAuthListener(sampleAuthListener); if (loginDialogListener == null) { loginDialogListener = new LoginDialogListener(); } this.facebook.authorize(activity, this.permissions, FACEBOOK_SERVICE_LOGIN_CALLBACK_REQUEST_CODE, loginDialogListener); } else { this.logginStatus(activity, true, null); } } @Override public void logout(Activity activity, Handler handler) { this.logoutProgressDialog = new CusProgressDialog(activity); this.logoutProgressDialog.setMessage(StringMapping.FACEBOOK_LOGOUT_LOADING_MESSAGE); this.logoutProgressDialog.show(); SessionEvents.onLogoutBegin(); asyncFacebookRunner = new AsyncFacebookRunner(facebook); asyncFacebookRunner.logout(activity, new LogoutRequestListener(activity, this, handler)); } @Override public void logginStatus(Context context, boolean isSuccessLogin, Object errorObject) { if (isSuccessLogin) { FacebookSessionStore.saveUserLoggedToFacebook(context, true); } if (isSuccessLogin) { FacebookSessionStore.save(facebook, context); getProfile(context); } else { if (this.snsServiceCallback != null) { this.snsServiceCallback.logginStatus(Constants.FACEBOOK_CODE, isSuccessLogin, errorObject); } } } @Override public void loggoutStatus(Context context, boolean isSuccessLogout, Object errorObject) { if (logoutProgressDialog != null) { logoutProgressDialog.dismiss(); } if (isSuccessLogout) { Util.clearCookies(context); FacebookSessionStore.clear(context); if (facebook != null) { facebook.setAccessToken(null); } } if (this.snsServiceCallback != null) { this.snsServiceCallback.logginStatus(Constants.FACEBOOK_CODE, isSuccessLogout, errorObject); } } @Override public void post(Context context, SNSShareDetail snsShareDetail) { if (snsShareDetail != null) { Bundle bundle = new Bundle(); if (snsShareDetail.getTitle() != null) { bundle.putString("name", snsShareDetail.getTitle()); } if (snsShareDetail.getCaption() != null) { bundle.putString("caption", snsShareDetail.getCaption()); } if (snsShareDetail.getDescription() != null) { bundle.putString("description", snsShareDetail.getDescription()); } if (snsShareDetail.getPictureLink() != null) { bundle.putString("picture", snsShareDetail.getPictureLink()); } if (snsShareDetail.getLink() != null) { bundle.putString("link", snsShareDetail.getLink()); } if (snsShareDetail.getFriendId() != null) { bundle.putString("to", snsShareDetail.getFriendId()); } facebook.dialog(context, "feed", bundle, new PostFeedListener(this)); } } @Override public void postStatus(boolean isSuccessPost, Object errorObject) { if (this.snsServiceCallback != null) { this.snsServiceCallback.postStatus(Constants.FACEBOOK_CODE, isSuccessPost, errorObject); } } @Override public void getProfile(Context context) { FacebookGetUserProfileAsyncTask facebookGetUserProfileAsyncTask = new FacebookGetUserProfileAsyncTask(context, this, facebook); facebookGetUserProfileAsyncTask.execute((Void) null); } @Override public void getProfileStatus(Context context, boolean isSuccessGetProfile, Object errorObject) { if (!isSuccessGetProfile) { // clear all Facebook Logged Record Util.clearCookies(context); FacebookSessionStore.clear(context); if (facebook != null) { facebook.setAccessToken(null); } } if (this.snsServiceCallback != null) { this.snsServiceCallback.getProfileStatus(Constants.FACEBOOK_CODE, isSuccessGetProfile, errorObject); } } @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 (requestCode == FacebookService20Impl.FACEBOOK_SERVICE_LOGIN_CALLBACK_REQUEST_CODE) { if (facebook != null) { facebook.authorizeCallback(requestCode, resultCode, data); } } } @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); } } }