package com.sromku.simple.fb.actions;
import android.net.Uri;
import android.text.TextUtils;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.share.Sharer;
import com.facebook.share.model.ShareLinkContent;
import com.facebook.share.widget.ShareDialog;
import com.sromku.simple.fb.SessionManager;
import com.sromku.simple.fb.entities.Feed;
import com.sromku.simple.fb.listeners.OnPublishListener;
public class PublishFeedDialogAction extends AbstractAction {
private OnPublishListener mOnPublishListener;
private Feed mFeed;
public PublishFeedDialogAction(SessionManager sessionManager) {
super(sessionManager);
}
public void setFeed(Feed feed) {
mFeed = feed;
}
public void setOnPublishListener(OnPublishListener onPublishListener) {
mOnPublishListener = onPublishListener;
}
@Override
protected void executeImpl() {
// build link content
ShareLinkContent.Builder shareLinkContent = new ShareLinkContent.Builder()
.setContentTitle(mFeed.getBundle().getString(Feed.Builder.Parameters.NAME))
.setContentDescription(mFeed.getBundle().getString(Feed.Builder.Parameters.DESCRIPTION));
// set link if possible
String link = mFeed.getBundle().getString(Feed.Builder.Parameters.LINK);
if (!TextUtils.isEmpty(link)) {
shareLinkContent.setContentUrl(Uri.parse(link));
}
ShareLinkContent linkContent = shareLinkContent.build();
// check if we can share
ShareDialog shareDialog = new ShareDialog(sessionManager.getActivity());
if (shareDialog.canShow(linkContent)) {
shareDialog.registerCallback(sessionManager.getCallbackManager(), new FacebookCallback<Sharer.Result>() {
@Override
public void onSuccess(Sharer.Result result) {
String postId = result.getPostId();
if (mOnPublishListener != null) {
mOnPublishListener.onComplete(postId);
}
}
@Override
public void onCancel() {
if (mOnPublishListener != null) {
mOnPublishListener.onFail("Canceled by user");
}
}
@Override
public void onError(FacebookException e) {
if (mOnPublishListener != null) {
mOnPublishListener.onFail(e.getMessage());
}
}
});
shareDialog.show(linkContent);
}
}
}