package com.androidsocialnetworks.lib;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.util.Log;
import com.androidsocialnetworks.lib.impl.FacebookSocialNetwork;
import com.androidsocialnetworks.lib.impl.GooglePlusSocialNetwork;
import com.androidsocialnetworks.lib.impl.LinkedInSocialNetwork;
import com.androidsocialnetworks.lib.impl.TwitterSocialNetwork;
import com.facebook.internal.Utility;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SocialNetworkManager extends Fragment {
private static final String TAG = SocialNetworkManager.class.getSimpleName();
private static final String PARAM_TWITTER_KEY = "SocialNetworkManager.PARAM_TWITTER_KEY";
private static final String PARAM_TWITTER_SECRET = "SocialNetworkManager.PARAM_TWITTER_SECRET";
private static final String PARAM_LINKEDIN_KEY = "SocialNetworkManager.PARAM_LINKEDIN_KEY";
private static final String PARAM_LINKEDIN_SECRET = "SocialNetworkManager.PARAM_LINKEDIN_SECRET";
private static final String PARAM_LINKEDIN_PERMISSIONS = "SocialNetworkManager.PARAM_LINKEDIN_PERMISSIONS";
private static final String PARAM_FACEBOOK = "SocialNetworkManager.PARAM_FACEBOOK";
private static final String PARAM_GOOGLE_PLUS = "SocialNetworkManager.PARAM_GOOGLE_PLUS";
private Map<Integer, SocialNetwork> mSocialNetworksMap = new HashMap<Integer, SocialNetwork>();
private OnInitializationCompleteListener mOnInitializationCompleteListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "SocialNetworkManager.onCreate");
setRetainInstance(true);
Bundle args = getArguments();
final String paramTwitterKey = args.getString(PARAM_TWITTER_KEY);
final String paramTwitterSecret = args.getString(PARAM_TWITTER_SECRET);
final String paramLinkedInKey = args.getString(PARAM_LINKEDIN_KEY);
final String paramLinkedInSecret = args.getString(PARAM_LINKEDIN_SECRET);
final String paramLinkedInPermissions = args.getString(PARAM_LINKEDIN_PERMISSIONS);
final boolean paramFacebook = args.getBoolean(PARAM_FACEBOOK, false);
final boolean paramGooglePlus = args.getBoolean(PARAM_GOOGLE_PLUS, false);
if (!TextUtils.isEmpty(paramTwitterKey) || !TextUtils.isEmpty(paramTwitterKey)) {
mSocialNetworksMap.put(TwitterSocialNetwork.ID,
new TwitterSocialNetwork(this, paramTwitterKey, paramTwitterSecret));
}
if (!TextUtils.isEmpty(paramLinkedInKey) || !TextUtils.isEmpty(paramLinkedInSecret)) {
mSocialNetworksMap.put(LinkedInSocialNetwork.ID,
new LinkedInSocialNetwork(this, paramLinkedInKey, paramLinkedInSecret, paramLinkedInPermissions));
}
if (paramFacebook) {
mSocialNetworksMap.put(FacebookSocialNetwork.ID, new FacebookSocialNetwork(this));
}
if (paramGooglePlus) {
mSocialNetworksMap.put(GooglePlusSocialNetwork.ID, new GooglePlusSocialNetwork(this));
}
for (SocialNetwork socialNetwork : mSocialNetworksMap.values()) {
socialNetwork.onCreate(savedInstanceState);
}
}
@Override
public void onStart() {
super.onStart();
Log.d(TAG, "SocialNetworkManager.onStart");
for (SocialNetwork socialNetwork : mSocialNetworksMap.values()) {
socialNetwork.onStart();
}
}
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "SocialNetworkManager.onResume");
for (SocialNetwork socialNetwork : mSocialNetworksMap.values()) {
socialNetwork.onResume();
}
if (mOnInitializationCompleteListener != null) {
Log.d(TAG, "SocialNetworkManager.onResume: mOnInitializationCompleteListener != null");
mOnInitializationCompleteListener.onSocialNetworkManagerInitialized();
}
}
@Override
public void onPause() {
super.onPause();
Log.d(TAG, "SocialNetworkManager.onPause");
for (SocialNetwork socialNetwork : mSocialNetworksMap.values()) {
socialNetwork.onPause();
}
}
@Override
public void onStop() {
super.onStop();
Log.d(TAG, "SocialNetworkManager.onStop");
for (SocialNetwork socialNetwork : mSocialNetworksMap.values()) {
socialNetwork.onStop();
}
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "SocialNetworkManager.onDestroy");
for (SocialNetwork socialNetwork : mSocialNetworksMap.values()) {
socialNetwork.onDestroy();
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.d(TAG, "SocialNetworkManager.onSaveInstanceState");
for (SocialNetwork socialNetwork : mSocialNetworksMap.values()) {
socialNetwork.onSaveInstanceState(outState);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "SocialNetworkManager.onActivityResult: " + requestCode + " : " + resultCode);
for (SocialNetwork socialNetwork : mSocialNetworksMap.values()) {
socialNetwork.onActivityResult(requestCode, resultCode, data);
}
}
public TwitterSocialNetwork getTwitterSocialNetwork() throws SocialNetworkException {
if (!mSocialNetworksMap.containsKey(TwitterSocialNetwork.ID)) {
throw new SocialNetworkException("Twitter wasn't initialized...");
}
return (TwitterSocialNetwork) mSocialNetworksMap.get(TwitterSocialNetwork.ID);
}
public LinkedInSocialNetwork getLinkedInSocialNetwork() throws SocialNetworkException {
if (!mSocialNetworksMap.containsKey(LinkedInSocialNetwork.ID)) {
throw new SocialNetworkException("LinkedIn wasn't initialized...");
}
return (LinkedInSocialNetwork) mSocialNetworksMap.get(LinkedInSocialNetwork.ID);
}
public FacebookSocialNetwork getFacebookSocialNetwork() throws SocialNetworkException {
if (!mSocialNetworksMap.containsKey(FacebookSocialNetwork.ID)) {
throw new IllegalStateException("Facebook wasn't initialized...");
}
return (FacebookSocialNetwork) mSocialNetworksMap.get(FacebookSocialNetwork.ID);
}
public GooglePlusSocialNetwork getGooglePlusSocialNetwork() {
if (!mSocialNetworksMap.containsKey(GooglePlusSocialNetwork.ID)) {
throw new IllegalStateException("Google+ wasn't initialized...");
}
return (GooglePlusSocialNetwork) mSocialNetworksMap.get(GooglePlusSocialNetwork.ID);
}
public SocialNetwork getSocialNetwork(int id) throws SocialNetworkException {
if (!mSocialNetworksMap.containsKey(id)) {
throw new SocialNetworkException("Social network with id = " + id + " not found");
}
return mSocialNetworksMap.get(id);
}
public void addSocialNetwork(SocialNetwork socialNetwork) {
if (mSocialNetworksMap.get(socialNetwork.getID()) != null) {
throw new SocialNetworkException("Social network with id = " + socialNetwork.getID() + " already exists");
}
mSocialNetworksMap.put(socialNetwork.getID(), socialNetwork);
}
public List<SocialNetwork> getInitializedSocialNetworks() {
return Collections.unmodifiableList(new ArrayList<SocialNetwork>(mSocialNetworksMap.values()));
}
public void setOnInitializationCompleteListener(OnInitializationCompleteListener onInitializationCompleteListener) {
mOnInitializationCompleteListener = onInitializationCompleteListener;
}
public static interface OnInitializationCompleteListener {
public void onSocialNetworkManagerInitialized();
}
public static class Builder {
private String twitterConsumerKey, twitterConsumerSecret;
private String linkedInConsumerKey, linkedInConsumerSecret, linkedInPermissions;
private boolean facebook;
private boolean googlePlus;
private Context mContext;
private Builder(Context context) {
mContext = context;
}
public static Builder from(Context context) {
return new Builder(context);
}
public Builder twitter(String consumerKey, String consumerSecret) {
twitterConsumerKey = consumerKey;
twitterConsumerSecret = consumerSecret;
return this;
}
public Builder linkedIn(String consumerKey, String consumerSecret, String permissions) {
linkedInConsumerKey = consumerKey;
linkedInConsumerSecret = consumerSecret;
linkedInPermissions = permissions;
return this;
}
// https://developers.facebook.com/docs/android/getting-started/
public Builder facebook() {
String applicationID = Utility.getMetadataApplicationId(mContext);
if (applicationID == null) {
throw new IllegalStateException("applicationID can't be null\n" +
"Please check https://developers.facebook.com/docs/android/getting-started/");
}
facebook = true;
return this;
}
public Builder googlePlus() {
googlePlus = true;
return this;
}
public SocialNetworkManager build() {
Bundle args = new Bundle();
if (!TextUtils.isEmpty(twitterConsumerKey) && !TextUtils.isEmpty(twitterConsumerSecret)) {
args.putString(PARAM_TWITTER_KEY, twitterConsumerKey);
args.putString(PARAM_TWITTER_SECRET, twitterConsumerSecret);
}
if (!TextUtils.isEmpty(linkedInConsumerKey) && !TextUtils.isEmpty(linkedInConsumerSecret)
&& !TextUtils.isEmpty(linkedInPermissions)) {
args.putString(PARAM_LINKEDIN_KEY, linkedInConsumerKey);
args.putString(PARAM_LINKEDIN_SECRET, linkedInConsumerSecret);
args.putString(PARAM_LINKEDIN_PERMISSIONS, linkedInPermissions);
}
if (facebook) {
args.putBoolean(PARAM_FACEBOOK, true);
}
if (googlePlus) {
args.putBoolean(PARAM_GOOGLE_PLUS, true);
}
SocialNetworkManager socialNetworkManager = new SocialNetworkManager();
socialNetworkManager.setArguments(args);
return socialNetworkManager;
}
}
}