381 lines
18 KiB
Kotlin
381 lines
18 KiB
Kotlin
package com.gh.common.util
|
|
|
|
import android.content.Context
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import android.widget.LinearLayout
|
|
import android.widget.TextView
|
|
import com.gh.common.util.CommentUtils.copyText
|
|
import com.gh.common.view.BugFixedPopupWindow
|
|
import com.gh.gamecenter.CommentDetailActivity
|
|
import com.gh.gamecenter.R
|
|
import com.gh.gamecenter.entity.CommentEntity
|
|
import com.gh.gamecenter.entity.MeEntity
|
|
import com.gh.gamecenter.entity.Permissions
|
|
import com.gh.gamecenter.manager.UserManager
|
|
import com.gh.gamecenter.qa.comment.OnCommentOptionClickListener
|
|
import com.gh.gamecenter.retrofit.Response
|
|
import com.gh.gamecenter.retrofit.RetrofitManager
|
|
import com.halo.assistant.HaloApp
|
|
import com.lightgame.utils.Utils
|
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
|
import io.reactivex.schedulers.Schedulers
|
|
import okhttp3.ResponseBody
|
|
import org.json.JSONException
|
|
import org.json.JSONObject
|
|
import retrofit2.HttpException
|
|
|
|
object CommentHelper {
|
|
|
|
@JvmStatic
|
|
fun showCommunityArticleCommentOptions(view: View,
|
|
commentEntity: CommentEntity,
|
|
showConversation: Boolean,
|
|
articleId: String,
|
|
communityId: String,
|
|
isShowTop: Boolean = false,
|
|
ignoreModerator: Boolean = false,
|
|
listener: OnCommentOptionClickListener?) {
|
|
showCommentOptions(view = view,
|
|
commentEntity = commentEntity,
|
|
showConversation = showConversation,
|
|
articleId = articleId,
|
|
communityId = communityId,
|
|
isShowTop = isShowTop,
|
|
ignoreModerator = ignoreModerator,
|
|
listener = listener)
|
|
}
|
|
|
|
@JvmStatic
|
|
fun showAnswerCommentOptions(view: View,
|
|
commentEntity: CommentEntity,
|
|
showConversation: Boolean,
|
|
answerId: String,
|
|
listener: OnCommentOptionClickListener?) {
|
|
showCommentOptions(view = view,
|
|
commentEntity = commentEntity,
|
|
showConversation = showConversation,
|
|
answerId = answerId,
|
|
listener = listener)
|
|
}
|
|
|
|
@JvmStatic
|
|
fun showVideoCommentOptions(view: View,
|
|
commentEntity: CommentEntity,
|
|
showConversation: Boolean,
|
|
videoId: String,
|
|
isVideoAuthor: Boolean,
|
|
listener: OnCommentOptionClickListener?) {
|
|
showCommentOptions(view = view,
|
|
commentEntity = commentEntity,
|
|
showConversation = showConversation,
|
|
videoId = videoId,
|
|
isVideoAuthor = isVideoAuthor,
|
|
listener = listener)
|
|
}
|
|
|
|
private fun showCommentOptions(view: View,
|
|
commentEntity: CommentEntity,
|
|
showConversation: Boolean,
|
|
articleId: String? = null,
|
|
communityId: String? = null,
|
|
answerId: String? = null,
|
|
videoId: String? = null,
|
|
isShowTop: Boolean = false,
|
|
ignoreModerator: Boolean = false,
|
|
isVideoAuthor: Boolean = false,
|
|
listener: OnCommentOptionClickListener? = null) {
|
|
val context = view.context
|
|
val dialogOptions = ArrayList<String>()
|
|
if (isShowTop && articleId != null && commentEntity.me?.isArticleOrAnswerAuthor == true) {
|
|
dialogOptions.add(if (commentEntity.isTop) "取消置顶" else "置顶")
|
|
}
|
|
|
|
dialogOptions.add("复制")
|
|
if (commentEntity.user.id != UserManager.getInstance().userId) {
|
|
dialogOptions.add("投诉")
|
|
}
|
|
if (isVideoAuthor || (videoId != null && commentEntity.user.id == UserManager.getInstance().userId)) {
|
|
dialogOptions.add("删除评论")
|
|
} else if (articleId != null && (commentEntity.user.id == UserManager.getInstance().userId ||
|
|
commentEntity.me?.isModerator == true || commentEntity.me?.isArticleOrAnswerAuthor == true)) {
|
|
dialogOptions.add("删除评论")
|
|
}
|
|
|
|
commentEntity.me?.let {
|
|
if (ignoreModerator) return@let
|
|
|
|
if (it.isModerator || (it.moderatorPermissions.hideAnswerComment > Permissions.GUEST
|
|
|| it.moderatorPermissions.topAnswerComment > Permissions.GUEST
|
|
|| it.moderatorPermissions.hideCommunityArticleComment > Permissions.GUEST
|
|
|| it.moderatorPermissions.topCommunityArticleComment > Permissions.GUEST)) {
|
|
dialogOptions.add("管理")
|
|
}
|
|
}
|
|
|
|
if (commentEntity.parentUser != null && showConversation) {
|
|
dialogOptions.add("查看对话")
|
|
}
|
|
|
|
val inflater = LayoutInflater.from(context)
|
|
val layout = inflater.inflate(R.layout.comment_more_option, null)
|
|
val popupWindow = BugFixedPopupWindow(layout,
|
|
LinearLayout.LayoutParams.WRAP_CONTENT,
|
|
LinearLayout.LayoutParams.WRAP_CONTENT)
|
|
val container = layout.findViewById<LinearLayout>(R.id.container)
|
|
for (text in dialogOptions) {
|
|
val item = inflater.inflate(R.layout.comment_more_option_item, container, false)
|
|
container.addView(item)
|
|
|
|
val hitText = item.findViewById<TextView>(R.id.hint_text)
|
|
hitText.text = text
|
|
|
|
item.setOnClickListener {
|
|
popupWindow.dismiss()
|
|
listener?.onCommentOptionClick(commentEntity, text)
|
|
when (text) {
|
|
"管理" -> showControlDialog(context, answerId, articleId, communityId, commentEntity, commentEntity.me!!)
|
|
|
|
"复制" -> copyText(commentEntity.content, context)
|
|
|
|
"投诉" -> {
|
|
context.ifLogin("回答详情-评论-投诉") {
|
|
showReportTypeDialog(context, !videoId.isNullOrEmpty()) { reportType ->
|
|
|
|
val commentListener = object : PostCommentUtils.PostCommentListener {
|
|
override fun postSuccess(response: JSONObject?) {
|
|
Utils.toast(context, "感谢您的投诉")
|
|
}
|
|
|
|
override fun postFailed(error: Throwable?) {
|
|
if (error == null) {
|
|
Utils.toast(context, "投诉失败,请稍后重试")
|
|
} else {
|
|
Utils.toast(context, "投诉失败,${error.message}")
|
|
}
|
|
}
|
|
}
|
|
|
|
if (answerId != null) {
|
|
PostCommentUtils.postAnswerReportData(context, commentEntity.id, answerId, reportType, commentListener)
|
|
} else if (articleId != null) {
|
|
PostCommentUtils.reportCommunityArticleComment(context, communityId, articleId, commentEntity.id, reportType, commentListener)
|
|
} else {
|
|
PostCommentUtils.reportVideoComment(context, videoId, commentEntity.id, reportType, commentListener)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
"查看对话" -> {
|
|
if (answerId != null) {
|
|
context.startActivity(CommentDetailActivity
|
|
.getAnswerCommentIntent(context, commentEntity.id, answerId, null))
|
|
} else if (articleId != null) {
|
|
context.startActivity(CommentDetailActivity
|
|
.getCommunityArticleCommentIntent(context, articleId, commentEntity.id, communityId, null))
|
|
} else {
|
|
context.startActivity(CommentDetailActivity
|
|
.getVideoCommentIntent(context, commentEntity.id, videoId, isVideoAuthor, null))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
popupWindow.isTouchable = true
|
|
popupWindow.isFocusable = true
|
|
|
|
popupWindow.showAutoOrientation(view)
|
|
}
|
|
|
|
private fun showControlDialog(context: Context,
|
|
answerId: String? = null,
|
|
articleId: String? = null,
|
|
communityId: String? = null,
|
|
comment: CommentEntity,
|
|
me: MeEntity) {
|
|
val dialogOptions = arrayListOf<String>()
|
|
val highlight = "置顶评论"
|
|
val hide = "隐藏评论"
|
|
|
|
var canHighlightCommentDirectly = false
|
|
var canHideCommentDirectly = false
|
|
|
|
if (me.isModerator || me.moderatorPermissions.topAnswerComment > Permissions.GUEST
|
|
|| me.moderatorPermissions.topCommunityArticleComment > Permissions.GUEST) {
|
|
dialogOptions.add(highlight)
|
|
if (me.moderatorPermissions.topAnswerComment > Permissions.REPORTER
|
|
|| me.moderatorPermissions.topCommunityArticleComment > Permissions.REPORTER) {
|
|
canHighlightCommentDirectly = true
|
|
}
|
|
}
|
|
|
|
if (me.isModerator || me.moderatorPermissions.hideAnswerComment > Permissions.GUEST
|
|
|| me.moderatorPermissions.hideCommunityArticleComment > Permissions.GUEST) {
|
|
dialogOptions.add(hide)
|
|
if (me.moderatorPermissions.hideAnswerComment > Permissions.REPORTER
|
|
|| me.moderatorPermissions.hideCommunityArticleComment > Permissions.REPORTER) {
|
|
canHideCommentDirectly = true
|
|
}
|
|
}
|
|
|
|
val highlightDialogHintContent = if (canHighlightCommentDirectly) {
|
|
"你的操作将立即生效,确定提交吗?(你的管理权限为:高级)"
|
|
} else {
|
|
"你的操作将提交给小编审核,确定提交吗?"
|
|
}
|
|
|
|
val hideDialogHintContent = if (canHideCommentDirectly) {
|
|
"你的操作将立即生效,确定提交吗?(你的管理权限为:高级)"
|
|
} else {
|
|
"你的操作将提交给小编审核,确定提交吗?"
|
|
}
|
|
|
|
val disabledOptions = arrayListOf<String>()
|
|
|
|
if (comment.priority != 0) {
|
|
disabledOptions.add(highlight)
|
|
}
|
|
|
|
comment.me?.let {
|
|
if (it.isCommentOwner) {
|
|
disabledOptions.add(highlight)
|
|
}
|
|
}
|
|
|
|
DialogUtils.showListDialog(context, dialogOptions, disabledOptions) {
|
|
when (it) {
|
|
highlight -> {
|
|
if (comment.priority != 0) {
|
|
Utils.toast(context, "评论已经置顶")
|
|
return@showListDialog
|
|
}
|
|
|
|
comment.me?.let { me ->
|
|
if (me.isCommentOwner) {
|
|
Utils.toast(context, "不能置顶自己的评论")
|
|
return@showListDialog
|
|
}
|
|
}
|
|
|
|
val highlightObserver = object : Response<ResponseBody>() {
|
|
override fun onResponse(response: ResponseBody?) {
|
|
if (canHighlightCommentDirectly) {
|
|
Utils.toast(context, "置顶成功,请刷新列表")
|
|
} else {
|
|
Utils.toast(context, "提交成功")
|
|
}
|
|
}
|
|
|
|
override fun onFailure(e: HttpException?) {
|
|
super.onFailure(e)
|
|
e?.let { httpException ->
|
|
if (httpException.code() == 403) {
|
|
val string = e.response().errorBody()?.string()
|
|
val errorJson = JSONObject(string)
|
|
val errorCode = errorJson.getInt("code")
|
|
if (errorCode == 403059) {
|
|
Utils.toast(HaloApp.getInstance().application, "权限错误,请刷新后重试")
|
|
return
|
|
} else {
|
|
Utils.toast(HaloApp.getInstance().application, e.message())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (answerId != null) {
|
|
DialogUtils.showAlertDialog(context, highlight, highlightDialogHintContent,
|
|
"确定", "取消", {
|
|
RetrofitManager.getInstance(context).api
|
|
.highlightAnswerComment(answerId, comment.id)
|
|
.observeOn(AndroidSchedulers.mainThread())
|
|
.subscribeOn(Schedulers.io())
|
|
.subscribe(highlightObserver)
|
|
}, null)
|
|
} else {
|
|
DialogUtils.showAlertDialog(context, highlight, highlightDialogHintContent,
|
|
"确定", "取消", {
|
|
RetrofitManager.getInstance(context).api
|
|
.highlightCommunityArticleComment(communityId, articleId, comment.id)
|
|
.observeOn(AndroidSchedulers.mainThread())
|
|
.subscribeOn(Schedulers.io())
|
|
.subscribe(highlightObserver)
|
|
}, null)
|
|
}
|
|
}
|
|
|
|
hide -> {
|
|
val hideObserver = object : Response<ResponseBody>() {
|
|
override fun onResponse(response: ResponseBody?) {
|
|
if (canHideCommentDirectly) {
|
|
Utils.toast(context, "隐藏成功,请刷新列表")
|
|
} else {
|
|
Utils.toast(context, "提交成功")
|
|
}
|
|
}
|
|
|
|
override fun onFailure(e: HttpException?) {
|
|
super.onFailure(e)
|
|
e?.let { httpException ->
|
|
if (httpException.code() == 403) {
|
|
val string = e.response().errorBody()?.string()
|
|
val errorJson = JSONObject(string)
|
|
val errorCode = errorJson.getInt("code")
|
|
if (errorCode == 403059) {
|
|
Utils.toast(HaloApp.getInstance().application, "权限错误,请刷新后重试")
|
|
return
|
|
} else {
|
|
Utils.toast(HaloApp.getInstance().application, e.message())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (answerId != null) {
|
|
DialogUtils.showAlertDialog(context, hide, hideDialogHintContent,
|
|
"确定", "取消", {
|
|
RetrofitManager.getInstance(context).api
|
|
.hideAnswerComment(answerId, comment.id)
|
|
.observeOn(AndroidSchedulers.mainThread())
|
|
.subscribeOn(Schedulers.io())
|
|
.subscribe(hideObserver)
|
|
}, null)
|
|
} else {
|
|
DialogUtils.showAlertDialog(context, hide, hideDialogHintContent,
|
|
"确定", "取消", {
|
|
RetrofitManager.getInstance(context).api
|
|
.hideCommunityArticleComment(communityId, articleId, comment.id)
|
|
.observeOn(AndroidSchedulers.mainThread())
|
|
.subscribeOn(Schedulers.io())
|
|
.subscribe(hideObserver)
|
|
}, null)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun showReportTypeDialog(context: Context, isVideoComment: Boolean, reportCallback: (reportType: String) -> Unit) {
|
|
val reportTypes = arrayListOf("垃圾广告营销", "恶意攻击谩骂", "淫秽色情信息", "违法有害信息", "其它")
|
|
|
|
if (!isVideoComment) {
|
|
DialogUtils.showListDialog(context, reportTypes, null) { text ->
|
|
val jsonObject = JSONObject()
|
|
try {
|
|
jsonObject.put("reason", text)
|
|
reportCallback.invoke(jsonObject.toString())
|
|
} catch (e: JSONException) {
|
|
e.printStackTrace()
|
|
}
|
|
}
|
|
} else {
|
|
DialogUtils.showVideoComplaintDialog(context, reportTypes, null) { text ->
|
|
reportCallback.invoke(text)
|
|
}
|
|
}
|
|
}
|
|
|
|
} |