/*******************************************************************************
* 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.service;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Handler;
import android.os.Message;
import android.os.Messenger;
import android.util.Log;
import android.widget.BaseAdapter;
import com.fanfou.app.opensource.AppContext;
import com.fanfou.app.opensource.api.bean.Status;
import com.fanfou.app.opensource.api.bean.User;
import com.fanfou.app.opensource.ui.ActionManager.ResultListener;
import com.fanfou.app.opensource.ui.UIManager.ActionResultHandler;
import com.fanfou.app.opensource.util.CommonHelper;
import com.fanfou.app.opensource.util.StringHelper;
/**
* @author mcxiaoke
*
*/
public final class FanfouServiceManager {
private static final String TAG = "FanfouServiceManager";
public static void doDirectMessagesDelete(final Context context,
final String id, final Handler handler) {
final Intent intent = new Intent(context, FanFouService.class);
intent.putExtra(Constants.EXTRA_TYPE,
Constants.TYPE_DIRECT_MESSAGES_DESTROY);
intent.putExtra(Constants.EXTRA_ID, id);
intent.putExtra(Constants.EXTRA_MESSENGER, new Messenger(handler));
context.startService(intent);
}
public static void doFavorite(final Activity activity, final Status status) {
FanfouServiceManager.doFavorite(activity, status, null, false);
}
public static void doFavorite(final Activity activity, final Status s,
final BaseAdapter adapter) {
final ActionResultHandler li = new ActionResultHandler() {
@Override
public void onActionSuccess(final int type, final String message) {
if (type == Constants.TYPE_FAVORITES_CREATE) {
s.favorited = true;
} else {
s.favorited = false;
}
adapter.notifyDataSetChanged();
}
};
FanfouServiceManager.doFavorite(activity, s, li);
}
public static void doFavorite(final Activity activity, final Status status,
final boolean finish) {
FanfouServiceManager.doFavorite(activity, status, null, finish);
}
public static void doFavorite(final Activity activity, final Status s,
final Cursor c) {
final ActionResultHandler li = new ActionResultHandler() {
@Override
public void onActionSuccess(final int type, final String message) {
c.requery();
}
};
FanfouServiceManager.doFavorite(activity, s, li);
}
public static void doFavorite(final Activity activity, final Status status,
final ResultListener li) {
FanfouServiceManager.doFavorite(activity, status, li, false);
}
public static void doFavorite(final Activity activity, final Status status,
final ResultListener li, final boolean finish) {
if ((status == null) || status.isNull()) {
if (AppContext.DEBUG) {
Log.d(FanfouServiceManager.TAG, "doFavorite: status is null.");
}
throw new NullPointerException("status cannot be null.");
}
final int type = status.favorited ? Constants.TYPE_FAVORITES_DESTROY
: Constants.TYPE_FAVORITES_CREATE;
final Handler handler = new Handler() {
@Override
public void handleMessage(final Message msg) {
switch (msg.what) {
case Constants.RESULT_SUCCESS:
final Status result = (Status) msg.getData().getParcelable(
Constants.EXTRA_DATA);
final String text = result.favorited ? "收藏成功" : "取消收藏成功";
CommonHelper.notify(activity.getApplicationContext(), text);
FanfouServiceManager.onSuccess(li, type, text);
if (finish) {
activity.finish();
}
break;
case Constants.RESULT_ERROR:
final String errorMessage = msg.getData().getString(
Constants.EXTRA_ERROR);
CommonHelper.notify(activity.getApplicationContext(),
errorMessage);
FanfouServiceManager.onFailed(li, type, "收藏失败");
break;
default:
break;
}
}
};
if (status.favorited) {
FanfouServiceManager.doUnfavorite(activity, status.id, handler);
} else {
FanfouServiceManager.doFavorite(activity, status.id, handler);
}
}
public static void doFavorite(final Context context, final String id,
final Handler handler) {
final Intent intent = new Intent(context, FanFouService.class);
intent.putExtra(Constants.EXTRA_TYPE, Constants.TYPE_FAVORITES_CREATE);
intent.putExtra(Constants.EXTRA_ID, id);
intent.putExtra(Constants.EXTRA_MESSENGER, new Messenger(handler));
context.startService(intent);
}
public static void doFetchDirectMessagesConversationList(
final Context context, final Messenger messenger,
final boolean doGetMore) {
final Intent intent = new Intent(context, FanFouService.class);
intent.putExtra(Constants.EXTRA_TYPE,
Constants.TYPE_DIRECT_MESSAGES_CONVERSTATION_LIST);
intent.putExtra(Constants.EXTRA_MESSENGER, messenger);
intent.putExtra(Constants.EXTRA_BOOLEAN, doGetMore);
context.startService(intent);
}
public static void doFetchDirectMessagesInbox(final Context context,
final Messenger messenger, final boolean doGetMore) {
final Intent intent = new Intent(context, FanFouService.class);
intent.putExtra(Constants.EXTRA_TYPE,
Constants.TYPE_DIRECT_MESSAGES_INBOX);
intent.putExtra(Constants.EXTRA_MESSENGER, messenger);
intent.putExtra(Constants.EXTRA_BOOLEAN, doGetMore);
context.startService(intent);
}
public static void doFetchFavorites(final Context context,
final Messenger messenger, final int page, final String userId) {
FanfouServiceManager.doFetchTimeline(context,
Constants.TYPE_FAVORITES_LIST, messenger, page, userId, null,
null);
}
public static void doFetchFollowers(final Context context,
final Handler handler, final int page, final String userId) {
FanfouServiceManager.doFetchUsers(context,
Constants.TYPE_USERS_FOLLOWERS, handler, page, userId);
}
public static void doFetchFriends(final Context context,
final Handler handler, final int page, final String userId) {
FanfouServiceManager.doFetchUsers(context,
Constants.TYPE_USERS_FRIENDS, handler, page, userId);
}
public static void doFetchHomeTimeline(final Context context,
final Messenger messenger, final String sinceId, final String maxId) {
FanfouServiceManager.doFetchTimeline(context,
Constants.TYPE_STATUSES_HOME_TIMELINE, messenger, 0, null,
sinceId, maxId);
}
public static void doFetchMentions(final Context context,
final Messenger messenger, final String sinceId, final String maxId) {
FanfouServiceManager.doFetchTimeline(context,
Constants.TYPE_STATUSES_MENTIONS, messenger, 0, null, sinceId,
maxId);
}
public static void doFetchPublicTimeline(final Context context,
final Messenger messenger) {
FanfouServiceManager.doFetchTimeline(context,
Constants.TYPE_STATUSES_PUBLIC_TIMELINE, messenger, 0, null,
null, null);
}
private static void doFetchTimeline(final Context context, final int type,
final Messenger messenger, final int page, final String userId,
final String sinceId, final String maxId) {
final Intent intent = new Intent(context, FanFouService.class);
intent.putExtra(Constants.EXTRA_TYPE, type);
intent.putExtra(Constants.EXTRA_MESSENGER, messenger);
intent.putExtra(Constants.EXTRA_COUNT, Constants.MAX_TIMELINE_COUNT);
intent.putExtra(Constants.EXTRA_PAGE, page);
intent.putExtra(Constants.EXTRA_ID, userId);
intent.putExtra(Constants.EXTRA_SINCE_ID, sinceId);
intent.putExtra(Constants.EXTRA_MAX_ID, maxId);
if (AppContext.DEBUG) {
Log.d(FanfouServiceManager.TAG, "doFetchTimeline() type=" + type
+ " page=" + page + " userId=" + userId);
}
context.startService(intent);
}
private static void doFetchUsers(final Context context, final int type,
final Handler handler, final int page, final String userId) {
final Intent intent = new Intent(context, FanFouService.class);
intent.putExtra(Constants.EXTRA_TYPE, type);
intent.putExtra(Constants.EXTRA_MESSENGER, new Messenger(handler));
intent.putExtra(Constants.EXTRA_COUNT, Constants.MAX_USERS_COUNT);
intent.putExtra(Constants.EXTRA_PAGE, page);
intent.putExtra(Constants.EXTRA_ID, userId);
context.startService(intent);
}
public static void doFetchUserTimeline(final Context context,
final Messenger messenger, final String userId,
final String sinceId, final String maxId) {
FanfouServiceManager.doFetchTimeline(context,
Constants.TYPE_STATUSES_USER_TIMELINE, messenger, 0, userId,
sinceId, maxId);
}
public static void doFollow(final Context context, final String userId,
final Handler handler) {
final Intent intent = new Intent(context, FanFouService.class);
intent.putExtra(Constants.EXTRA_TYPE, Constants.TYPE_FRIENDSHIPS_CREATE);
intent.putExtra(Constants.EXTRA_ID, userId);
intent.putExtra(Constants.EXTRA_MESSENGER, new Messenger(handler));
context.startService(intent);
}
public static void doFollow(final Context context, final User user,
final Handler handler) {
if (user.following) {
FanfouServiceManager.doUnFollow(context, user.id, handler);
} else {
FanfouServiceManager.doFollow(context, user.id, handler);
}
}
public static void doFriendshipsExists(final Context context,
final String userA, final String userB, final Handler handler) {
final Intent intent = new Intent(context, FanFouService.class);
intent.putExtra(Constants.EXTRA_TYPE, Constants.TYPE_FRIENDSHIPS_EXISTS);
intent.putExtra("user_a", userA);
intent.putExtra("user_b", userB);
intent.putExtra(Constants.EXTRA_MESSENGER, new Messenger(handler));
context.startService(intent);
}
public static void doMessageDelete(final Activity activity,
final String id, final ResultListener li, final boolean finish) {
if (StringHelper.isEmpty(id)) {
if (AppContext.DEBUG) {
Log.d(FanfouServiceManager.TAG,
"doMessageDelete: status id is null.");
}
throw new NullPointerException("directmessageid cannot be null.");
}
final Handler handler = new Handler() {
@Override
public void handleMessage(final Message msg) {
switch (msg.what) {
case Constants.RESULT_SUCCESS:
CommonHelper.notify(AppContext.getAppContext(), "删除成功");
FanfouServiceManager.onSuccess(li,
Constants.TYPE_DIRECT_MESSAGES_DESTROY, "删除成功");
if (finish && (activity != null)) {
activity.finish();
}
break;
case Constants.RESULT_ERROR:
final String errorMessage = msg.getData().getString(
Constants.EXTRA_ERROR);
CommonHelper.notify(activity.getApplicationContext(),
errorMessage);
FanfouServiceManager.onFailed(li,
Constants.TYPE_DIRECT_MESSAGES_DESTROY, "删除失败");
break;
default:
break;
}
}
};
FanfouServiceManager.doDirectMessagesDelete(activity, id, handler);
}
public static void doProfile(final Context context, final String userId,
final Handler handler) {
final Intent intent = new Intent(context, FanFouService.class);
intent.putExtra(Constants.EXTRA_TYPE, Constants.TYPE_USERS_SHOW);
intent.putExtra(Constants.EXTRA_ID, userId);
intent.putExtra(Constants.EXTRA_MESSENGER, new Messenger(handler));
context.startService(intent);
}
public static void doStatusDelete(final Activity activity, final String id) {
FanfouServiceManager.doStatusDelete(activity, id, null);
}
public static void doStatusDelete(final Activity activity, final String id,
final boolean finish) {
FanfouServiceManager.doStatusDelete(activity, id, null, finish);
}
public static void doStatusDelete(final Activity activity, final String id,
final ResultListener li) {
FanfouServiceManager.doStatusDelete(activity, id, li, false);
}
public static void doStatusDelete(final Activity activity, final String id,
final ResultListener li, final boolean finish) {
if (StringHelper.isEmpty(id)) {
if (AppContext.DEBUG) {
Log.d(FanfouServiceManager.TAG,
"doStatusDelete: status id is null.");
}
throw new NullPointerException("statusid cannot be null.");
}
final Handler handler = new Handler() {
@Override
public void handleMessage(final Message msg) {
switch (msg.what) {
case Constants.RESULT_SUCCESS:
CommonHelper.notify(AppContext.getAppContext(), "删除成功");
FanfouServiceManager.onSuccess(li,
Constants.TYPE_STATUSES_DESTROY, "删除成功");
if (finish && (activity != null)) {
activity.finish();
}
break;
case Constants.RESULT_ERROR:
final String errorMessage = msg.getData().getString(
Constants.EXTRA_ERROR);
CommonHelper.notify(activity.getApplicationContext(),
errorMessage);
FanfouServiceManager.onFailed(li,
Constants.TYPE_STATUSES_DESTROY, "删除失败");
break;
default:
break;
}
}
};
FanfouServiceManager.doStatusesDelete(activity, id, handler);
}
public static void doStatusesDelete(final Context context, final String id,
final Handler handler) {
final Intent intent = new Intent(context, FanFouService.class);
intent.putExtra(Constants.EXTRA_TYPE, Constants.TYPE_STATUSES_DESTROY);
intent.putExtra(Constants.EXTRA_ID, id);
intent.putExtra(Constants.EXTRA_MESSENGER, new Messenger(handler));
context.startService(intent);
}
public static void doUnfavorite(final Context context, final String id,
final Handler handler) {
final Intent intent = new Intent(context, FanFouService.class);
intent.putExtra(Constants.EXTRA_TYPE, Constants.TYPE_FAVORITES_DESTROY);
intent.putExtra(Constants.EXTRA_ID, id);
intent.putExtra(Constants.EXTRA_MESSENGER, new Messenger(handler));
context.startService(intent);
}
public static void doUnFollow(final Context context, final String userId,
final Handler handler) {
final Intent intent = new Intent(context, FanFouService.class);
intent.putExtra(Constants.EXTRA_TYPE,
Constants.TYPE_FRIENDSHIPS_DESTROY);
intent.putExtra(Constants.EXTRA_ID, userId);
intent.putExtra(Constants.EXTRA_MESSENGER, new Messenger(handler));
context.startService(intent);
}
private static void onFailed(final ResultListener li, final int type,
final String message) {
if (li != null) {
li.onActionFailed(type, message);
}
}
private static void onSuccess(final ResultListener li, final int type,
final String message) {
if (li != null) {
li.onActionSuccess(type, message);
}
}
}