/******************************************************************************* * Copyright 2011, 2012, 2013 fanfou.com, Xiaoke, Zhang * * 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.fanfou.app.opensource.ui; import java.io.File; import java.util.ArrayList; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.util.Log; import com.fanfou.app.opensource.AppContext; import com.fanfou.app.opensource.DraftsPage; import com.fanfou.app.opensource.MyProfilePage; import com.fanfou.app.opensource.ProfilePage; import com.fanfou.app.opensource.R; import com.fanfou.app.opensource.SendPage; import com.fanfou.app.opensource.UserFavoritesPage; import com.fanfou.app.opensource.UserListPage; import com.fanfou.app.opensource.UserTimelinePage; import com.fanfou.app.opensource.WritePage; import com.fanfou.app.opensource.api.bean.DirectMessage; import com.fanfou.app.opensource.api.bean.Status; import com.fanfou.app.opensource.api.bean.User; import com.fanfou.app.opensource.service.Constants; import com.fanfou.app.opensource.util.OptionHelper; import com.fanfou.app.opensource.util.PatternsHelper; import com.fanfou.app.opensource.util.StringHelper; /** * @author mcxiaoke * @version 1.0 2011.08.25 * @version 1.1 2011.10.26 * @version 1.2 2011.10.27 * @version 1.3 2011.10.28 * @version 2.0 2011.10.29 * @version 2.1 2011.11.09 * @version 2.2 2011.11.11 * @version 2.3 2011.11.21 * @version 2.4 2011.12.08 * @version 3.0 2011.12.19 * */ public final class ActionManager { public interface ResultListener { public void onActionFailed(int type, String message); public void onActionSuccess(int type, String message); } private static final String TAG = ActionManager.class.getSimpleName(); public static void doMessage(final Context context, final User user) { final Intent intent = new Intent(context, SendPage.class); intent.putExtra(Constants.EXTRA_ID, user.id); intent.putExtra(Constants.EXTRA_USER_NAME, user.screenName); context.startActivity(intent); } public static void doMyProfile(final Context context) { final Intent intent = new Intent(context, MyProfilePage.class); context.startActivity(intent); } public static void doProfile(final Context context, final DirectMessage dm) { if ((dm == null) || dm.isNull()) { if (AppContext.DEBUG) { Log.d(ActionManager.TAG, "doProfile: status is null."); } throw new NullPointerException("directmessage cannot be null."); } if (dm.senderId.equals(AppContext.getUserId())) { ActionManager.doMyProfile(context); return; } final Intent intent = new Intent(context, ProfilePage.class); intent.putExtra(Constants.EXTRA_ID, dm.senderId); intent.putExtra(Constants.EXTRA_USER_NAME, dm.senderScreenName); intent.putExtra(Constants.EXTRA_USER_HEAD, dm.senderProfileImageUrl); context.startActivity(intent); } public static void doProfile(final Context context, final Status status) { if ((status == null) || status.isNull()) { if (AppContext.DEBUG) { Log.d(ActionManager.TAG, "doProfile: status is null."); } throw new NullPointerException("status cannot be null."); } if (status.userId.equals(AppContext.getUserId())) { ActionManager.doMyProfile(context); return; } final Intent intent = new Intent(context, ProfilePage.class); intent.putExtra(Constants.EXTRA_ID, status.userId); intent.putExtra(Constants.EXTRA_USER_NAME, status.userScreenName); intent.putExtra(Constants.EXTRA_USER_HEAD, status.userProfileImageUrl); context.startActivity(intent); } public static void doProfile(final Context context, final String userId) { if (StringHelper.isEmpty(userId)) { if (AppContext.DEBUG) { Log.d(ActionManager.TAG, "doProfile: userid is null."); } throw new NullPointerException("userid cannot be null."); } if (userId.equals(AppContext.getUserId())) { ActionManager.doMyProfile(context); return; } final Intent intent = new Intent(context, ProfilePage.class); intent.putExtra(Constants.EXTRA_ID, userId); context.startActivity(intent); } public static void doProfile(final Context context, final User user) { if ((user == null) || user.isNull()) { if (AppContext.DEBUG) { Log.d(ActionManager.TAG, "doProfile: user is null."); } throw new NullPointerException("user cannot be null."); } if (user.id.equals(AppContext.getUserId())) { ActionManager.doMyProfile(context); return; } final Intent intent = new Intent(context, ProfilePage.class); intent.putExtra(Constants.EXTRA_DATA, user); context.startActivity(intent); } public static void doReply(final Context context, final Status status) { if (status != null) { if (AppContext.DEBUG) { Log.d(ActionManager.TAG, "doReply: status is null."); } final StringBuilder sb = new StringBuilder(); final boolean replyToAll = OptionHelper.readBoolean(context, R.string.option_reply_to_all_default, true); if (replyToAll) { final ArrayList<String> names = PatternsHelper .getMentions(status); for (final String name : names) { sb.append("@").append(name).append(" "); } } else { sb.append("@").append(status.userScreenName).append(" "); } final Intent intent = new Intent(context, WritePage.class); intent.putExtra(Constants.EXTRA_IN_REPLY_TO_ID, status.id); intent.putExtra(Constants.EXTRA_TEXT, sb.toString()); intent.putExtra(Constants.EXTRA_TYPE, WritePage.TYPE_REPLY); context.startActivity(intent); } else { ActionManager.doWrite(context, null); } } public static void doRetweet(final Context context, final Status status) { if ((status == null) || status.isNull()) { throw new NullPointerException("status cannot be null."); } final Intent intent = new Intent(context, WritePage.class); intent.putExtra(Constants.EXTRA_TYPE, WritePage.TYPE_REPOST); intent.putExtra(Constants.EXTRA_IN_REPLY_TO_ID, status.id); intent.putExtra(Constants.EXTRA_TEXT, "转@" + status.userScreenName + " " + status.simpleText); context.startActivity(intent); } public static void doSend(final Context context) { final Intent intent = new Intent(context, SendPage.class); context.startActivity(intent); } public static void doShare(final Context context, final File image) { if (AppContext.DEBUG) { Log.d(ActionManager.TAG, "doShare: image is " + image); } if (image == null) { return; } final Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("image/*"); intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(image)); context.startActivity(Intent.createChooser(intent, "分享")); } public static void doShare(final Context context, final Status status) { if ((status == null) || status.isNull()) { if (AppContext.DEBUG) { Log.d(ActionManager.TAG, "doShare: status is null."); } throw new NullPointerException("status cannot be null."); } final Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_SUBJECT, "来自" + status.userScreenName + "的饭否消息"); intent.putExtra(Intent.EXTRA_TEXT, status.simpleText); context.startActivity(Intent.createChooser(intent, "分享")); } public static void doShowDrafts(final Context context) { final Intent intent = new Intent(context, DraftsPage.class); context.startActivity(intent); } public static void doShowFavorites(final Context context, final User user) { final Intent intent = new Intent(context, UserFavoritesPage.class); intent.putExtra(Constants.EXTRA_DATA, user); context.startActivity(intent); } public static void doShowFollowers(final Context context, final User user) { final Intent intent = new Intent(context, UserListPage.class); intent.putExtra(Constants.EXTRA_DATA, user); intent.putExtra(Constants.EXTRA_TYPE, Constants.TYPE_USERS_FOLLOWERS); context.startActivity(intent); } public static void doShowFriends(final Context context, final User user) { final Intent intent = new Intent(context, UserListPage.class); intent.putExtra(Constants.EXTRA_DATA, user); intent.putExtra(Constants.EXTRA_TYPE, Constants.TYPE_USERS_FRIENDS); context.startActivity(intent); } public static void doShowTimeline(final Context context, final User user) { final Intent intent = new Intent(context, UserTimelinePage.class); intent.putExtra(Constants.EXTRA_DATA, user); context.startActivity(intent); } public static void doWrite(final Context context) { ActionManager.doWrite(context, null); } public static void doWrite(final Context context, final String text) { ActionManager.doWrite(context, text, WritePage.TYPE_NORMAL); } public static void doWrite(final Context context, final String text, final File file, final int type) { final Intent intent = new Intent(context, WritePage.class); intent.putExtra(Constants.EXTRA_TYPE, type); intent.putExtra(Constants.EXTRA_TEXT, text); intent.putExtra(Constants.EXTRA_DATA, file); context.startActivity(intent); } public static void doWrite(final Context context, final String text, final int type) { ActionManager.doWrite(context, text, null, type); } private ActionManager() { } }