feat: 文章增加评论删除功能—客户端 https://jira.shanqu.cc/browse/GHZS-2308

This commit is contained in:
曾祥俊
2023-05-09 17:26:29 +08:00
parent ed79b230aa
commit 6506a18d6f
12 changed files with 353 additions and 80 deletions

View File

@ -3,11 +3,15 @@ package com.gh.common.util;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;
import androidx.annotation.Nullable;
@ -19,6 +23,7 @@ import com.gh.gamecenter.adapter.viewholder.CommentViewHolder;
import com.gh.gamecenter.common.callback.SimpleCallback;
import com.gh.gamecenter.common.retrofit.BiResponse;
import com.gh.gamecenter.common.retrofit.Response;
import com.gh.gamecenter.common.utils.DialogHelper;
import com.gh.gamecenter.common.utils.ExtensionsKt;
import com.gh.gamecenter.common.utils.ImageUtils;
import com.gh.gamecenter.core.utils.DisplayUtils;
@ -45,6 +50,7 @@ import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
@ -105,7 +111,8 @@ public class CommentUtils {
public static void showReportDialog(final CommentEntity commentEntity,
final Context context,
final boolean showConversation,
final String patch) {
final String patch,
final OnCommentDeleteListener onCommentDeleteListener) {
final Dialog dialog = new Dialog(context);
LinearLayout container = new LinearLayout(context);
@ -121,6 +128,15 @@ public class CommentUtils {
dialogType.add("查看对话");
}
String commentUserId = commentEntity.getUser().getId();
String userId = UserManager.getInstance().getUserId();
MeEntity me = commentEntity.getMe();
boolean isCommentedByUser = Objects.equals(commentUserId, userId);
boolean isContentAuthorOrModerator = me != null && (me.isModerator() || me.isContentAuthor());
if (isCommentedByUser || isContentAuthorOrModerator) {
dialogType.add("删除");
}
for (String s : dialogType) {
final TextView reportTv = new TextView(context);
reportTv.setText(s);
@ -143,11 +159,23 @@ public class CommentUtils {
case "投诉":
CheckLoginUtils.checkLogin(context, patch + "-投诉",
() -> showReportTypeDialog(commentEntity, context));
break;
case "查看对话":
context.startActivity(CommentDetailActivity.getIntent(context, commentEntity.getId(), null));
break;
case "删除":
DialogHelper.INSTANCE.showDialog(
context,
"提示",
"删除评论后,评论下所有的回复都将被删除",
"删除",
"取消",
() -> {
deleteComment(context, commentEntity, onCommentDeleteListener);
return null;
}
);
break;
}
});
}
@ -158,6 +186,83 @@ public class CommentUtils {
}
public static void showMorePopupWindow(
final View anchor,
final CommentEntity commentEntity,
final boolean showConversation,
final String patch,
final OnCommentDeleteListener onCommentDeleteListener
) {
Context context = anchor.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
View contentView = inflater.inflate(R.layout.layout_popup_container, null);
PopupWindow popupWindow = new PopupWindow(
contentView,
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
popupWindow.setBackgroundDrawable(new ColorDrawable(0));
popupWindow.setTouchable(true);
popupWindow.setFocusable(true);
popupWindow.setOutsideTouchable(true);
LinearLayout container = contentView.findViewById(R.id.container);
List<String> dialogType = new ArrayList<>();
dialogType.add("复制");
dialogType.add("投诉");
if (commentEntity.getParent() != null && showConversation) {
dialogType.add("查看对话");
}
String commentUserId = commentEntity.getUser().getId();
String userId = UserManager.getInstance().getUserId();
MeEntity me = commentEntity.getMe();
boolean isCommentedByUser = Objects.equals(commentUserId, userId);
boolean isContentAuthorOrModerator = me != null && (me.isModerator() || me.isContentAuthor());
if (isCommentedByUser || isContentAuthorOrModerator) {
dialogType.add("删除");
}
for (String s : dialogType) {
View itemView = inflater.inflate(R.layout.layout_popup_option_item, container, false);
TextView reportTv = itemView.findViewById(R.id.hint_text);
reportTv.setText(s);
container.addView(itemView);
reportTv.setOnClickListener(v -> {
popupWindow.dismiss();
switch (reportTv.getText().toString()) {
case "复制":
copyText(commentEntity.getContent(), context);
break;
case "投诉":
CheckLoginUtils.checkLogin(context, patch + "-投诉",
() -> showReportTypeDialog(commentEntity, context));
break;
case "查看对话":
context.startActivity(CommentDetailActivity.getIntent(context, commentEntity.getId(), null));
break;
case "删除":
DialogHelper.INSTANCE.showDialog(
context,
"提示",
"删除评论后,评论下所有的回复都将被删除",
"删除",
"取消",
() -> {
deleteComment(context, commentEntity, onCommentDeleteListener);
return null;
}
);
break;
}
});
}
ExtensionsKt.showAutoOrientation(popupWindow, anchor, 0, 0);
}
private static void showReportTypeDialog(final CommentEntity commentEntity, final Context context) {
final String[] arrReportType = new String[]{"垃圾广告营销", "恶意攻击谩骂", "淫秽色情信息",
"违法有害信息", "其它"};
@ -430,6 +535,28 @@ public class CommentUtils {
});
}
public static void deleteComment(
final Context context,
final CommentEntity commentEntity,
final OnCommentDeleteListener listener
) {
Dialog dialog = DialogUtils.showWaitDialog(
context,
context.getString(R.string.post_dialog_hint)
);
RetrofitManager.getInstance().getApi()
.deleteComment(commentEntity.getId())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doFinally(dialog::cancel)
.subscribe(new Response<ResponseBody>() {
@Override
public void onResponse(@Nullable ResponseBody response) {
listener.onCommentDelete();
}
});
}
// 设置评论item 用户相关的view(点赞/头像/用户名)
public static void setCommentUserView(Context mContext, CommentViewHolder holder, CommentEntity entity) {
@ -540,4 +667,8 @@ public class CommentUtils {
public interface OnVoteListener {
void onVote();
}
public interface OnCommentDeleteListener {
void onCommentDelete();
}
}