/* * The MIT License (MIT) * * Copyright (c) 2014-2015 Umeng, Inc * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package com.umeng.comm.ui.presenter.impl; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import android.annotation.SuppressLint; import android.app.Dialog; import android.content.DialogInterface; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; import com.umeng.comm.core.beans.CommConfig; import com.umeng.comm.core.beans.CommUser; import com.umeng.comm.core.beans.CommUser.Permisson; import com.umeng.comm.core.beans.CommUser.SubPermission; import com.umeng.comm.core.beans.Comment; import com.umeng.comm.core.beans.FeedItem; import com.umeng.comm.core.constants.ErrorCode; import com.umeng.comm.core.listeners.Listeners.CommListener; import com.umeng.comm.core.listeners.Listeners.FetchListener; import com.umeng.comm.core.nets.Response; import com.umeng.comm.core.nets.responses.SimpleResponse; import com.umeng.comm.core.nets.uitls.NetworkUtils; import com.umeng.comm.core.utils.ResFinder; import com.umeng.comm.core.utils.TimeUtils; import com.umeng.comm.core.utils.ToastMsg; import com.umeng.comm.ui.dialogs.ConfirmDialog; import com.umeng.comm.ui.mvpview.MvpCommentView; import com.umeng.comm.ui.presenter.BasePresenter; import com.umeng.comm.ui.utils.BroadcastUtils; public class CommentPresenter extends BasePresenter { MvpCommentView mCommentView; FeedItem mFeedItem; public CommentPresenter(MvpCommentView commentView, FeedItem feedItem) { mCommentView = commentView; mFeedItem = feedItem; } public void setFeedItem(FeedItem feedItem) { this.mFeedItem = feedItem; } /** * 根据评论的内容、评论者等信息创建一条评论 * * @param commentText 评论的内容 * @return */ private Comment createComment(String commentText, CommUser replyUser, String replyCommentId) { final Comment comment = new Comment(); comment.feedId = mFeedItem.id; comment.text = commentText; comment.creator = CommConfig.getConfig().loginedUser; comment.replyUser = replyUser; if (!TextUtils.isEmpty(replyCommentId)) { comment.replyCommentId = replyCommentId; } return comment; } /** * 发送评论 */ public void postComment(String text, final CommUser replyUser, String replyCommentId) { final Comment comment = createComment(text, replyUser, replyCommentId); FetchListener<SimpleResponse> wrapListener = new FetchListener<SimpleResponse>() { @Override public void onStart() { } @Override public void onComplete(SimpleResponse response) { if (NetworkUtils.handleResponseComm(response)) { return; } if (response.errCode != ErrorCode.NO_ERROR) { ToastMsg.showShortMsgByResName("umeng_comm_post_comment_failed"); return; } ToastMsg.showShortMsgByResName("umeng_comm_post_comment_success"); mFeedItem.commentCount++; comment.createTime = TimeUtils.format(formatDate()); comment.id = response.id; mFeedItem.comments.add(0, comment); BroadcastUtils.sendFeedUpdateBroadcast(mContext, mFeedItem); if (mCommentView != null) { mCommentView.postCommentSuccess(comment, replyUser); } } }; // 发布评论 mCommunitySDK.postComment(comment, wrapListener); } private void spamComment(String commentId) { mCommunitySDK.spamComment(commentId, new CommListener() { @Override public void onStart() { } @Override public void onComplete(Response response) { if (NetworkUtils.handleResponseComm(response)) { return; } if (response.errCode == ErrorCode.NO_ERROR) { ToastMsg.showShortMsgByResName("umeng_comm_text_spammer_success"); } else if (response.errCode == ErrorCode.SPAMMERED_CODE) { ToastMsg.showShortMsgByResName("umeng_comm_comment_text_spammered"); } else { ToastMsg.showShortMsgByResName("umeng_comm_text_spammer_failed"); } } }); } @SuppressLint("SimpleDateFormat") private String formatDate() { // 转换为24小时制式的字串 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = Calendar.getInstance().getTime(); return df.format(date); } private void showConfirmDialog(final Comment comment, String tips, DialogInterface.OnClickListener listener) { ConfirmDialog.showDialog(mContext, tips, listener); } private void deleteComment(final Comment comment) { mCommunitySDK.deleteComment(mFeedItem.id, comment.id, new CommListener() { @Override public void onStart() { } @Override public void onComplete(Response response) { if ( NetworkUtils.handleResponseComm(response) ) { return ; } if (response.errCode == ErrorCode.NO_ERROR) { mFeedItem.comments.remove(comment); mFeedItem.commentCount--; mCommentView.onCommentDeleted(comment); mDatabaseAPI.getCommentAPI().deleteCommentsFromDB(comment.id); } else { ToastMsg.showShortMsgByResName("umeng_comm_delete_comment_failed"); } } }); } /** * 点击详情页面的评论item,如果是自己创建的评论,那么自己可以删除;如果是在自己发布的feed页面,那么自己可以删除、或者回复他人的评论 * * @param comment */ public void clickCommentItem(int position, final Comment comment) { CommUser loginUser = CommConfig.getConfig().loginedUser; // 自己创建的评论可以删除 if (comment.creator.id.equals(loginUser.id)) { showConfirmDialog(comment, ResFinder.getString("umeng_comm_delete_comment"), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { deleteComment(comment); } }); } else if (isMyFeed(comment, loginUser.id)) { // 在自己发布的feed页面可以删除或者回复他人的评论 showSelectDialog(position, comment, true); } else { boolean hasDeletePermission = (loginUser.permisson == Permisson.ADMIN && loginUser.subPermissions .contains(SubPermission.DELETE_CONTENT)); showSelectDialog(position, comment, hasDeletePermission); } } /** * 是否可以删除评论。可删除的条件是:自己的评论</br> * * @param comment * @return */ public boolean isMyFeed(Comment comment, String loginUserId) { // 如果该feed是自己创建,则可以删除该feed下的所有评论 if (loginUserId.equals(mFeedItem.creator.id)) { return true; } return comment != null && comment.creator.id.equals(loginUserId); } /** * 弹出举报或者回复对话框 */ private void showSelectDialog(final int position, final Comment comment, final boolean delete) { final Dialog selectDialog = new Dialog(mContext, ResFinder.getStyle("umeng_comm_action_dialog_fullscreen")); selectDialog.setCanceledOnTouchOutside(true); selectDialog.setContentView(ResFinder.getLayout("umeng_comm_report_reply_comment_dialog")); TextView reportTextView = (TextView) selectDialog.findViewById(ResFinder .getId("umeng_comm_report_comment_tv")); if (delete) { reportTextView.setText(ResFinder.getString("umeng_comm_delete_feed_tips")); } reportTextView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { selectDialog.dismiss(); String tips = delete ? ResFinder.getString("umeng_comm_delete_comment") : ResFinder .getString("umeng_comm_confirm_spam"); showConfirmDialog(comment, tips, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (delete) { deleteComment(comment); } else { spamComment(comment.id); } } }); } }); TextView replyTextView = (TextView) selectDialog.findViewById(ResFinder .getId("umeng_comm_reply_comment_tv")); replyTextView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { selectDialog.dismiss(); mCommentView.showCommentLayout(position, comment); } }); selectDialog.show(); } }