package org.aisen.weibo.sina.ui.fragment.base; import java.util.List; import org.aisen.weibo.sina.R; import org.aisen.weibo.sina.support.bean.DestoryedCommentsBean; import org.aisen.weibo.sina.support.bean.DestoryedStatusesBean; import org.aisen.weibo.sina.support.db.SinaDB; import org.aisen.weibo.sina.support.publish.Notifier; import org.aisen.weibo.sina.support.publish.UnreadCountNotifier; import org.aisen.weibo.sina.support.utils.AppContext; import org.aisen.weibo.sina.sys.service.UnreadService; import org.aisen.weibo.sina.ui.activity.main.MainActivity; import org.aisen.weibo.sina.ui.activity.picture.PicsActivity; import org.aisen.weibo.sina.ui.activity.publish.PublishActivity; import org.aisen.weibo.sina.ui.fragment.profile.UserProfileFragment; import org.sina.android.SinaSDK; import org.sina.android.bean.Favority; import org.sina.android.bean.SetCount; import org.sina.android.bean.StatusComment; import org.sina.android.bean.StatusContent; import org.sina.android.bean.UnreadCount; import org.sina.android.bean.WeiBoUser; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.TextView; import com.m.common.context.GlobalContext; import com.m.common.utils.Logger; import com.m.support.highlighttext.ClickableTextViewMentionLinkOnTouchListener; import com.m.support.sqlite.property.Extra; import com.m.support.sqlite.util.FieldUtils; import com.m.support.task.TaskException; import com.m.support.task.WorkTask; import com.m.ui.fragment.ABaseFragment; import com.m.ui.utils.ViewUtils; /** * 程序一系列业务逻辑处理,如下:<br/> * <br/> * 1、预览图片<br/> * 2、查看用户资料--完成<br/> * 3、查看用户微博--完成<br/> * 4、取消关注--完成<br/> * 5、添加关注--完成<br/> * 6、更新备注--完成<br/> * 7、查看用户关系--完成<br/> * 8、移除粉丝--完成<br/> * 9、删除评论<br/> * 10、回复评论<br/> * 11、删除微博<br/> * 12、收藏微博<br/> * 13、取消收藏<br/> * 14、回复微博<br/> * 15、转发微博<br/> * 16、清零未读信息<br/> * 17、转发评论<br/> * 18、\@用户 * * @author wangdan */ public class BizFragment extends ABaseFragment { @Override protected int inflateContentView() { return 0; } public static BizFragment getBizFragment(ABaseFragment fragment) { if (fragment != null && fragment.getActivity() != null) { BizFragment bizFragment = (BizFragment) fragment.getActivity().getFragmentManager().findFragmentByTag("com.m.ui.BizFragment"); if (bizFragment == null) { bizFragment = new BizFragment(); fragment.getActivity().getFragmentManager().beginTransaction().add(bizFragment, "com.m.ui.BizFragment").commit(); } return bizFragment; } return null; } public static BizFragment getBizFragment(Activity context) { BizFragment bizFragment = (BizFragment) context.getFragmentManager().findFragmentByTag("BizFragment"); if (bizFragment == null) { bizFragment = new BizFragment(); context.getFragmentManager().beginTransaction().add(bizFragment, "BizFragment").commit(); } return bizFragment; } OnClickListener PreviousArrOnClickListener = new OnClickListener() { @Override public void onClick(View v) { Object[] tag = (Object[]) v.getTag(); StatusContent bean = (StatusContent) tag[0]; int selectedIndex = Integer.parseInt(tag[1].toString()); PicsActivity.launch(getActivity(), bean, selectedIndex); } }; public void previousPics(View view, StatusContent bean, int selectedIndex) { Object[] tag = new Object[] { bean, selectedIndex }; view.setTag(tag); view.setOnClickListener(PreviousArrOnClickListener); } /* 结束预览图片 */ // XXX /*查看用户详情*/ OnClickListener UserShowListener = new OnClickListener() { @Override public void onClick(View v) { WeiBoUser user = (WeiBoUser) v.getTag(); if (user != null) { UserProfileFragment.launch(getActivity(), user); } } }; public void userShow(View view, WeiBoUser user) { view.setTag(user); view.setOnClickListener(UserShowListener); } /* 结束查看用户详情 */ // XXX /*查看用户微博*/ OnClickListener userTimelineListener = new OnClickListener() { @Override public void onClick(View v) { // WeiBoUser user = (WeiBoUser) v.getTag(); // FragmentArgs args = new FragmentArgs(); // args.add(UserTimelineFragment.KEY_USER, user); // args.add(ABaseFragment.SHOW_ACTIONBAR, true); // FragmentContainerActivity.launch(BizFragment.this, UserTimelineFragment.class, args); } }; public void userTimeline(View view, WeiBoUser user) { view.setTag(user); view.setOnClickListener(userTimelineListener); } /* 结束查看用户微博 */ // XXX /*取消对某用户的关注*/ public void destoryFriendship(final WeiBoUser user, final OnDestoryFriendshipCallback callback) { new AlertDialog.Builder(getActivity()).setMessage(R.string.biz_destory_friend) .setNegativeButton(R.string.no, null) .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { new WorkTask<Void, Void, WeiBoUser>() { @Override public WeiBoUser workInBackground(Void... params) throws TaskException { return SinaSDK.getInstance(AppContext.getToken()).friendshipsDestroy(user.getIdstr()); } @Override protected void onPrepare() { super.onPrepare(); ViewUtils.createNormalProgressDialog(getActivity(), getString(R.string.biz_destory_friendship)).show(); }; @Override protected void onFailure(TaskException exception) { super.onFailure(exception); showMessage(exception.getMessage()); }; @Override protected void onSuccess(WeiBoUser result) { super.onSuccess(result); if (getActivity() == null) { return; } callback.onFriendshipDestoryed(result); }; @Override protected void onFinished() { super.onFinished(); if (getActivity() == null) { return; } ViewUtils.dismissNormalProgressDialog(); }; }.execute(); } }) .show(); } public interface OnDestoryFriendshipCallback { public void onFriendshipDestoryed(WeiBoUser targetUser); } /* 结束取消对某用户的关注 */ // XXX /*添加关注*/ public void createFriendship(final WeiBoUser user, final OnCreateFriendshipCallback callback) { new WorkTask<Void, Void, WeiBoUser>() { @Override public WeiBoUser workInBackground(Void... params) throws TaskException { return SinaSDK.getInstance(AppContext.getToken()).friendshipsCreate(user.getIdstr()); } @Override protected void onPrepare() { super.onPrepare(); ViewUtils.createNormalProgressDialog(getActivity(), getString(R.string.biz_create_friendship)).show(); }; @Override protected void onFailure(TaskException exception) { super.onFailure(exception); if (getActivity() == null) { return; } showMessage(exception.getMessage()); }; @Override protected void onSuccess(WeiBoUser result) { super.onSuccess(result); if (getActivity() == null) { return; } callback.onFriendshipCreated(result); }; @Override protected void onFinished() { super.onFinished(); if (getActivity() == null) { return; } ViewUtils.dismissNormalProgressDialog(); }; }.execute(); } public interface OnCreateFriendshipCallback { public void onFriendshipCreated(WeiBoUser targetUser); } /* 结束添加关注 */ // XXX /*添加备注*/ public void modifyUserMark(View view, WeiBoUser user, OnModifyUserRemarkCallback callback) { Object[] tag = new Object[] { user, callback }; view.setTag(tag); view.setOnClickListener(modifyUserRemarkListener); } OnClickListener modifyUserRemarkListener = new OnClickListener() { @Override public void onClick(View v) { Object[] tag = (Object[]) v.getTag(); final WeiBoUser user = (WeiBoUser) tag[0]; final OnModifyUserRemarkCallback callback = (OnModifyUserRemarkCallback) tag[1]; View entryView = View.inflate(getActivity(), R.layout.lay_dialog_remark_entry, null); final EditText editRemark = (EditText) entryView.findViewById(R.id.editRemark); editRemark.setHint(R.string.profile_remark_hint); editRemark.setText(TextUtils.isEmpty(user.getRemark()) ? "" : user.getRemark()); editRemark.setSelection(editRemark.getText().toString().length()); new AlertDialog.Builder(getActivity()).setTitle(R.string.biz_remark_update) .setView(entryView) .setNegativeButton(R.string.cancel, null) .setPositiveButton(R.string.update, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // if (TextUtils.isEmpty(dialog.getInput())) { // showMessage("备注名称不能为空"); // return true; // } new WorkTask<Void, Void, WeiBoUser>() { @Override protected void onPrepare() { super.onPrepare(); ViewUtils.createNormalProgressDialog(getActivity(), getString(R.string.biz_remark_loading)).show(); }; @Override public WeiBoUser workInBackground(Void... params) throws TaskException { return SinaSDK.getInstance(AppContext.getToken()).friendshipsRemarkUpdate(user.getIdstr(), editRemark.getText().toString()); } @Override protected void onFailure(TaskException exception) { super.onFailure(exception); if (getActivity() == null) { return; } showMessage(exception.getMessage()); }; @Override protected void onSuccess(WeiBoUser result) { super.onSuccess(result); if (getActivity() == null) { return; } callback.onModifyUserRemark(editRemark.getText().toString()); }; @Override protected void onFinished() { super.onFinished(); if (getActivity() == null) { return; } ViewUtils.dismissNormalProgressDialog(); }; }.execute(); } }) .show(); } }; public interface OnModifyUserRemarkCallback { public void onModifyUserRemark(String remark); } /* 结束添加备注 */ // XXX /*查看用户关系*/ /* 查看用户好友列表 */ public void userFriends(View view, WeiBoUser user) { // Object[] tag = new Object[] { user, FriendshipType.friends }; // view.setTag(tag); // view.setOnClickListener(userFriendsListener); } /* 查看用户好友列表 */ public void userFollowers(View view, WeiBoUser user) { // Object[] tag = new Object[] { user, FriendshipType.followers }; // view.setTag(tag); // view.setOnClickListener(userFriendsListener); } OnClickListener userFriendsListener = new OnClickListener() { @Override public void onClick(View v) { Object[] tag = (Object[]) v.getTag(); WeiBoUser user = (WeiBoUser) tag[0]; // FriendshipType type = (FriendshipType) tag[1]; // FriendshipActivity.luncheActivity(getActivity(), user, type); // 如果是登录用户,且有未读粉丝信息,清零 if (user.getIdstr().equals(AppContext.getUser().getIdstr())) { List<UnreadCount> unreadCountList = SinaDB.getSqlite().selectAll(UnreadCount.class, String.format(" %s = ? ", FieldUtils.OWNER), new String[] { AppContext.getUser().getIdstr() }); if (unreadCountList.size() > 0) { UnreadCount count = unreadCountList.get(0); if (count.getFollower() > 0) remindSetCount(RemindType.follower); } } } }; /* 结束查看用户好友列表 */ // XXX /*开始移除粉丝*/ public void destoryFollower(final WeiBoUser user, final OnDestoryFollowerCallback callback) { new AlertDialog.Builder(getActivity()) .setTitle(R.string.title_destory_friend) .setMessage(R.string.biz_destory_follower) .setNegativeButton(R.string.cancel, null) .setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { new WorkTask<Void, Void, WeiBoUser>() { @Override public WeiBoUser workInBackground(Void... params) throws TaskException { return SinaSDK.getInstance(AppContext.getToken()).friendshipsFollowersDestory(user.getIdstr()); } @Override protected void onPrepare() { super.onPrepare(); ViewUtils.createNormalProgressDialog(getActivity(), getString(R.string.biz_destory_follower_loading)).show(); }; @Override protected void onFailure(TaskException exception) { super.onFailure(exception); showMessage(exception.getMessage()); }; @Override protected void onSuccess(WeiBoUser result) { super.onSuccess(result); if (getActivity() != null) callback.onDestoryFollower(result); }; @Override protected void onFinished() { super.onFinished(); ViewUtils.dismissNormalProgressDialog(); }; }.execute(); } }) .show(); } public interface OnDestoryFollowerCallback { public void onDestoryFollower(WeiBoUser user); } /* 结束移除粉丝 */ // XXX /*转发评论*/ /* 转发评论 */ public void commentRepost(final StatusComment comment) { PublishActivity.publishCommentReply(getActivity(), null, comment, true); } // XXX /*删除评论*/ /* 删除评论 */ public void commentDestory(final StatusComment commnet, final OnCommentDestoryCallback callback) { new WorkTask<Void, Void, StatusComment>() { protected void onPrepare() { super.onPrepare(); ViewUtils.createNormalProgressDialog(getActivity(), getString(R.string.biz_delete_cmt_loading)).show(); }; protected void onFinished() { super.onFinished(); ViewUtils.dismissNormalProgressDialog(); }; protected void onSuccess(StatusComment result) { super.onSuccess(result); if (getActivity() == null) { return; } if (callback != null) callback.onCommentDestory(commnet); showMessage(R.string.delete_success); // 删除成功后,DB同时也删除 SinaDB.getSqlite().insert(null, new DestoryedCommentsBean(result.getId())); }; protected void onFailure(TaskException exception) { super.onFailure(exception); if (getActivity() == null) { return; } if (!TextUtils.isEmpty(exception.getErrorMsg())) showMessage(exception.getErrorMsg()); else showMessage(R.string.delete_faild); }; @Override public StatusComment workInBackground(Void... params) throws TaskException { return SinaSDK.getInstance(AppContext.getToken()).commentsDestory(commnet.getId()); } }.execute(); } public interface OnCommentDestoryCallback { public void onCommentDestory(StatusComment commnet); } /* 结束删除评论 */ // XXX /*回复评论*/ /* 回复评论 */ public void replyComment(StatusContent status, StatusComment comment) { if (comment.getUser() != null && !comment.getUser().getIdstr().equals(AppContext.getUser().getIdstr())) { if (status != null) comment.setStatus(status); PublishActivity.publishCommentReply(getActivity(), null, comment, false); } } /* 结束回复评论 */ // XXX /*删除微博*/ /* 开始删除微博 */ public void statusDestory(String id, final OnStatusDestoryCallback callback) { new WorkTask<String, Void, StatusContent>() { protected void onPrepare() { super.onPrepare(); ViewUtils.createNormalProgressDialog(getActivity(), getString(R.string.biz_delete_status_loading)).show(); }; protected void onFinished() { super.onFinished(); ViewUtils.dismissNormalProgressDialog(); }; protected void onSuccess(StatusContent result) { super.onSuccess(result); if (getActivity() == null) { return; } callback.onStatusDestory(result); showMessage(R.string.delete_success); // 如果删除一条微博,标记在DB中,在获取缓存微博的时候,需要排除掉已经被删除掉的微博 SinaDB.getSqlite().insert(null, new DestoryedStatusesBean(result.getId())); }; protected void onFailure(TaskException exception) { super.onFailure(exception); if (getActivity() == null) { return; } if (callback == null || !callback.onFaild(exception)) { showMessage(exception.getMessage()); } }; @Override public StatusContent workInBackground(String... params) throws TaskException { return SinaSDK.getInstance(AppContext.getToken()).statusDestroy(params[0]); } }.execute(id); } public interface OnStatusDestoryCallback { public void onStatusDestory(StatusContent status); public boolean onFaild(TaskException e); } /* 结束删除微博 */ // XXX /*收藏微博*/ /* 开始收藏微博 */ public void favorityCreate(String id, final OnFavorityCreateCallback callback) { new WorkTask<String, Void, Favority>() { protected void onPrepare() { super.onPrepare(); ViewUtils.createNormalProgressDialog(getActivity(), getString(R.string.biz_add_fav)).show(); }; protected void onFinished() { super.onFinished(); ViewUtils.dismissNormalProgressDialog(); }; protected void onSuccess(Favority result) { super.onSuccess(result); if (getActivity() == null) { return; } ViewUtils.showMessage(R.string.biz_fav_success); if (callback != null) callback.onFavorityCreate(result); }; protected void onFailure(TaskException exception) { super.onFailure(exception); if (getActivity() == null) { return; } if (callback == null || !callback.onFaild(exception)) { showMessage(exception.getMessage()); } }; @Override public Favority workInBackground(String... params) throws TaskException { return SinaSDK.getInstance(AppContext.getToken()).favoritesCreate(params[0]); } }.execute(id); } public interface OnFavorityCreateCallback { public void onFavorityCreate(Favority status); public boolean onFaild(TaskException exception); } /* 结束收藏微博 */ // XXX /*取消收藏微博*/ /* 开始取消收藏微博 */ public void favorityDestory(String id, final OnFavorityDestoryCallback callback) { new WorkTask<String, Void, Favority>() { protected void onPrepare() { super.onPrepare(); ViewUtils.createNormalProgressDialog(getActivity(), getString(R.string.biz_remove_fav)).show(); }; protected void onFinished() { super.onFinished(); ViewUtils.dismissNormalProgressDialog(); }; protected void onSuccess(Favority result) { super.onSuccess(result); if (getActivity() == null) { return; } Intent intent = new Intent(); intent.setAction("org.aisen.weibo.sina.FAV_DESTORY"); intent.putExtra("statusId", result.getStatus().getId()); // 如果是评论页面,就设置回执 getActivity().setResult(Activity.RESULT_OK, intent); // 加入是收藏列表界面,发出广播更新它 GlobalContext.getInstance().sendBroadcast(intent); ViewUtils.showMessage(R.string.biz_fav_removed); if (callback != null) callback.onFavorityDestory(result); }; protected void onFailure(TaskException exception) { super.onFailure(exception); if (getActivity() == null) { return; } if (callback == null || !callback.onFaild(exception)) { showMessage(exception.getMessage()); } else { ViewUtils.showMessage(R.string.biz_fav_remove_faild); } }; @Override public Favority workInBackground(String... params) throws TaskException { return SinaSDK.getInstance(AppContext.getToken()).favoritesDestory(params[0]); } }.execute(id); } public interface OnFavorityDestoryCallback { public void onFavorityDestory(Favority status); public boolean onFaild(TaskException exception); } /* 结束取消收藏微博 */ // XXX /*回复微博*/ /* 回复微博 */ public void commentCreate(StatusContent status) { PublishActivity.publishStatusComment(getActivity(), null, status); } /* 结束回复微博 */ // XXX /*转发微博*/ /* 转发微博 */ public void statusRepost(StatusContent status) { PublishActivity.publishStatusRepost(getActivity(), null, status); // StatusRepostFragment.lunchPublishRepost(getActivity(), status, append); } /* 结束转发微博 */ // XXX /*回到首页*/ /* 回到首页 */ public void backToMainActivity(Activity context) { Intent intent = new Intent(context, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); Logger.v("回到首页"); } /* 回到首页 */ // XXX 清零未读信息 /* 清零未读信息 */ public enum RemindType { follower, cmt, mention_status, mention_cmt } public void remindSetCount(final RemindType remindType) { final String uid = AppContext.getUser().getIdstr(); new WorkTask<RemindType, Void, SetCount>() { @Override public SetCount workInBackground(RemindType... params) throws TaskException { return SinaSDK.getInstance(AppContext.getToken()).remindSetCount(params[0].toString()); } @Override protected void onSuccess(SetCount result) { super.onSuccess(result); if (getActivity() == null) return; UnreadCount count = AppContext.getUnreadCount(); if (count != null) { UnreadCountNotifier notifier = new UnreadCountNotifier(getActivity()); if (remindType == RemindType.cmt) { count.setCmt(0); notifier.cancelNotification(Notifier.RemindUnreadComments); } else if (remindType == RemindType.follower) { count.setFollower(0); notifier.cancelNotification(Notifier.RemindUnreadForFollowers); } else if (remindType == RemindType.mention_cmt) { count.setMention_cmt(0); notifier.cancelNotification(Notifier.RemindUnreadForMentionComments); } else if (remindType == RemindType.mention_status) { count.setMention_status(0); notifier.cancelNotification(Notifier.RemindUnreadForMentionStatus); } // 更新DB SinaDB.getSqlite().insert(new Extra(uid, null), count); AppContext.setUnreadCount(count); UnreadCountNotifier.mCount = count; // 发出广播更新状态 UnreadService.sendUnreadBroadcast(); } }; }.execute(remindType); } /* 清零未读信息 */ /* 设置有@用户、话题的onTouch事件 */ public void bindOnTouchListener(TextView textView) { textView.setClickable(false); textView.setOnTouchListener(onTouchListener); } private View.OnTouchListener onTouchListener = new View.OnTouchListener() { ClickableTextViewMentionLinkOnTouchListener listener = new ClickableTextViewMentionLinkOnTouchListener(); @Override public boolean onTouch(View v, MotionEvent event) { return listener.onTouch(v, event); } }; // XXX \@用户 /* \@用户 */ public void mentionUser(Activity from, WeiBoUser user) { PublishActivity.publishStatusWithMention(from, user); } }