From 01ec14d1564175a276efbf2217ab22ff900f3cef Mon Sep 17 00:00:00 2001 From: Cold-Mint Date: Thu, 20 Apr 2023 09:59:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=88=A0=E9=99=A4=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E5=92=8C=E8=AF=84=E8=AE=BA=E4=BA=86=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rust/pro/adapters/CommentAdapter.kt | 76 +++++++++++++++++++ .../rust/pro/adapters/DynamicAdapter.kt | 69 +++++++++-------- app/src/main/res/drawable/github.xml | 10 +++ app/src/main/res/values/strings.xml | 41 +++++----- .../java/com/coldmint/rust/core/web/WebMod.kt | 58 +++++++++++++- 5 files changed, 205 insertions(+), 49 deletions(-) create mode 100644 app/src/main/res/drawable/github.xml diff --git a/app/src/main/java/com/coldmint/rust/pro/adapters/CommentAdapter.kt b/app/src/main/java/com/coldmint/rust/pro/adapters/CommentAdapter.kt index 5da613f..f14210a 100644 --- a/app/src/main/java/com/coldmint/rust/pro/adapters/CommentAdapter.kt +++ b/app/src/main/java/com/coldmint/rust/pro/adapters/CommentAdapter.kt @@ -6,12 +6,21 @@ import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.bumptech.glide.request.RequestOptions +import com.coldmint.dialog.CoreDialog +import com.coldmint.rust.core.dataBean.ApiResponse import com.coldmint.rust.core.dataBean.mod.WebModCommentData +import com.coldmint.rust.core.interfaces.ApiCallBack +import com.coldmint.rust.core.tool.AppOperator +import com.coldmint.rust.core.web.Dynamic import com.coldmint.rust.core.web.ServerConfiguration +import com.coldmint.rust.core.web.WebMod +import com.coldmint.rust.pro.R import com.coldmint.rust.pro.base.BaseAdapter import com.coldmint.rust.pro.databinding.ItemCommentBinding +import com.coldmint.rust.pro.tool.AppSettings import com.coldmint.rust.pro.tool.GlobalMethod import com.coldmint.rust.pro.tool.TextStyleMaker +import com.google.android.material.snackbar.Snackbar /** * 评论 @@ -47,6 +56,73 @@ class CommentAdapter(context: Context, dataList: MutableList + val menu = GlobalMethod.createPopMenu(view) + menu.menu.add(R.string.copy) + menu.menu.add(R.string.delete_title) + menu.setOnMenuItemClickListener { + val title = it.title + when (title) { + context.getString(R.string.copy) -> { + GlobalMethod.copyText(context, data.content, view) + } + context.getString(R.string.delete_title) -> { + CoreDialog(context).setTitle(R.string.delete_comment).setMessage( + String.format( + context.getString(R.string.delete_comment_tip), + data.userName + ) + ).setPositiveButton(R.string.dialog_ok){ + val token = AppSettings.getValue(AppSettings.Setting.Token, "") + if (token.isNullOrBlank()) { + Snackbar.make( + view, + context.getString(R.string.please_login_first), + Snackbar.LENGTH_SHORT + ).show() + } else { + WebMod.instance.modifyCommentVisibility( + token, + data.id, + object : ApiCallBack { + override fun onResponse(t: ApiResponse) { + if (t.code == ServerConfiguration.Success_Code) { + removeItem(viewHolder.adapterPosition) + Snackbar.make( + view, + t.message, + Snackbar.LENGTH_SHORT + ).show() + } else { + Snackbar.make( + viewBinding.root, + t.message, + Snackbar.LENGTH_SHORT + ).show() + } + } + + override fun onFailure(e: Exception) { + Snackbar.make( + viewBinding.root, + R.string.network_error, + Snackbar.LENGTH_SHORT + ).show() + } + }) + } + }.setNegativeButton(R.string.dialog_cancel){ + + }.show() + } + } + true + } + menu.show() + } TextStyleMaker.instance.load(viewBinding.contentView, data.content) { type, data -> TextStyleMaker.instance.clickEvent(context, type, data) } diff --git a/app/src/main/java/com/coldmint/rust/pro/adapters/DynamicAdapter.kt b/app/src/main/java/com/coldmint/rust/pro/adapters/DynamicAdapter.kt index 822bc12..7f290cf 100644 --- a/app/src/main/java/com/coldmint/rust/pro/adapters/DynamicAdapter.kt +++ b/app/src/main/java/com/coldmint/rust/pro/adapters/DynamicAdapter.kt @@ -10,6 +10,7 @@ import android.widget.PopupWindow import android.widget.Toast import com.bumptech.glide.Glide import com.bumptech.glide.request.RequestOptions +import com.coldmint.dialog.CoreDialog import com.coldmint.rust.core.dataBean.ApiResponse import com.coldmint.rust.core.dataBean.DynamicItemDataBean import com.coldmint.rust.core.interfaces.ApiCallBack @@ -62,7 +63,10 @@ class DynamicAdapter(context: Context, dataList: MutableList TextStyleMaker.instance.clickEvent(context, type, data) } - viewBinding.contentView.setOnLongClickListener { view -> + viewBinding.shareImageView.setOnClickListener { + AppOperator.shareText(context, context.getString(R.string.share_message), data.content); + } + viewBinding.moreImageView.setOnClickListener { view -> val menu = GlobalMethod.createPopMenu(view) menu.menu.add(R.string.copy) menu.menu.add(R.string.delete_title) @@ -73,42 +77,47 @@ class DynamicAdapter(context: Context, dataList: MutableList { - val account = AppSettings.getValue(AppSettings.Setting.Account, "") - val appId = - AppSettings - .getValue(AppSettings.Setting.AppID, "") - Dynamic.instance.deleteDynamic( - account, - appId, - data.id, - object : ApiCallBack { - override fun onResponse(t: ApiResponse) { - //成功与否执行都一样 - if (t.code == ServerConfiguration.Success_Code) { - removeItem(viewHolder.adapterPosition) - } - Snackbar.make( - viewBinding.root, - t.message, - Snackbar.LENGTH_SHORT - ).show() - } + CoreDialog(context).setTitle(R.string.delete_dynamic) + .setMessage(R.string.delete_dynamic_tip) + .setPositiveButton(R.string.dialog_ok) { + val account = AppSettings.getValue(AppSettings.Setting.Account, "") + val appId = + AppSettings + .getValue(AppSettings.Setting.AppID, "") + Dynamic.instance.deleteDynamic( + account, + appId, + data.id, + object : ApiCallBack { + override fun onResponse(t: ApiResponse) { + //成功与否执行都一样 + if (t.code == ServerConfiguration.Success_Code) { + removeItem(viewHolder.adapterPosition) + } + Snackbar.make( + viewBinding.root, + t.message, + Snackbar.LENGTH_SHORT + ).show() + } - override fun onFailure(e: Exception) { - Snackbar.make( - viewBinding.root, - R.string.network_error, - Snackbar.LENGTH_SHORT - ).show() - } + override fun onFailure(e: Exception) { + Snackbar.make( + viewBinding.root, + R.string.network_error, + Snackbar.LENGTH_SHORT + ).show() + } - }) + }) + }.setNegativeButton(R.string.dialog_cancel) { + + }.show() } } true } menu.show() - true } } diff --git a/app/src/main/res/drawable/github.xml b/app/src/main/res/drawable/github.xml new file mode 100644 index 0000000..6a9f2f5 --- /dev/null +++ b/app/src/main/res/drawable/github.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e85561c..9da94eb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -50,8 +50,8 @@ 正在扫描%1$s... 正在移动%1$s... 正在添加%1$s... - 已成功打包%1$s,要分享给朋友嘛? - 已成功打包%1$s,要开始导出嘛? + 已成功打包%1$s,确认分享给朋友吗? + 已成功打包%1$s,确认开始导出吗? 打包完成。 打包失败 修复完成 @@ -63,6 +63,10 @@ 数据集 数据数组(以\"|\"分割): 删除 + 删除评论 + 删除动态 + 确认删除此条动态吗? + 确认删除\"%1$s\"的评论吗? 正在删除... 正在删除\"%1$s\"... 正在还原... @@ -236,7 +240,7 @@ 不保存退出 - 检查到配置信息更新,要保存更改嘛? + 检查到配置信息更新,确认保存更改吗? 正在保存%1$s... %1$s保存完成。 保存完成。 @@ -252,7 +256,7 @@ 解压文件时出错。 不可识别的路径。 删除单位 - 要删除 %1$s 嘛? + 确认删除 %1$s 吗? 导入中... 导入 @@ -374,7 +378,7 @@ 没有找到模板 深色主题 已复制%1$s。e - 您有文件尚未保存,要保存更改嘛? + 您有文件尚未保存,确认保存更改吗? 崩溃信息 显示系统应用 选择颜色 @@ -437,6 +441,7 @@ 立即以%1$.2f元开通 打包中... 分享 + 分享 PackDirectory 清理代码缓存 自定义符号栏 @@ -542,17 +547,17 @@ 构建项目... 构建项目完成。 重构项目 - 要清理缓存数据并重新构建索引嘛? + 确认清理缓存数据并重新构建索引吗? 立即重构项目 无法解析导入类型\"%1$s\"。 无法识别路径\"%1$s\"。 uri错误。 位于%1$s第%2$d行: - 您正在尝试导入低版本的模板包(%1$s),当前版本(%2$s),这将覆盖更新的内容。要继续嘛? - %1$s已存在,这将覆盖旧的内容。要继续嘛? + 您正在尝试导入低版本的模板包(%1$s),当前版本(%2$s),这将覆盖更新的内容。确认继续吗? + %1$s已存在,这将覆盖旧的内容。确认继续吗? 无法为空文件制作模板。 使用\",\"分割参数,也可以使用\"[\"和\"]\"注解参数。例如:[喜欢:like],喜欢将被显示给用户,选中后,写入like。 - 模板添加完成,请现在退出模板制作器嘛? + 模板添加完成,现在退出模板制作器吗? 编辑模板 已智能推断文件类型为\"%1$s\"。 默认创建ini文件。 @@ -578,7 +583,7 @@ 截图: 必填 可选 - 要退出\"%1$s\"嘛? + 退出\"%1$s\"吗? 路径 从url添加 安全验证 @@ -617,7 +622,7 @@ 已互粉 已关注 取消关注 - 要取消关注\"%1$s\"嘛? + 取消关注\"%1$s\"吗? 头像: 个性签名 性别 @@ -670,7 +675,7 @@ 数据传输 允许使用数据网络 使用移动网络上传下载模组,可能会产生额外的流量费用。 - 使用移动网络上传下载模组,可能会产生额外的流量费用。仍然继续嘛? + 使用移动网络上传下载模组,可能会产生额外的流量费用。仍然继续吗? usingMobileNetwork 请先关注你喜欢的作者 我的关注 @@ -684,7 +689,7 @@ 关注新作 版本名显示在更新记录内。 上架重新需要审核,要下架嘛? - 要重新审核%1$s嘛? + 确认重新审核%1$s吗? 重新审核 仓库 没有地图 @@ -742,7 +747,7 @@ 微信 设置 订单列表 - 要复制订单编号(%1$s)嘛? + 确认复制订单编号(%1$s)吗? 确认要移除粉丝 %1$s 嘛? 同时将此用户加入黑名单 拒绝关注 @@ -827,7 +832,7 @@ 订单管理 登出 最近登录:%1$s ip归属地:%2$s - 将使用优惠券创建订单,仍继续嘛?(创建订单完成后,将优惠券消耗) + 将使用优惠券创建订单,仍继续吗?(创建订单完成后,将优惠券消耗) 使用 账号/电子邮件 找不到用户,请检查电子邮件地址是否正确。 @@ -860,10 +865,10 @@ 版本更新与用户体验计划 experiencePlan 订单超时,无法支付。 - 请问您付款了嘛?(未支付的订单将过期,无法再为其付款)。 + 请问您付款了吗?(未支付的订单将过期,无法再为其付款)。 是的,我付款了 放弃订单 - 已为您优惠%1$.2f元,仍然放弃订单嘛,放弃订单后不返还优惠券。 + 已为您优惠%1$.2f元,仍然放弃订单吗,放弃订单后不返还优惠券。 继续支付 不知道自己的邮箱地址?点击这里查看帮助 QQ号 @@ -902,7 +907,7 @@ 定制编辑框 订阅 退订 - 要退订%1$s嘛? + 确认退订%1$s吗? 关键字颜色 普通文本颜色 字体颜色 diff --git a/assistantCoreLibrary/src/main/java/com/coldmint/rust/core/web/WebMod.kt b/assistantCoreLibrary/src/main/java/com/coldmint/rust/core/web/WebMod.kt index 493c336..e6c2eb2 100644 --- a/assistantCoreLibrary/src/main/java/com/coldmint/rust/core/web/WebMod.kt +++ b/assistantCoreLibrary/src/main/java/com/coldmint/rust/core/web/WebMod.kt @@ -21,7 +21,8 @@ class WebMod private constructor() { Latest_Time("latestTime"), Download_Number("downloadNumber"), Coin_Number("coinNumber"), Unit_Number( "unitNumber" - ),Update_Number("updateNumber"); + ), + Update_Number("updateNumber"); /** * 获取枚举代表的值 @@ -200,6 +201,61 @@ class WebMod private constructor() { } + /** + * 修改评论可见状态(默认隐藏评论) + */ + fun modifyCommentVisibility( + adminToken: String, + commentId: Int, + apiCallBack: ApiCallBack, + hide: Boolean = true + ) { + val hideCode = if (hide) 1 else 0 + val okHttpClient = ServerConfiguration.initOkHttpClient() + val requestBodyBuilder: FormBody.Builder = + FormBody.Builder().add("adminToken", adminToken).add("commentId", commentId.toString()) + .add("hide", hideCode.toString()) + val requestBody = requestBodyBuilder.build() + val request = + Request.Builder() + .url(ServerConfiguration.website + "php/mod.php?action=modifyCommentVisibility") + .post(requestBody).build() + val call = okHttpClient.newCall(request) + val handler = Handler(Looper.getMainLooper()) + val gson = Gson() + call.enqueue(object : Callback { + override fun onFailure(call: Call, e: IOException) { + e.printStackTrace() + handler.post { apiCallBack.onFailure(e) } + } + + override fun onResponse(call: Call, response: Response) { + try { + val body = response.body + if (body == null) { + handler.post { + apiCallBack.onFailure(NullPointerException()) + } + } else { + val data = body.string() + val finalApiResponse = + gson.fromJson(data, ApiResponse::class.java) + handler.post { + apiCallBack.onResponse(finalApiResponse) + } + } + } catch (e: Exception) { + e.printStackTrace() + handler.post { + apiCallBack.onFailure(e) + } + } + } + + }) + } + + /** * 加载随机推荐 * @param number Int 推荐数量