/*
* 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.tweetalib.android;
import org.socialnetlib.android.AppdotnetApi;
import org.socialnetlib.android.SocialNetApi;
import org.socialnetlib.android.SocialNetConstant;
import org.socialnetlib.android.TwitterApi;
import org.tweetalib.android.callback.TwitterFetchDirectMessagesFinishedCallback;
import org.tweetalib.android.callback.TwitterFetchStatusesFinishedCallback;
import org.tweetalib.android.fetch.TwitterFetchStatuses;
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 java.util.HashMap;
import twitter4j.auth.RequestToken;
/*
*
*/
public class TwitterManager {
// http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html
// / TODO: This is probably too C++ ish. Will come back to this later...
public static void initModule(SocialNetConstant.Type socNetType,
String consumerKey, String consumerSecret, String oAuthToken,
String oAuthSecret, String currentAccountKey,
ConnectionStatus.Callbacks connectionStatusCallbacks) {
mInstance = new TwitterManager(socNetType, consumerKey, consumerSecret, currentAccountKey);
mInstance.setOAuthTokenWithSecret(oAuthToken, oAuthSecret, true);
mInstance.setConnectionStatus(connectionStatusCallbacks);
}
public static void initModule(TwitterManager instance) {
mInstance = instance;
}
public static void deinitModule() {
mInstance = null;
}
public static TwitterManager get() {
return mInstance;
}
private static TwitterManager mInstance = null;
private SocialNetApi mApi;
/*
*
*/
private TwitterManager(SocialNetConstant.Type socialNetType, String consumerKey,
String consumerSecret, String currentAccountKey) {
setSocialNetType(socialNetType, consumerKey, consumerSecret, currentAccountKey);
}
public SocialNetConstant.Type getSocialNetType() {
return mApi.getSocialNetType();
}
public void setSocialNetType(SocialNetConstant.Type socialNetType,
String consumerKey, String consumerSecret, String currentAccountKey) {
switch (socialNetType) {
case Appdotnet:
mApi = new AppdotnetApi(socialNetType, consumerKey, consumerSecret, currentAccountKey);
break;
default:
mApi = new TwitterApi(socialNetType, consumerKey, consumerSecret, currentAccountKey);
break;
}
}
/*
*
*/
public void setOAuthTokenWithSecret(String oAuthToken, String oAuthSecret,
boolean cancelPending) {
mApi.setOAuthTokenWithSecret(oAuthToken, oAuthSecret, cancelPending);
}
/*
*
*/
void setConnectionStatus(
ConnectionStatus.Callbacks connectionStatusCallbacks) {
mApi.setConnectionStatus(connectionStatusCallbacks);
}
/*
*
*/
public ConnectionStatus getConnectionStatus() {
return mApi.getConnectionStatus();
}
/*
*
*/
public TwitterContentHandle getContentHandle(
TwitterContentHandleBase contentHandleBase, String screenName,
String identifier, String currentAccountKey) {
return new TwitterContentHandle(
contentHandleBase, screenName, identifier, currentAccountKey);
}
/*
*
*/
public enum ProfileImageSize {
MINI, // 24x24
NORMAL, // 48x48
BIGGER, // 73x73
ORIGINAL, // undefined. This will be the size the image was originally
// uploaded in.
// The filesize of original images can be very big so use this
// parameter with
// caution.
}
/*
*
*/
public TwitterStatuses getContentFeed(TwitterContentHandle handle) {
return mApi.getContentFeed(handle);
}
public TwitterStatuses setContentFeed(TwitterContentHandle handle, TwitterStatuses newStatuses) {
return mApi.setContentFeed(handle, newStatuses);
}
public void removeFromHashMap(TwitterStatuses statuses) {
mApi.removeFromHashMap(statuses);
}
public void removeFromDirectMessageHashMap(TwitterDirectMessages mesages) {
mApi.removeFromDirectMessageHashMap(mesages);
}
/*
* TODO: This is pretty hacky, just so the callback can be instantiated
* outside the class
*/
public TwitterFetchLists getFetchListsInstance() {
return mApi.getFetchListsInstance();
}
public TwitterFetchStatus getFetchStatusInstance() {
return mApi.getFetchStatusInstance();
}
public TwitterFetchStatuses getFetchStatusesInstance() {
return mApi.getFetchStatusesInstance();
}
public TwitterFetchBooleans getFetchBooleansInstance() {
return mApi.getFetchBooleansInstance();
}
public TwitterFetchUser getFetchUserInstance() {
return mApi.getFetchUserInstance();
}
public TwitterFetchUsers getFetchUsersInstance() {
return mApi.getFetchUsersInstance();
}
public TwitterModifyStatuses getSetStatusesInstance() {
return mApi.getSetStatusesInstance();
}
public TwitterModifyDirectMessages getSetDirectMessagesInstance() {
return mApi.getSetDirectMessagesInstance();
}
public TwitterSignIn getSignInInstance() {
return mApi.getSignInInstance();
}
public void setSignInSocialNetType(String consumerKey, String consumerSecret, SocialNetConstant.Type type) {
mApi.initSignIn(consumerKey, consumerSecret, type);
}
/*
*
*/
public void getAuthUrl(TwitterSignIn.GetAuthUrlCallback callback) {
mApi.getAuthUrl(callback);
}
public void getOAuthAccessToken(RequestToken requestToken,
String oauthVerifier,
TwitterSignIn.GetOAuthAccessTokenCallback callback) {
mApi.getOAuthAccessToken(requestToken, oauthVerifier, callback);
}
/*
* Will be null if no cached entry exists
*/
public TwitterUser getUser(Long userId) {
return getUser(userId, null);
}
public TwitterUser getUser(String screenName) {
return getUser(screenName, null);
}
public TwitterUser getUser(Long userId,
TwitterFetchUser.FinishedCallback callback) {
return mApi.getUser(userId, callback);
}
public TwitterUser getUser(String screenName,
TwitterFetchUser.FinishedCallback callback) {
return mApi.getUser(screenName, callback);
}
/*
*
*/
public TwitterUsers getUsers(TwitterContentHandle contentHandle,
TwitterPaging paging) {
return mApi.getUsers(contentHandle, paging);
}
public TwitterUsers getUsers(TwitterContentHandle contentHandle,
TwitterPaging paging, TwitterFetchUsers.FinishedCallback callback) {
return mApi.getUsers(contentHandle, paging, callback);
}
/*
*
*/
public TwitterDirectMessages getDirectMessages(
TwitterContentHandle contentHandle) {
return mApi
.getDirectMessages(contentHandle);
}
public TwitterDirectMessages setDirectMessages(
TwitterContentHandle contentHandle, TwitterDirectMessages newMessages) {
return mApi
.setDirectMessages(contentHandle, newMessages);
}
public TwitterDirectMessages getDirectMessages(
TwitterContentHandle contentHandle, TwitterPaging paging,
TwitterFetchDirectMessagesFinishedCallback callback) {
return mApi.getDirectMessages(
contentHandle, paging, callback);
}
public void sendDirectMessage(long userId, String recipientScreenName,
String statusText, TwitterContentHandle contentHandle,
TwitterFetchDirectMessagesFinishedCallback callback) {
mApi.sendDirectMessage(userId, recipientScreenName, statusText,
contentHandle, callback);
}
/*
*
*/
public void updateFriendship(String currentUserScreenName,
TwitterUser userToUpdate, boolean create,
TwitterFetchUsers.FinishedCallback callback) {
mApi.updateFriendship(currentUserScreenName, userToUpdate, create,
callback);
}
public void updateFriendshipUserIds(long currentUserId,
ArrayList<Long> userIdsToUpdate, boolean create,
TwitterFetchUsers.FinishedCallback callback) {
mApi.updateFriendshipUserIds(currentUserId, userIdsToUpdate, create,
callback);
}
public void createBlock(long currentUserId, ArrayList<Long> userIds,
TwitterFetchUsers.FinishedCallback callback) {
mApi.createBlock(currentUserId, userIds, callback);
}
public void reportSpam(long currentUserId, ArrayList<Long> userIds,
TwitterFetchUsers.FinishedCallback callback) {
mApi.reportSpam(currentUserId, userIds, callback);
}
public TwitterLists getLists(String screenName,
TwitterFetchLists.FinishedCallback callback) {
return mApi.getLists(screenName, callback);
}
/*
*
*/
public TwitterStatus getStatus(long statusId,
TwitterFetchStatus.FinishedCallback callback) {
return mApi.getStatus(statusId, callback);
}
/*
*
*/
public void setStatus(TwitterStatusUpdate statusUpdate,
TwitterFetchStatus.FinishedCallback callback) {
mApi.setStatus(statusUpdate, callback);
}
/*
*
*/
public void setRetweet(long statusId,
TwitterFetchStatus.FinishedCallback callback) {
mApi.setRetweet(statusId, callback);
}
/*
*
*/
public void setFavorite(TwitterStatus status, boolean isFavorite,
TwitterModifyStatuses.FinishedCallback callback) {
mApi.setFavorite(status, isFavorite, callback);
}
public void setFavorite(TwitterStatuses statuses, boolean isFavorite,
TwitterModifyStatuses.FinishedCallback callback) {
mApi.setFavorite(statuses, isFavorite, callback);
}
public void deleteTweet(TwitterStatuses statuses, TwitterModifyStatuses.FinishedCallback callback) {
mApi.deleteTweet(statuses, callback);
}
public void deleteDirectMessage(TwitterDirectMessages messages, TwitterModifyDirectMessages.FinishedCallback callback) {
mApi.deleteDirectMessage(messages, callback);
}
/*
*
*/
public void triggerFetchStatuses(TwitterContentHandle contentHandle,
TwitterPaging paging,
TwitterFetchStatusesFinishedCallback callback, int priorityOffset) {
mApi.triggerFetchStatuses(contentHandle, paging, callback,
priorityOffset);
}
/*
*
*/
public void getFriendshipExists(String userScreenName,
String userScreenNameToCheck,
TwitterFetchBooleans.FinishedCallback callback) {
mApi.getFriendshipExists(userScreenName, userScreenNameToCheck,
callback);
}
public boolean hasValidTwitterInstance() {
return mApi != null;
}
/*
* Used for https://dev.twitter.com/docs/auth/oauth/oauth-echo
*/
public String generateTwitterVerifyCredentialsAuthorizationHeader() {
if (mApi instanceof TwitterApi) {
return ((TwitterApi) mApi)
.generateTwitterVerifyCredentialsAuthorizationHeader();
}
return null;
}
/*
* Quick and dirty system to handle mapping an appdotnet username in an
* entity to an id
*/
private static final HashMap<String, Long> mUserIdentifierHashMap = new HashMap<String, Long>();
public static void addUserIdentifier(String username, long id) {
if (!mUserIdentifierHashMap.containsKey(username)) {
mUserIdentifierHashMap.put(username, id);
}
}
public static Long getUserIdFromScreenName(String username) {
if (mUserIdentifierHashMap.containsKey(username)) {
return mUserIdentifierHashMap.get(username);
}
return null;
}
}