package com.mcxiaoke.minicat.controller; import android.app.Activity; import android.content.Context; import android.database.Cursor; import android.os.Handler; import android.os.Message; import android.view.View; import com.mcxiaoke.minicat.AppContext; import com.mcxiaoke.minicat.R; import com.mcxiaoke.minicat.adapter.BaseStatusArrayAdapter; import com.mcxiaoke.minicat.dao.model.StatusModel; import com.mcxiaoke.minicat.dialog.ConfirmDialog; import com.mcxiaoke.minicat.quickaction.ActionItem; import com.mcxiaoke.minicat.quickaction.QuickAction; import com.mcxiaoke.minicat.quickaction.QuickAction.OnActionItemClickListener; import com.mcxiaoke.minicat.service.SyncService; import com.mcxiaoke.minicat.util.Utils; /** * @author mcxiaoke * @version 2.0 2012.03.02 */ public class PopupController { public static final int QUICK_ACTION_ID_REPLY = 0; public static final int QUICK_ACTION_ID_DELETE = 1; public static final int QUICK_ACTION_ID_RETWEET = 2; public static final int QUICK_ACTION_ID_FAVORITE = 3; public static final int QUICK_ACTION_ID_UNFAVORITE = 4; public static final int QUICK_ACTION_ID_PROFILE = 5; public static final int QUICK_ACTION_ID_SHARE = 6; public static void showPopup(final View view, final StatusModel status, final Cursor cursor) { final Activity context = (Activity) view.getContext(); QuickAction q = makePopup(context, status); q.setOnActionItemClickListener(new QuickActionListener(context, getDeleteHandler(context, cursor), status)); q.show(view); } public static void showPopup(final View view, final StatusModel status, final BaseStatusArrayAdapter adapter) { final Activity context = (Activity) view.getContext(); QuickAction q = makePopup(context, status); q.setOnActionItemClickListener(new QuickActionListener(context, getDeleteHandler(context, status, adapter), status)); q.show(view); } private static QuickAction makePopup(Context context, final StatusModel status) { ActionItem reply = new ActionItem(QUICK_ACTION_ID_REPLY, context .getResources().getDrawable(R.drawable.ic_reply)); ActionItem delete = new ActionItem(QUICK_ACTION_ID_DELETE, context .getResources().getDrawable(R.drawable.ic_delete)); ActionItem retweet = new ActionItem(QUICK_ACTION_ID_RETWEET, context .getResources().getDrawable(R.drawable.ic_retweet)); ActionItem favorite = new ActionItem(QUICK_ACTION_ID_FAVORITE, context .getResources().getDrawable(R.drawable.ic_favorite_0)); ActionItem unfavorite = new ActionItem(QUICK_ACTION_ID_UNFAVORITE, context.getResources().getDrawable(R.drawable.ic_favorite_1)); ActionItem profile = new ActionItem(QUICK_ACTION_ID_PROFILE, context .getResources().getDrawable(R.drawable.ic_profile)); ActionItem share = new ActionItem(QUICK_ACTION_ID_SHARE, context .getResources().getDrawable(R.drawable.ic_share)); final boolean me = status.getUserId().equals(AppContext.getAccount()); final QuickAction q = new QuickAction(context); q.addActionItem(me ? delete : reply); q.addActionItem(retweet); q.addActionItem(status.isFavorited() ? unfavorite : favorite); q.addActionItem(share); q.addActionItem(profile); return q; } private static void deleteStatus(final Activity context, final String id, final Handler handler) { final ConfirmDialog dialog = new ConfirmDialog(context); dialog.setTitle("提示"); dialog.setMessage("确定要删除这条消息吗?"); dialog.setClickListener(new SimpleDialogListener() { @Override public void onPositiveClick() { super.onPositiveClick(); SyncService.deleteStatus(context, id, handler); } }); dialog.show(); } private static Handler getDeleteHandler(final Activity context, final Cursor cursor) { final Handler handler = new Handler() { @Override public void handleMessage(Message msg) { int what = msg.what; switch (what) { case SyncService.RESULT_SUCCESS: context.finish(); cursor.requery(); break; case SyncService.RESULT_ERROR: int code = msg.getData().getInt("error_code"); if (code == 404) { cursor.requery(); } String message = msg.getData().getString("error_message"); Utils.notify(context, message); break; default: break; } } }; return handler; } private static Handler getDeleteHandler(final Activity context, final StatusModel status, final BaseStatusArrayAdapter adapter) { final Handler handler = new Handler() { @Override public void handleMessage(Message msg) { int what = msg.what; switch (what) { case SyncService.RESULT_SUCCESS: context.finish(); adapter.remove(status); break; case SyncService.RESULT_ERROR: int code = msg.getData().getInt("error_code"); String message = msg.getData().getString("error_message"); Utils.notify(context, message); break; default: break; } } }; return handler; } private static class QuickActionListener implements OnActionItemClickListener { private Activity context; private Handler handler; private StatusModel status; public QuickActionListener(Activity context, Handler handler, StatusModel status) { this.context = context; this.handler = handler; this.status = status; } @Override public void onItemClick(QuickAction source, int pos, int actionId) { switch (actionId) { case QUICK_ACTION_ID_REPLY: UIController.doReply(context, status); break; case QUICK_ACTION_ID_DELETE: deleteStatus(context, status.getId(), handler); break; case QUICK_ACTION_ID_FAVORITE: UIController.doFavorite(context, status.getId()); break; case QUICK_ACTION_ID_UNFAVORITE: UIController.doUnFavorite(context, status.getId()); break; case QUICK_ACTION_ID_RETWEET: UIController.doRetweet(context, status); break; case QUICK_ACTION_ID_SHARE: UIController.doShare(context, status); break; case QUICK_ACTION_ID_PROFILE: UIController.showProfile(context, status.getUserId()); break; default: break; } } } }