package com.androidsocialnetworks.lib;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import com.androidsocialnetworks.lib.listener.OnCheckIsFriendCompleteListener;
import com.androidsocialnetworks.lib.listener.OnLoginCompleteListener;
import com.androidsocialnetworks.lib.listener.OnPostingCompleteListener;
import com.androidsocialnetworks.lib.listener.OnRequestAddFriendCompleteListener;
import com.androidsocialnetworks.lib.listener.OnRequestRemoveFriendCompleteListener;
import com.androidsocialnetworks.lib.listener.OnRequestSocialPersonCompleteListener;
import com.androidsocialnetworks.lib.listener.base.SocialNetworkListener;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import static com.androidsocialnetworks.lib.Consts.TAG;
/**
* Ids:
* <p/>
* 1 - Twitter
* 2 - LinkedIn
* 3 - Google Plus
* 4 - Facebook
*/
public abstract class SocialNetwork {
public static final String REQUEST_LOGIN = "SocialNetwork.REQUEST_LOGIN";
public static final String REQUEST_LOGIN2 = "SocialNetwork.REQUEST_LOGIN2"; // used with OAuth in Twitter and LinekdIn
public static final String REQUEST_GET_CURRENT_PERSON = "SocialNetwork.REQUEST_GET_CURRENT_PERSON";
public static final String REQUEST_GET_PERSON = "SocialNetwork.REQUEST_GET_PERSON";
public static final String REQUEST_POST_MESSAGE = "SocialNetwork.REQUEST_POST_MESSAGE";
public static final String REQUEST_POST_PHOTO = "SocialNetwork.REQUEST_POST_PHOTO";
public static final String REQUEST_CHECK_IS_FRIEND = "SocialNetwork.REQUEST_CHECK_IS_FRIEND";
public static final String REQUEST_ADD_FRIEND = "SocialNetwork.REQUEST_ADD_FRIEND";
public static final String REQUEST_REMOVE_FRIEND = "SocialNetwork.REQUEST_REMOVE_FRIEND";
private static final String SHARED_PREFERENCES_NAME = "social_networks";
protected Fragment mSocialNetworkManager;
protected SharedPreferences mSharedPreferences;
protected Map<String, SocialNetworkListener> mGlobalListeners = new HashMap<String, SocialNetworkListener>();
protected Map<String, SocialNetworkListener> mLocalListeners = new HashMap<String, SocialNetworkListener>();
/**
* @param fragment ant not activity or context, as we will need to call startActivityForResult,
* we will want to receice on onActivityResult in out SocialNetworkManager
* fragment
*/
protected SocialNetwork(Fragment fragment) {
mSocialNetworkManager = fragment;
mSharedPreferences = mSocialNetworkManager
.getActivity().getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
}
//////////////////// LIFECYCLE ////////////////////
public void onCreate(Bundle savedInstanceState) {
}
public void onStart() {
}
public void onResume() {
}
public void onPause() {
}
public void onStop() {
}
public void onDestroy() {
cancelAll();
}
public void onSaveInstanceState(Bundle outState) {
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
}
//////////////////// API ////////////////////
public abstract boolean isConnected();
public void requestLogin() {
requestLogin(null);
}
public void requestLogin(OnLoginCompleteListener onLoginCompleteListener) {
if (isConnected()) {
throw new SocialNetworkException("Already connected, please check isConnected() method");
}
registerListener(REQUEST_LOGIN, onLoginCompleteListener);
}
public abstract void logout();
public abstract int getID();
public abstract AccessToken getAccessToken();
public void requestCurrentPerson() {
requestCurrentPerson(null);
}
public void requestCurrentPerson(OnRequestSocialPersonCompleteListener onRequestSocialPersonCompleteListener) {
registerListener(REQUEST_GET_CURRENT_PERSON, onRequestSocialPersonCompleteListener);
}
public void requestSocialPerson(String userID) {
requestSocialPerson(userID, null);
}
public void requestSocialPerson(String userID, OnRequestSocialPersonCompleteListener onRequestSocialPersonCompleteListener) {
registerListener(REQUEST_GET_PERSON, onRequestSocialPersonCompleteListener);
}
public void requestPostMessage(String message) {
requestPostMessage(message, null);
}
public void requestPostMessage(String message, OnPostingCompleteListener onPostingCompleteListener) {
registerListener(REQUEST_POST_MESSAGE, onPostingCompleteListener);
}
public void requestPostPhoto(File photo, String message) {
requestPostPhoto(photo, message, null);
}
public void requestPostPhoto(File photo, String message, OnPostingCompleteListener onPostingCompleteListener) {
registerListener(REQUEST_POST_PHOTO, onPostingCompleteListener);
}
public void requestCheckIsFriend(String userID) {
requestCheckIsFriend(userID, null);
}
public void requestCheckIsFriend(String userID, OnCheckIsFriendCompleteListener onCheckIsFriendCompleteListener) {
registerListener(REQUEST_CHECK_IS_FRIEND, onCheckIsFriendCompleteListener);
}
public void requestAddFriend(String userID) {
requestAddFriend(userID, null);
}
public void requestAddFriend(String userID, OnRequestAddFriendCompleteListener onRequestAddFriendCompleteListener) {
registerListener(REQUEST_ADD_FRIEND, onRequestAddFriendCompleteListener);
}
public void requestRemoveFriend(String userID) {
requestRemoveFriend(userID, null);
}
public void requestRemoveFriend(String userID, OnRequestRemoveFriendCompleteListener onRequestRemoveFriendCompleteListener) {
registerListener(REQUEST_REMOVE_FRIEND, onRequestRemoveFriendCompleteListener);
}
public void cancelLoginRequest() {
mLocalListeners.remove(REQUEST_LOGIN);
}
public void cancelGetCurrentSocialPersonRequest() {
mLocalListeners.remove(REQUEST_GET_CURRENT_PERSON);
}
public void cancelGetSocialPersonRequest() {
mLocalListeners.remove(REQUEST_GET_PERSON);
}
public void cancelPostMessageRequest() {
mLocalListeners.remove(REQUEST_POST_MESSAGE);
}
public void cancelPostPhotoRequest() {
mLocalListeners.remove(REQUEST_POST_PHOTO);
}
public void cancelCheckIsFriendRequest() {
mLocalListeners.remove(REQUEST_CHECK_IS_FRIEND);
}
public void cancelAddFriendRequest() {
mLocalListeners.remove(REQUEST_ADD_FRIEND);
}
public void cancelRemoveFriendRequest() {
mLocalListeners.remove(REQUEST_REMOVE_FRIEND);
}
public void cancelAll() {
Log.d(TAG, this + ":SocialNetwork.cancelAll()");
// we need to call all, because in implementations we can possible do aditional work in specific methods
cancelLoginRequest();
cancelGetCurrentSocialPersonRequest();
cancelGetSocialPersonRequest();
cancelPostMessageRequest();
cancelPostPhotoRequest();
cancelCheckIsFriendRequest();
cancelAddFriendRequest();
cancelRemoveFriendRequest();
// remove all local listeners
mLocalListeners = new HashMap<String, SocialNetworkListener>();
}
//////////////////// UTIL METHODS ////////////////////
protected void checkRequestState(AsyncTask request) throws SocialNetworkException {
if (request != null) {
throw new SocialNetworkException("Request is already running");
}
}
private void registerListener(String listenerID, SocialNetworkListener socialNetworkListener) {
if (socialNetworkListener != null) {
mLocalListeners.put(listenerID, socialNetworkListener);
} else {
mLocalListeners.put(listenerID, mGlobalListeners.get(listenerID));
}
}
//////////////////// SETTERS FOR GLOBAL LISTENERS ////////////////////
public void setOnLoginCompleteListener(OnLoginCompleteListener onLoginCompleteListener) {
mGlobalListeners.put(REQUEST_LOGIN, onLoginCompleteListener);
}
public void setOnRequestCurrentPersonCompleteListener(OnRequestSocialPersonCompleteListener onRequestCurrentPersonCompleteListener) {
mGlobalListeners.put(REQUEST_GET_CURRENT_PERSON, onRequestCurrentPersonCompleteListener);
}
public void setOnRequestSocialPersonCompleteListener(OnRequestSocialPersonCompleteListener onRequestSocialPersonCompleteListener) {
mGlobalListeners.put(REQUEST_GET_PERSON, onRequestSocialPersonCompleteListener);
}
public void setOnCheckIsFriendListener(OnCheckIsFriendCompleteListener onCheckIsFriendListener) {
mGlobalListeners.put(REQUEST_CHECK_IS_FRIEND, onCheckIsFriendListener);
}
public void setOnPostingMessageCompleteListener(OnPostingCompleteListener onPostingCompleteListener) {
mGlobalListeners.put(REQUEST_POST_MESSAGE, onPostingCompleteListener);
}
public void setOnPostingPhotoCompleteListener(OnPostingCompleteListener onPostingCompleteListener) {
mGlobalListeners.put(REQUEST_POST_PHOTO, onPostingCompleteListener);
}
public void setOnRequestAddFriendCompleteListener(OnRequestAddFriendCompleteListener onRequestAddFriendCompleteListener) {
mGlobalListeners.put(REQUEST_ADD_FRIEND, onRequestAddFriendCompleteListener);
}
public void setOnRequestRemoveFriendCompleteListener(OnRequestRemoveFriendCompleteListener onRequestRemoveFriendCompleteListener) {
mGlobalListeners.put(REQUEST_REMOVE_FRIEND, onRequestRemoveFriendCompleteListener);
}
}