/*
* Copyright 2012 Javier Pérez Pacheco and Francisco Díaz Rodriguez
* TweetTopics 2.0
* javielinux@gmail.com
*
* 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 com.javielinux.utils;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.support.v4.app.FragmentActivity;
import com.android.dataframework.DataFramework;
import com.android.dataframework.Entity;
import com.javielinux.adapters.ColoringTweetsAdapter;
import com.javielinux.api.APIDelegate;
import com.javielinux.api.APITweetTopics;
import com.javielinux.api.request.ExecuteActionUserRequest;
import com.javielinux.api.response.BaseResponse;
import com.javielinux.api.response.ErrorResponse;
import com.javielinux.infos.InfoUsers;
import com.javielinux.preferences.Colors;
import com.javielinux.tweettopics2.*;
import com.javielinux.twitter.ConnectionManager;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import java.util.ArrayList;
public class UserActions {
public static String USER_ACTION_COLORING = "coloring";
public static String USER_ACTION_CREATE_BLOCK = "create_block";
public static String USER_ACTION_REPORT_SPAM = "report_spam";
public static String USER_ACTION_INCLUDED_LIST = "included_list";
public static String USER_ACTION_INCLUDED_LIST_SELECTION = "included_list_selection";
public static String USER_ACTION_HIDE = "hide";
public static String USER_ACTION_CREATE_TOPIC = "create_topic";
public static String USER_ACTION_SEND_DIRECT = "send_direct";
public static String USER_ACTION_CHANGE_RELATIONSHIP = "change_relationship";
public static String USER_ACTION_VIEW_PHOTO_PROFILE = "view_photo_profile";
public static String USER_ACTION_MY_LISTS = "my_lists";
public static InfoUsers execByCode(String code, FragmentActivity activity, long fromUser, InfoUsers infoUsers) {
return execByCode(code, activity, fromUser, infoUsers, null);
}
public static InfoUsers execByCode(String code, final FragmentActivity activity, long fromUser, InfoUsers infoUsers, Object extra) {
if (code.equals(USER_ACTION_COLORING)) {
goToColoringTweets(activity, infoUsers);
} else if (code.equals(USER_ACTION_CREATE_BLOCK)) {
APITweetTopics.execute(activity, activity.getSupportLoaderManager(), new APIDelegate() {
@Override
public void onResults(BaseResponse result) {
}
@Override
public void onError(ErrorResponse error) {
}
}, new ExecuteActionUserRequest(UserActions.USER_ACTION_CREATE_BLOCK, null, infoUsers, -1, -1));
} else if (code.equals(USER_ACTION_REPORT_SPAM)) {
APITweetTopics.execute(activity, activity.getSupportLoaderManager(), new APIDelegate() {
@Override
public void onResults(BaseResponse result) {
}
@Override
public void onError(ErrorResponse error) {
}
}, new ExecuteActionUserRequest(UserActions.USER_ACTION_REPORT_SPAM, null, infoUsers, -1, -1));
} else if (code.equals(USER_ACTION_INCLUDED_LIST_SELECTION)) {
goToIncludeListSelection(activity);
} else if (code.equals(USER_ACTION_INCLUDED_LIST)) {
APITweetTopics.execute(activity, activity.getSupportLoaderManager(), new APIDelegate() {
@Override
public void onResults(BaseResponse result) {
Utils.showMessage(activity, activity.getString(R.string.included_list_message));
}
@Override
public void onError(ErrorResponse error) {
Utils.showMessage(activity, error.getMsgError());
}
}, new ExecuteActionUserRequest(UserActions.USER_ACTION_INCLUDED_LIST, null, infoUsers, fromUser, ((Integer)extra).intValue()));
} else if (code.equals(USER_ACTION_HIDE)) {
goToHide(activity, infoUsers);
} else if (code.equals(USER_ACTION_CREATE_TOPIC)) {
goToCreateTopic(activity, infoUsers);
} else if (code.equals(USER_ACTION_SEND_DIRECT)) {
goToDirect(activity, fromUser, infoUsers);
} else if (code.equals(USER_ACTION_VIEW_PHOTO_PROFILE)) {
goToImageProfile(activity, infoUsers);
} else if (code.equals(USER_ACTION_CHANGE_RELATIONSHIP)) {
return goToChangeRelationship(activity, infoUsers, (InfoUsers.Friend)extra);
} else if (code.equals(USER_ACTION_MY_LISTS)) {
Intent userLists = new Intent(activity, UserListsActivity.class);
userLists.putExtra(DataFramework.KEY_ID, (long)-1);
userLists.putExtra("screenName", infoUsers.getName());
activity.startActivity(userLists);
}
return null;
}
public static void goToImageProfile(FragmentActivity activity, InfoUsers infoUsers) {
Intent showImage = new Intent(activity, ShowImageActivity.class);
showImage.putExtra(ShowImageActivity.KEY_EXTRA_URL_IMAGE, infoUsers.getURLAvatar(InfoUsers.SIZE_ORIGINAL));
activity.startActivity(showImage);
}
public static void goToDirect(FragmentActivity activity, long fromUser, InfoUsers infoUsers) {
Intent newstatus = new Intent(activity, NewStatusActivity.class);
if (fromUser>0) newstatus.putExtra("start_user_id", fromUser);
newstatus.putExtra("type", NewStatusActivity.TYPE_DIRECT_MESSAGE);
newstatus.putExtra("username_direct_message", infoUsers.getName());
activity.startActivity(newstatus);
}
public static void goToCreateTopic(FragmentActivity activity, InfoUsers infoUsers) {
Intent edit_search = new Intent(activity, SearchActivity.class);
edit_search.putExtra("user", infoUsers.getName());
activity.startActivity(edit_search);
}
public static void goToHide(FragmentActivity activity, InfoUsers infoUsers) {
Entity ent = new Entity("quiet");
ent.setValue("word", infoUsers.getName());
ent.setValue("type_id", 2);
ent.save();
CacheData.getInstance().fillHide();
Utils.showMessage(activity, activity.getString(R.string.user_hidden_correct));
}
public static void goToReportSpam(Context context, InfoUsers infoUsers) {
ConnectionManager.getInstance().open(context);
Twitter twitter = ConnectionManager.getInstance().getTwitter(DBUtils.getIdFromUserName(infoUsers.getName()));
try {
twitter.reportSpam(infoUsers.getName());
Utils.showMessage(context, context.getString(R.string.user_report_spam));
} catch (TwitterException e) {
e.printStackTrace();
}
}
public static void goToIncludeListSelection(FragmentActivity activity) {
Intent intent = new Intent(activity, UserListsSelectorActivity.class);
activity.startActivityForResult(intent, UserActivity.ACTIVITY_INCLUDE_IN_LIST);
}
public static void goToIncludeList(Context context, long activeUser, InfoUsers infoUsers, int userListId) {
ConnectionManager.getInstance().open(context);
Twitter twitter = ConnectionManager.getInstance().getTwitter(activeUser);
try {
twitter.addUserListMember(userListId, infoUsers.getId());
} catch (TwitterException e) {
e.printStackTrace();
}
}
public static void goToCreateBlock(Context context, InfoUsers infoUsers) {
ConnectionManager.getInstance().open(context);
Twitter twitter = ConnectionManager.getInstance().getTwitter(DBUtils.getIdFromUserName(infoUsers.getName()));
try {
boolean isBlock = false;
for (long id : twitter.getBlocksIDs().getIDs()) {
if (id == infoUsers.getId()) {
isBlock = true;
break;
}
}
if (true) {
twitter.destroyBlock(infoUsers.getName());
Utils.showMessage(context, context.getString(R.string.user_unlock));
} else {
twitter.createBlock(infoUsers.getName());
Utils.showMessage(context, context.getString(R.string.user_block));
}
} catch (TwitterException e) {
e.printStackTrace();
}
}
public static InfoUsers goToChangeRelationship(Context context, InfoUsers infoUsers, InfoUsers.Friend friend) {
ConnectionManager.getInstance().open(context);
Twitter twitter = ConnectionManager.getInstance().getTwitter(DBUtils.getIdFromUserName(friend.user));
try {
if (friend.follower) {
twitter.destroyFriendship(infoUsers.getName());
friend.follower = false;
} else {
twitter.createFriendship(infoUsers.getName());
friend.follower = true;
}
infoUsers.replaceFriendly(friend.user, friend);
return infoUsers;
} catch (TwitterException e) {
e.printStackTrace();
}
return null;
}
public static void goToColoringTweets(final FragmentActivity activity, final InfoUsers infoUsers) {
final ArrayList<Entity> entsColor = DataFramework.getInstance().getEntityList("type_colors");
ColoringTweetsAdapter ad = new ColoringTweetsAdapter(activity, entsColor);
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle(R.string.colors);
builder.setAdapter(ad, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Entity ent = new Entity("colors");
ent.setValue("word", infoUsers.getName());
ent.setValue("type_id", 2);
ent.setValue("type_color_id", entsColor.get(which).getId());
ent.save();
Utils.showMessage(activity, activity.getString(R.string.color_add_user));
// TODO refrescar las listas para colorear
}
});
builder.setPositiveButton(R.string.new_item, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Intent newuser = new Intent(activity, Colors.class);
activity.startActivity(newuser);
}
});
builder.setNeutralButton(R.string.delete, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Entity color = DataFramework.getInstance().getTopEntity("colors", "type_id=2 and word=\""+infoUsers.getName()+"\"", "");
if (color!=null) {
color.delete();
Utils.showMessage(activity, activity.getString(R.string.color_delete_user));
// TODO refrescar las listas para dejar de colorear
}
}
});
builder.setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
});
builder.create();
builder.show();
}
}