package com.socialize.loopy;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import com.sharethis.loopy.sdk.Item;
import com.sharethis.loopy.sdk.Loopy;
import com.sharethis.loopy.sdk.ShareCallback;
import com.sharethis.loopy.sdk.ShareDialogListener;
import com.sharethis.loopy.sdk.util.StringUtils;
import com.socialize.ShareUtils;
import com.socialize.api.action.ShareType;
import com.socialize.config.SocializeConfig;
import com.socialize.entity.DefaultPropagationInfo;
import com.socialize.entity.Entity;
import com.socialize.entity.PropagationInfo;
import com.socialize.networks.PostData;
import com.socialize.networks.SocialNetworkListener;
import com.socialize.share.SharePostDataFactory;
/**
* Provides integration to the loopy analytics service.
* @author Jason Polites
*/
public class LoopyService {
private SocializeConfig config;
private SharePostDataFactory sharePostDataFactory;
public boolean isLoopyEnabled() {
return config.isLoopyEnabled();
}
public SocializeConfig getConfig() {
return config;
}
// Set by DI
@SuppressWarnings("unused")
public void setConfig(SocializeConfig config) {
this.config = config;
}
// Set by DI
@SuppressWarnings("unused")
public void setSharePostDataFactory(SharePostDataFactory sharePostDataFactory) {
this.sharePostDataFactory = sharePostDataFactory;
}
public void onStop(Activity context) {
if(config.isLoopyEnabled()) {
Loopy.onStop(context);
}
}
public void onStart(Activity context) {
if(config.isLoopyEnabled()) {
Loopy.onStart(context);
}
}
public void onCreate(Activity context) {
if(config.isLoopyEnabled()) {
Loopy.onCreate(context, config.getProperty(SocializeConfig.SOCIALIZE_CONSUMER_KEY), config.getProperty(SocializeConfig.SOCIALIZE_CONSUMER_SECRET));
}
}
public void onDestroy(Activity context) {
if(config.isLoopyEnabled()) {
Loopy.onDestroy(context);
}
}
public PropagationInfo setShortlinks(PropagationInfo propagationInfo, Item item, Throwable error) {
PropagationInfo infoInUse = propagationInfo;
if(error == null && !StringUtils.isEmpty(item.getShortlink())) {
// Replace the entity url with the loopy shortlink
DefaultPropagationInfo dpi = new DefaultPropagationInfo();
dpi.setAppUrl(infoInUse.getAppUrl());
dpi.setEntityUrl(item.getShortlink());
infoInUse = dpi;
}
return infoInUse;
}
public void getTrackableUrl(Entity entity, ShareType shareType, String url, ShareCallback callback) {
Item item = toItem(entity, url);
Loopy.shareAndLink(item, shareType.getDisplayName(), callback);
}
public void showShareDialog(final Activity context, String title, final String text, final Entity entity, final PropagationInfo info, final SocialNetworkListener listener) {
Item item = toItem(entity, info.getEntityUrl());
Intent intent = new Intent(Intent.ACTION_SEND);
Loopy.showShareDialog(context, title, item, intent, new ShareDialogListener() {
boolean shareCancelled = false;
@Override
public void onLinkGenerated(Item item, Intent shareIntent, Throwable error) {
PropagationInfo loopyInfo = setShortlinks(info, item, error);
PostData postData = sharePostDataFactory.create(entity, loopyInfo, text, false, true);
if(listener != null) {
shareCancelled = listener.onBeforePost(context, null, postData);
}
String title = String.valueOf(postData.getPostValues().get(ShareUtils.EXTRA_TITLE));
String body = String.valueOf(postData.getPostValues().get(ShareUtils.EXTRA_TEXT));
String subject = String.valueOf(postData.getPostValues().get(ShareUtils.EXTRA_SUBJECT));
shareIntent.putExtra(Intent.EXTRA_TITLE, title);
shareIntent.putExtra(Intent.EXTRA_TEXT, body);
shareIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
}
@Override
public void onShow(DialogInterface dialog) {
if(listener != null) {
listener.onAfterPost(context, null, null);
}
super.onShow(dialog);
}
});
}
Item toItem(Entity entity, String url) {
Item item = new Item();
item.setUrl(url);
item.setTitle(entity.getDisplayName());
item.setType(entity.getType());
return item;
}
}