/*
* Copyright (C) 2013 Chris Lacy Licensed under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
* or agreed to in writing, software distributed under the License is
* distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package org.socialnetlib.android;
import org.appdotnet4j.model.AdnUser;
import org.socialnetlib.android.SocialNetConstant.Type;
import org.tweetalib.android.ConnectionStatus;
import org.tweetalib.android.TwitterContentHandle;
import org.tweetalib.android.TwitterFetchBooleans;
import org.tweetalib.android.TwitterFetchBooleans.FetchBooleansWorkerCallbacks;
import org.tweetalib.android.TwitterFetchLists;
import org.tweetalib.android.TwitterFetchLists.FetchListsWorkerCallbacks;
import org.tweetalib.android.TwitterFetchStatus;
import org.tweetalib.android.TwitterFetchStatus.FetchStatusWorkerCallbacks;
import org.tweetalib.android.TwitterFetchUser;
import org.tweetalib.android.TwitterFetchUser.FetchUserWorkerCallbacks;
import org.tweetalib.android.TwitterFetchUsers;
import org.tweetalib.android.TwitterFetchUsers.FetchUsersWorkerCallbacks;
import org.tweetalib.android.TwitterModifyDirectMessages;
import org.tweetalib.android.TwitterModifyDirectMessages.ModifyDirectMessagesWorkerCallbacks;
import org.tweetalib.android.TwitterModifyStatuses;
import org.tweetalib.android.TwitterModifyStatuses.ModifyStatusesWorkerCallbacks;
import org.tweetalib.android.TwitterPaging;
import org.tweetalib.android.TwitterSignIn;
import org.tweetalib.android.TwitterSignIn.SignInWorkerCallbacks;
import org.tweetalib.android.callback.TwitterFetchDirectMessagesFinishedCallback;
import org.tweetalib.android.callback.TwitterFetchStatusesFinishedCallback;
import org.tweetalib.android.fetch.TwitterFetchDirectMessages;
import org.tweetalib.android.fetch.TwitterFetchDirectMessages.FetchMessagesWorkerCallbacks;
import org.tweetalib.android.fetch.TwitterFetchStatuses;
import org.tweetalib.android.fetch.TwitterFetchStatuses.FetchStatusesWorkerCallbacks;
import org.tweetalib.android.model.TwitterDirectMessages;
import org.tweetalib.android.model.TwitterLists;
import org.tweetalib.android.model.TwitterStatus;
import org.tweetalib.android.model.TwitterStatusUpdate;
import org.tweetalib.android.model.TwitterStatuses;
import org.tweetalib.android.model.TwitterUser;
import org.tweetalib.android.model.TwitterUsers;
import java.util.ArrayList;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.User;
import twitter4j.auth.RequestToken;
public abstract class SocialNetApi {
protected abstract void init();
protected abstract TwitterUser verifyCredentialsSync(String oAuthToken,
String oAuthSecret);
abstract Twitter getAndConfigureApiInstance();
abstract void clearApiInstance();
private final SocialNetConstant.Type mType;
String mCurrentOAuthToken;
String mCurrentOAuthSecret;
final String mAppConsumerKey;
final String mAppConsumerSecret;
private final String mCurrentAccountKey;
private TwitterFetchBooleans mFetchBooleans;
private TwitterFetchDirectMessages mFetchDirectMessages;
private TwitterFetchStatus mFetchStatus;
private TwitterFetchStatuses mFetchStatuses;
private TwitterFetchUser mFetchUser;
private TwitterFetchUsers mFetchUsers;
private TwitterFetchLists mFetchLists;
private TwitterModifyStatuses mModifyStatuses;
private TwitterModifyDirectMessages mModifyDirectMessages;
private TwitterSignIn mSignIn;
private ConnectionStatus mConnectionStatus;
SocialNetApi(SocialNetConstant.Type type, String consumerKey,
String consumerSecret, String currentAccountKey) {
mType = type;
mAppConsumerKey = consumerKey;
mAppConsumerSecret = consumerSecret;
mCurrentAccountKey = currentAccountKey;
init();
initFetchBooleans();
initFetchDirectMessages();
initFetchStatus();
initFetchStatuses();
initFetchUser();
initFetchUsers();
initFetchLists();
initModifyStatuses();
initModifyDirectMessages();
if (mSignIn == null) {
mSignIn = new TwitterSignIn();
initSignIn(consumerKey, consumerSecret, type);
}
}
/*
*
*/
private void initFetchStatus() {
mFetchStatus = new TwitterFetchStatus();
FetchStatusWorkerCallbacks callbacks = new FetchStatusWorkerCallbacks() {
public Twitter getTwitterInstance() {
return SocialNetApi.this.getAndConfigureApiInstance();
}
@Override
public void addUser(User user) {
cacheUser(user);
}
@Override
public AppdotnetApi getAppdotnetApi() {
return SocialNetApi.this.getAppdotnetApi();
}
};
mFetchStatus.setWorkerCallbacks(callbacks);
}
/*
*
*/
private void initFetchStatuses() {
mFetchStatuses = new TwitterFetchStatuses();
FetchStatusesWorkerCallbacks callbacks = new FetchStatusesWorkerCallbacks() {
public Twitter getTwitterInstance() {
return SocialNetApi.this.getAndConfigureApiInstance();
}
@Override
public void addUser(User user) {
cacheUser(user);
}
@Override
public void addUser(AdnUser user) {
cacheUser(user);
}
@Override
public AppdotnetApi getAppdotnetApi() {
return SocialNetApi.this.getAppdotnetApi();
}
};
mFetchStatuses.setWorkerCallbacks(callbacks);
}
/*
*
*/
private void initFetchBooleans() {
mFetchBooleans = new TwitterFetchBooleans();
FetchBooleansWorkerCallbacks callbacks = new FetchBooleansWorkerCallbacks() {
public Twitter getTwitterInstance() {
return SocialNetApi.this.getAndConfigureApiInstance();
}
public AppdotnetApi getAppdotnetInstance() {
return SocialNetApi.this.getAppdotnetApi();
}
};
mFetchBooleans.setWorkerCallbacks(callbacks);
}
/*
*
*/
private void initFetchDirectMessages() {
mFetchDirectMessages = new TwitterFetchDirectMessages();
FetchMessagesWorkerCallbacks callbacks = new FetchMessagesWorkerCallbacks() {
public Twitter getTwitterInstance() {
return SocialNetApi.this.getAndConfigureApiInstance();
}
@Override
public void addUser(User user) {
cacheUser(user);
}
};
mFetchDirectMessages.setWorkerCallbacks(callbacks);
}
/*
*
*/
public void initSignIn(final String consumerKey, final String consumerSecret, final SocialNetConstant.Type type) {
mSignIn = new TwitterSignIn();
SignInWorkerCallbacks callbacks = new SignInWorkerCallbacks() {
@Override
public String getConsumerKey() {
return consumerKey;
}
@Override
public String getConsumerSecret() {
return consumerSecret;
}
@Override
public TwitterUser verifyCredentials(String accessToken,
String accessTokenSecret) {
return verifyCredentialsSync(accessToken, accessTokenSecret);
}
@Override
public Type getType() {
return type;
}
};
mSignIn.setWorkerCallbacks(callbacks);
}
/*
*
*/
private void initFetchUser() {
mFetchUser = new TwitterFetchUser();
FetchUserWorkerCallbacks callbacks = new FetchUserWorkerCallbacks() {
@Override
public Twitter getTwitterInstance() {
return SocialNetApi.this.getAndConfigureApiInstance();
}
@Override
public AppdotnetApi getAppdotnetApi() {
return SocialNetApi.this.getAppdotnetApi();
}
};
mFetchUser.setWorkerCallbacks(callbacks);
}
AppdotnetApi getAppdotnetApi() {
if (mType == SocialNetConstant.Type.Appdotnet) {
return (AppdotnetApi) this;
}
return null;
}
/*
*
*/
private void initFetchUsers() {
mFetchUsers = new TwitterFetchUsers();
FetchUsersWorkerCallbacks callbacks = new FetchUsersWorkerCallbacks() {
@Override
public Twitter getTwitterInstance() {
return SocialNetApi.this.getAndConfigureApiInstance();
}
@Override
public AppdotnetApi getAppdotnetInstance() {
return SocialNetApi.this.getAppdotnetApi();
}
@Override
public String getCurrentAccountKey() {
return mCurrentAccountKey;
}
@Override
public void addUser(User user) {
cacheUser(user);
}
@Override
public void addUser(AdnUser user) {
cacheUser(user);
}
@Override
public TwitterUser getUser(Long userID) {
return mFetchUser.getUser(userID, null, mConnectionStatus);
}
};
mFetchUsers.setWorkerCallbacks(callbacks);
}
/*
*
*/
private void initFetchLists() {
mFetchLists = new TwitterFetchLists();
FetchListsWorkerCallbacks callbacks = new FetchListsWorkerCallbacks() {
@Override
public Twitter getTwitterInstance() {
return SocialNetApi.this.getAndConfigureApiInstance();
}
};
mFetchLists.setWorkerCallbacks(callbacks);
}
/*
*
*/
private void initModifyStatuses() {
mModifyStatuses = new TwitterModifyStatuses();
ModifyStatusesWorkerCallbacks callbacks = new ModifyStatusesWorkerCallbacks() {
@Override
public Twitter getTwitterInstance() {
return SocialNetApi.this.getAndConfigureApiInstance();
}
@Override
public AppdotnetApi getAppdotnetApi() {
return SocialNetApi.this.getAppdotnetApi();
}
};
mModifyStatuses.setWorkerCallbacks(callbacks);
}
private void initModifyDirectMessages() {
mModifyDirectMessages = new TwitterModifyDirectMessages();
ModifyDirectMessagesWorkerCallbacks callbacks = new ModifyDirectMessagesWorkerCallbacks() {
@Override
public Twitter getTwitterInstance() {
return SocialNetApi.this.getAndConfigureApiInstance();
}
};
mModifyDirectMessages.setWorkerCallbacks(callbacks);
}
/*
*
*/
public boolean isAuthenticated() {
Twitter twitter = getAndConfigureApiInstance();
if (twitter == null) {
return false;
}
try {
twitter.getAccountSettings();
return true;
} catch (TwitterException e) {
return false;
}
}
/*
*
*/
private void cacheUser(User user) {
cacheUser(user, false);
}
/*
*
*/
private void cacheUser(User user, boolean forceUpdate) {
if (user != null) {
mFetchUser.setUser(user, forceUpdate);
}
}
/*
*
*/
private void cacheUser(AdnUser user) {
cacheUser(user, false);
}
/*
*
*/
private void cacheUser(AdnUser user, boolean forceUpdate) {
if (user != null) {
mFetchUser.setUser(user, forceUpdate);
}
}
/*
*
*/
public void setOAuthTokenWithSecret(String oAuthToken, String oAuthSecret,
boolean cancelPending) {
if (oAuthToken == null && mCurrentOAuthToken == null) {
return;
} else if (oAuthToken != null && mCurrentOAuthToken != null
&& oAuthToken.equals(mCurrentOAuthToken)) {
return;
} else if (oAuthSecret != null && mCurrentOAuthSecret != null
&& oAuthSecret.equals(mCurrentOAuthSecret)) {
return;
}
if (cancelPending) {
mFetchBooleans.clearCallbacks();
mFetchLists.clearCallbacks();
mFetchDirectMessages.clearCallbacks();
mFetchStatus.clearCallbacks();
mFetchStatuses.clearCallbacks();
mFetchUser.clearCallbacks();
mFetchUsers.clearCallbacks();
mModifyStatuses.clearCallbacks();
}
mCurrentOAuthToken = oAuthToken;
mCurrentOAuthSecret = oAuthSecret;
clearApiInstance();
getAndConfigureApiInstance();
}
/*
*
*/
public void setConnectionStatus(
ConnectionStatus.Callbacks connectionStatusCallbacks) {
mConnectionStatus = new ConnectionStatus(connectionStatusCallbacks);
}
/*
*
*/
public ConnectionStatus getConnectionStatus() {
return mConnectionStatus;
}
public TwitterStatuses getContentFeed(TwitterContentHandle handle) {
return mFetchStatuses.getStatuses(handle);
}
public TwitterStatuses setContentFeed(TwitterContentHandle handle, TwitterStatuses newStatuses) {
return mFetchStatuses.setStatuses(handle, newStatuses, false);
}
public void removeFromHashMap(TwitterStatuses statuses) {
mFetchStatuses.removeFromHashMap(statuses);
}
public void removeFromDirectMessageHashMap(TwitterDirectMessages mesages) {
mFetchDirectMessages.removeFromDirectMessageHashMap(mesages);
}
/*
*
*/
public void getAuthUrl(TwitterSignIn.GetAuthUrlCallback callback) {
mSignIn.getAuthUrl(callback);
}
public void getOAuthAccessToken(RequestToken requestToken,
String oauthVerifier,
TwitterSignIn.GetOAuthAccessTokenCallback callback) {
mSignIn.getOAuthAccessToken(requestToken, oauthVerifier, callback);
}
/*
* Will be null if no cached entry exists
*/
public TwitterUser getUser(Long userId) {
return getUser(userId, null);
}
public TwitterUser getUser(Long userId,
TwitterFetchUser.FinishedCallback callback) {
return mFetchUser.getUser(userId, callback,
mConnectionStatus);
}
public TwitterUser getUser(String screenName,
TwitterFetchUser.FinishedCallback callback) {
return mFetchUser.getUser(screenName, callback,
mConnectionStatus);
}
public void verifyUser(TwitterFetchUser.FinishedCallback callback) {
mFetchUser.verifyUser(callback, mConnectionStatus);
}
/*
*
*/
public TwitterUsers getUsers(TwitterContentHandle contentHandle,
TwitterPaging paging) {
return mFetchUsers.getUsers(contentHandle, paging);
}
public TwitterUsers getUsers(TwitterContentHandle contentHandle,
TwitterPaging paging, TwitterFetchUsers.FinishedCallback callback) {
return mFetchUsers.getUsers(contentHandle, paging,
callback, mConnectionStatus);
}
/*
*
*/
public TwitterDirectMessages getDirectMessages(
TwitterContentHandle contentHandle) {
return mFetchDirectMessages
.getDirectMessages(contentHandle);
}
public TwitterDirectMessages setDirectMessages(
TwitterContentHandle contentHandle, TwitterDirectMessages messages) {
return mFetchDirectMessages
.setDirectMessages(contentHandle, messages);
}
public TwitterDirectMessages getDirectMessages(
TwitterContentHandle contentHandle, TwitterPaging paging,
TwitterFetchDirectMessagesFinishedCallback callback) {
return mFetchDirectMessages
.getDirectMessages(contentHandle, paging, callback,
mConnectionStatus);
}
public void sendDirectMessage(long userId, String recipientScreenName,
String statusText,
TwitterContentHandle contentHandle,
TwitterFetchDirectMessagesFinishedCallback callback) {
mFetchDirectMessages.sendDirectMessage(userId, recipientScreenName,
statusText, contentHandle, callback, mConnectionStatus);
}
/*
*
*/
public void updateFriendship(String currentUserScreenName,
TwitterUser userToUpdate, boolean create,
TwitterFetchUsers.FinishedCallback callback) {
mFetchUsers.updateFriendshipUser(currentUserScreenName, userToUpdate,
create, callback, mConnectionStatus);
}
public void updateFriendship(String currentUserScreenName,
TwitterUsers usersToUpdate, boolean create,
TwitterFetchUsers.FinishedCallback callback) {
mFetchUsers.updateFriendshipUsers(currentUserScreenName, usersToUpdate,
create, callback, mConnectionStatus);
}
public void updateFriendshipScreenName(String currentUserScreenName,
String screenNameToUpdate, boolean create,
TwitterFetchUsers.FinishedCallback callback) {
mFetchUsers.updateFriendshipScreenName(currentUserScreenName,
screenNameToUpdate, create, callback, mConnectionStatus);
}
public void updateFriendshipScreenNames(String currentUserScreenName,
ArrayList<String> screenNamesToUpdate, boolean create,
TwitterFetchUsers.FinishedCallback callback) {
mFetchUsers.updateFriendshipScreenNames(currentUserScreenName,
screenNamesToUpdate, create, callback, mConnectionStatus);
}
public void updateFriendshipUserId(long currentUserId, long userIdToUpdate,
boolean create, TwitterFetchUsers.FinishedCallback callback) {
mFetchUsers.updateFriendshipUserId(currentUserId, userIdToUpdate,
create, callback, mConnectionStatus);
}
public void updateFriendshipUserIds(long currentUserId,
ArrayList<Long> userIdsToUpdate, boolean create,
TwitterFetchUsers.FinishedCallback callback) {
mFetchUsers.updateFriendshipUserIds(currentUserId, userIdsToUpdate,
create, callback, mConnectionStatus);
}
/*
*
*/
public void createBlock(long currentUserId, Long userId,
TwitterFetchUsers.FinishedCallback callback) {
mFetchUsers.createBlock(currentUserId, userId, callback,
mConnectionStatus);
}
public void createBlock(long currentUserId, ArrayList<Long> userIds,
TwitterFetchUsers.FinishedCallback callback) {
mFetchUsers.createBlock(currentUserId, userIds, callback,
mConnectionStatus);
}
/*
*
*/
public void reportSpam(long currentUserId, Long userId,
TwitterFetchUsers.FinishedCallback callback) {
mFetchUsers.reportSpam(currentUserId, userId, callback,
mConnectionStatus);
}
public void reportSpam(long currentUserId, ArrayList<Long> userIds,
TwitterFetchUsers.FinishedCallback callback) {
mFetchUsers.reportSpam(currentUserId, userIds, callback,
mConnectionStatus);
}
public TwitterLists getLists(int userId,
TwitterFetchLists.FinishedCallback callback) {
return mFetchLists.getLists(userId, callback);
}
public TwitterLists getLists(String screenName,
TwitterFetchLists.FinishedCallback callback) {
return mFetchLists.getLists(screenName, callback);
}
/*
*
*/
public TwitterStatus getStatus(long statusId,
TwitterFetchStatus.FinishedCallback callback) {
return mFetchStatus.getStatus(statusId, callback, mConnectionStatus);
}
/*
*
*/
public void setStatus(TwitterStatusUpdate statusUpdate,
TwitterFetchStatus.FinishedCallback callback) {
mFetchStatus.setStatus(statusUpdate, callback, mConnectionStatus);
}
/*
*
*/
public void setRetweet(long statusId,
TwitterFetchStatus.FinishedCallback callback) {
mFetchStatus.setRetweet(statusId, callback, mConnectionStatus);
}
/*
*
*/
public void setFavorite(TwitterStatus status, boolean isFavorite,
TwitterModifyStatuses.FinishedCallback callback) {
mModifyStatuses.setFavorite(status, isFavorite, callback);
}
public void setFavorite(TwitterStatuses statuses, boolean isFavorite,
TwitterModifyStatuses.FinishedCallback callback) {
mModifyStatuses.setFavorite(statuses, isFavorite, callback);
}
public void deleteTweet(TwitterStatuses statuses, TwitterModifyStatuses.FinishedCallback callback) {
mModifyStatuses.deleteTweets(statuses, callback);
}
public void deleteDirectMessage(TwitterDirectMessages messages, TwitterModifyDirectMessages.FinishedCallback callback) {
mModifyDirectMessages.deleteDirectMessages(messages, callback);
}
/*
*
*/
public void triggerFetchStatuses(TwitterContentHandle contentHandle,
TwitterPaging paging,
TwitterFetchStatusesFinishedCallback callback, int priorityOffset) {
mFetchStatuses.trigger(contentHandle, paging, callback,
mConnectionStatus, priorityOffset);
}
/*
*
*/
public void cancelFetchStatuses(
TwitterFetchStatusesFinishedCallback callback) {
mFetchStatuses.cancel(callback);
}
/*
*
*/
public void getFriendshipExists(String userScreenName,
String userScreenNameToCheck,
TwitterFetchBooleans.FinishedCallback callback) {
mFetchBooleans.getFriendshipExists(userScreenName,
userScreenNameToCheck, callback, mConnectionStatus);
}
public abstract SocialNetConstant.Type getSocialNetType();
public TwitterFetchLists getFetchListsInstance() {
return mFetchLists;
}
public TwitterFetchStatus getFetchStatusInstance() {
return mFetchStatus;
}
public TwitterFetchStatuses getFetchStatusesInstance() {
return mFetchStatuses;
}
public TwitterFetchBooleans getFetchBooleansInstance() {
return mFetchBooleans;
}
public TwitterFetchUser getFetchUserInstance() {
return mFetchUser;
}
public TwitterFetchUsers getFetchUsersInstance() {
return mFetchUsers;
}
public TwitterModifyStatuses getSetStatusesInstance() {
return mModifyStatuses;
}
public TwitterModifyDirectMessages getSetDirectMessagesInstance() {
return mModifyDirectMessages;
}
public TwitterSignIn getSignInInstance() {
return mSignIn;
}
}