diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e109f16..dfeacd2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -54,6 +54,11 @@
android:launchMode="singleTop"
android:theme="@style/AppTheme">
+
+
- dialog.dismiss()
- updateRobotQaUrl("")
- }
- .addAction(getString(R.string.cancel)) { dialog, index -> dialog.dismiss() }
- .addAction(getString(R.string.add)) { dialog, index ->
- val text = builder.editText.text
- if (text != null) {
- if (text.matches("https?://[^/]+.*".toRegex())) {
- dialog.dismiss()
- updateRobotQaUrl(text.toString().trim())
- } else {
- ToastUtils.showLong("格式异常!")
- }
- } else {
- ToastUtils.showLong("请勿为空!")
- }
- }
- .create(R.style.QMUI_Dialog).show()
- }
-
private fun showDonateDialog() {
DonateUtil.zfbDonate(this)
}
@@ -183,40 +153,6 @@ class SettingsActivity : AppCompatActivity() {
}
}
- private fun updateRobotQaUrl(callbackUrl: String) {
- try {
- val json = hashMapOf()
- json["robotId"] = Constant.robotId
- if (callbackUrl.isEmpty()) {
- json["openCallback"] = 0
- } else {
- json["openCallback"] = 1
- json["callbackUrl"] = callbackUrl
- }
- val requestBody = RequestBody.create(
- MediaType.parse("application/json;charset=UTF-8"),
- GsonUtils.toJson(json)
- )
- val call = object : StringCallback() {
- override fun onSuccess(response: Response?) {
- if (response != null && JSONObject(response.body()).getInt("code") == 200) {
- Constant.qaUrl = callbackUrl
- ToastUtils.showLong(if (callbackUrl.isEmpty()) "关闭成功" else "更新成功")
- } else {
- onError(response)
- }
- }
-
- override fun onError(response: Response?) {
- ToastUtils.showLong(if (callbackUrl.isEmpty()) "关闭失败,请稍后再试~" else "更新失败,请稍后再试~")
- }
- }
- OkGo.post(Constant.getRobotUpdateUrl()).upRequestBody(requestBody).execute(call)
- } catch (e: Exception) {
- throw RuntimeException(e)
- }
- }
-
private fun updateRobotReplyStrategy(type: Int) {
try {
val json = hashMapOf()
diff --git a/app/src/main/java/org/yameida/worktool/activity/SettingsAdvanceActivity.kt b/app/src/main/java/org/yameida/worktool/activity/SettingsAdvanceActivity.kt
new file mode 100644
index 0000000..5c39a96
--- /dev/null
+++ b/app/src/main/java/org/yameida/worktool/activity/SettingsAdvanceActivity.kt
@@ -0,0 +1,228 @@
+package org.yameida.worktool.activity
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.text.InputType
+import android.view.View
+import android.view.WindowManager
+import android.widget.CompoundButton
+import androidx.appcompat.app.AppCompatActivity
+import com.blankj.utilcode.util.*
+import com.lzy.okgo.OkGo
+import com.lzy.okgo.callback.StringCallback
+import com.lzy.okgo.model.Response
+import com.qmuiteam.qmui.widget.dialog.QMUIDialog
+import kotlinx.android.synthetic.main.activity_settings_advance.*
+import okhttp3.MediaType
+import okhttp3.RequestBody
+import org.json.JSONObject
+import org.yameida.worktool.Constant
+import org.yameida.worktool.R
+import org.yameida.worktool.utils.*
+import java.util.*
+
+
+/**
+ * 高级选项页
+ */
+class SettingsAdvanceActivity : AppCompatActivity() {
+
+ companion object {
+ fun enterActivity(context: Context) {
+ LogUtils.d("SettingsAdvanceActivity.enterActivity")
+ context.startActivity(Intent(context, SettingsAdvanceActivity::class.java).apply {
+ this.flags = Intent.FLAG_ACTIVITY_NEW_TASK
+ })
+ }
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
+ setContentView(R.layout.activity_settings_advance)
+
+ initView()
+ initData()
+ }
+
+ private fun initView() {
+ iv_back_left.setOnClickListener { finish() }
+ sw_full_name.isChecked = Constant.fullGroupName
+ sw_full_name.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener { buttonView, isChecked ->
+ LogUtils.i("sw_full_name onCheckedChanged: $isChecked")
+ Constant.fullGroupName = isChecked
+ })
+ sw_qr_code.isChecked = Constant.groupQrCode
+ sw_qr_code.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener { buttonView, isChecked ->
+ LogUtils.i("sw_qr_code onCheckedChanged: $isChecked")
+ Constant.groupQrCode = isChecked
+ })
+ sw_auto_publish.isChecked = Constant.autoPublishComment
+ sw_auto_publish.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener { buttonView, isChecked ->
+ LogUtils.i("sw_auto_publish onCheckedChanged: $isChecked")
+ Constant.autoPublishComment = isChecked
+ })
+ ll_corp_param.visibility = if (Constant.customLink) View.VISIBLE else View.GONE
+ rl_username.visibility = if (Constant.customMP) View.VISIBLE else View.GONE
+ rl_qa_url.setOnClickListener { showQaUrlDialog() }
+ rl_corp.setOnClickListener { showCorpIdDialog() }
+ rl_agent.setOnClickListener { showAgentIdDialog() }
+ rl_schema.setOnClickListener { showSchemaDialog() }
+ rl_username.setOnClickListener { showUserNameDialog() }
+ rl_signature.setOnClickListener { showSignatureDialog() }
+ }
+
+ private fun initData() {
+ HttpUtil.getMyConfig()
+ }
+
+ private fun showQaUrlDialog() {
+ val builder = QMUIDialog.EditTextDialogBuilder(this)
+ builder.setTitle("消息回调地址")
+ .setPlaceholder("请输入回调接口地址")
+ .setDefaultText(Constant.qaUrl)
+ .setInputType(InputType.TYPE_CLASS_TEXT)
+ .addAction(getString(R.string.delete)) { dialog, index ->
+ dialog.dismiss()
+ updateRobotQaUrl("")
+ }
+ .addAction(getString(R.string.cancel)) { dialog, index -> dialog.dismiss() }
+ .addAction(getString(R.string.add)) { dialog, index ->
+ val text = builder.editText.text
+ if (text != null) {
+ if (text.matches("https?://[^/]+.*".toRegex())) {
+ dialog.dismiss()
+ updateRobotQaUrl(text.toString().trim())
+ } else {
+ ToastUtils.showLong("格式异常!")
+ }
+ } else {
+ ToastUtils.showLong("请勿为空!")
+ }
+ }
+ .create(R.style.QMUI_Dialog).show()
+ }
+
+ private fun updateRobotQaUrl(callbackUrl: String) {
+ try {
+ val json = hashMapOf()
+ json["robotId"] = Constant.robotId
+ if (callbackUrl.isEmpty()) {
+ json["openCallback"] = 0
+ } else {
+ json["openCallback"] = 1
+ json["callbackUrl"] = callbackUrl
+ }
+ val requestBody = RequestBody.create(
+ MediaType.parse("application/json;charset=UTF-8"),
+ GsonUtils.toJson(json)
+ )
+ val call = object : StringCallback() {
+ override fun onSuccess(response: Response?) {
+ if (response != null && JSONObject(response.body()).getInt("code") == 200) {
+ Constant.qaUrl = callbackUrl
+ ToastUtils.showLong(if (callbackUrl.isEmpty()) "关闭成功" else "更新成功")
+ } else {
+ onError(response)
+ }
+ }
+
+ override fun onError(response: Response?) {
+ ToastUtils.showLong(if (callbackUrl.isEmpty()) "关闭失败,请稍后再试~" else "更新失败,请稍后再试~")
+ }
+ }
+ OkGo.post(Constant.getRobotUpdateUrl()).upRequestBody(requestBody).execute(call)
+ } catch (e: Exception) {
+ throw RuntimeException(e)
+ }
+ }
+
+ private fun showCorpIdDialog() {
+ val builder = QMUIDialog.EditTextDialogBuilder(this)
+ builder.setTitle("CorpId")
+ .setDefaultText(Constant.weworkCorpId)
+ .setInputType(InputType.TYPE_CLASS_TEXT)
+ .addAction(getString(R.string.cancel)) { dialog, index -> dialog.dismiss() }
+ .addAction(getString(R.string.add)) { dialog, index ->
+ val text = builder.editText.text
+ if (text != null) {
+ dialog.dismiss()
+ Constant.weworkCorpId = text.toString().trim()
+ } else {
+ ToastUtils.showLong("请勿为空!")
+ }
+ }
+ .create(R.style.QMUI_Dialog).show()
+ }
+
+ private fun showAgentIdDialog() {
+ val builder = QMUIDialog.EditTextDialogBuilder(this)
+ builder.setTitle("AgentId")
+ .setDefaultText(Constant.weworkAgentId)
+ .setInputType(InputType.TYPE_CLASS_TEXT)
+ .addAction(getString(R.string.cancel)) { dialog, index -> dialog.dismiss() }
+ .addAction(getString(R.string.add)) { dialog, index ->
+ val text = builder.editText.text
+ if (text != null) {
+ dialog.dismiss()
+ Constant.weworkAgentId = text.toString().trim()
+ } else {
+ ToastUtils.showLong("请勿为空!")
+ }
+ }
+ .create(R.style.QMUI_Dialog).show()
+ }
+
+ private fun showSchemaDialog() {
+ val builder = QMUIDialog.EditTextDialogBuilder(this)
+ builder.setTitle("Schema")
+ .setDefaultText(Constant.weworkSchema)
+ .setInputType(InputType.TYPE_CLASS_TEXT)
+ .addAction(getString(R.string.cancel)) { dialog, index -> dialog.dismiss() }
+ .addAction(getString(R.string.add)) { dialog, index ->
+ val text = builder.editText.text
+ if (text != null) {
+ dialog.dismiss()
+ Constant.weworkSchema = text.toString().trim()
+ } else {
+ ToastUtils.showLong("请勿为空!")
+ }
+ }
+ .create(R.style.QMUI_Dialog).show()
+ }
+
+ private fun showUserNameDialog() {
+ val builder = QMUIDialog.EditTextDialogBuilder(this)
+ builder.setTitle("UserName")
+ .setDefaultText(Constant.weworkMP)
+ .setInputType(InputType.TYPE_CLASS_TEXT)
+ .addAction(getString(R.string.cancel)) { dialog, index -> dialog.dismiss() }
+ .addAction(getString(R.string.add)) { dialog, index ->
+ val text = builder.editText.text
+ if (text != null) {
+ dialog.dismiss()
+ Constant.weworkMP = text.toString().trim()
+ } else {
+ ToastUtils.showLong("请勿为空!")
+ }
+ }
+ .create(R.style.QMUI_Dialog).show()
+ }
+
+ private fun showSignatureDialog() {
+ val signature = AppUtils.getAppSignaturesMD5().firstOrNull()?.replace(":", "")?.toLowerCase(Locale.ROOT)
+ val builder = QMUIDialog.EditTextDialogBuilder(this)
+ builder.setTitle("Signature")
+ .setDefaultText(signature)
+ .setInputType(InputType.TYPE_NULL)
+ .addAction(getString(R.string.copy)) { dialog, index ->
+ dialog.dismiss()
+ ClipboardUtils.copyText(signature)
+ ToastUtils.showLong("复制成功")
+ }
+ .create(R.style.QMUI_Dialog).show()
+ }
+
+}
diff --git a/app/src/main/java/org/yameida/worktool/service/WeworkController.kt b/app/src/main/java/org/yameida/worktool/service/WeworkController.kt
index 4ad618e..732671c 100644
--- a/app/src/main/java/org/yameida/worktool/service/WeworkController.kt
+++ b/app/src/main/java/org/yameida/worktool/service/WeworkController.kt
@@ -294,19 +294,25 @@ object WeworkController {
}
/**
- * 推送任意小程序
+ * 推送小程序
* @see WeworkMessageBean.PUSH_MICROPROGRAM
* @param message#titleList 待发送姓名列表
* @param message#objectName 小程序名称
+ * @param message#receivedContent 小程序描述
+ * @param message#originalContent 小程序链接地址
+ * @param message#fileUrl 图片地址
* @param message#extraText 附加留言 可选
*/
@RequestMapping
fun pushMicroprogram(message: WeworkMessageBean): Boolean {
- LogUtils.d("pushMicroprogram(): ${message.titleList} ${message.objectName} ${message.extraText}")
+ LogUtils.d("pushMicroprogram(): ${message.titleList} ${message.objectName} ${message.receivedContent} ${message.originalContent} ${message.fileUrl} ${message.extraText}")
return WeworkOperationImpl.pushMicroprogram(
message,
message.titleList,
message.objectName,
+ message.receivedContent,
+ message.originalContent,
+ message.fileUrl,
message.extraText
)
}
diff --git a/app/src/main/java/org/yameida/worktool/service/WeworkOperationImpl.kt b/app/src/main/java/org/yameida/worktool/service/WeworkOperationImpl.kt
index e161626..a13c24c 100644
--- a/app/src/main/java/org/yameida/worktool/service/WeworkOperationImpl.kt
+++ b/app/src/main/java/org/yameida/worktool/service/WeworkOperationImpl.kt
@@ -517,19 +517,40 @@ object WeworkOperationImpl {
}
/**
- * 推送任意小程序(不推荐)
+ * 推送小程序
+ * @see WeworkMessageBean.PUSH_MICROPROGRAM
* @param titleList 待发送姓名列表
* @param objectName 小程序名称
- * @param extraText 附加留言 可选
+ * @param receivedContent 小程序描述
+ * @param originalContent 小程序链接地址
+ * @param fileUrl 图片地址
+ * @param extraText 附加留言 可选
*/
fun pushMicroprogram(
message: WeworkMessageBean,
titleList: List,
objectName: String,
- extraText: String? = null
+ receivedContent: String,
+ originalContent: String,
+ fileUrl: String,
+ extraText: String? = null,
+ maxRetryCount: Int? = null
): Boolean {
val startTime = System.currentTimeMillis()
- return false
+ if (IWWAPIUtil.sendMicroProgram(fileUrl, originalContent, objectName, receivedContent)) {
+ if (relaySelectTarget(titleList, extraText)) {
+ uploadCommandResult(message, ExecCallbackBean.SUCCESS, "", startTime, titleList, listOf())
+ return true
+ } else {
+ LogUtils.e("转发失败")
+ uploadCommandResult(message, ExecCallbackBean.ERROR_RELAY, "转发失败", startTime, listOf(), titleList)
+ return false
+ }
+ } else {
+ LogUtils.e("非法操作")
+ uploadCommandResult(message, ExecCallbackBean.ERROR_ILLEGAL_OPERATION, "非法操作", startTime, listOf(), titleList)
+ return false
+ }
}
/**
diff --git a/app/src/main/java/org/yameida/worktool/utils/IWWAPIUtil.kt b/app/src/main/java/org/yameida/worktool/utils/IWWAPIUtil.kt
index 3516fcd..8dbbea9 100644
--- a/app/src/main/java/org/yameida/worktool/utils/IWWAPIUtil.kt
+++ b/app/src/main/java/org/yameida/worktool/utils/IWWAPIUtil.kt
@@ -3,16 +3,18 @@ package org.yameida.worktool.utils
import android.content.Context
import android.graphics.Bitmap
import android.graphics.drawable.BitmapDrawable
-import android.widget.Toast
-import com.blankj.utilcode.util.AppUtils
-import com.blankj.utilcode.util.LogUtils
-import com.blankj.utilcode.util.Utils
+import com.blankj.utilcode.util.*
+import com.lzy.okgo.OkGo
import com.tencent.wework.api.IWWAPI
import com.tencent.wework.api.WWAPIFactory
import com.tencent.wework.api.model.WWMediaLink
import com.tencent.wework.api.model.WWMediaMiniProgram
-import com.tencent.wework.api.model.WWSimpleRespMessage
import org.yameida.worktool.Constant
+import org.yameida.worktool.R
+import java.io.ByteArrayOutputStream
+import java.io.File
+import java.text.SimpleDateFormat
+import java.util.*
object IWWAPIUtil {
@@ -38,35 +40,48 @@ object IWWAPIUtil {
return iwwapi?.sendMessage(link) ?: false
}
- fun sendMicroProgram() {
+ fun sendMicroProgram(imageUrl: String?, webpageUrl: String?, title: String?, description: String?): Boolean {
val miniProgram = WWMediaMiniProgram()
miniProgram.appPkg = AppUtils.getAppPackageName()
miniProgram.appName = AppUtils.getAppName()
miniProgram.appId = Constant.weworkCorpId
miniProgram.agentId = Constant.weworkAgentId
miniProgram.schema = Constant.weworkSchema
- miniProgram.username = "gh_dde54cb88ce7@app" //必须是应用关联的小程序,注意要有@app后缀
- miniProgram.description = "dddddd"
- miniProgram.path = "/pages/plugin/index.html?plugid=1cbd3b7c8674e61769436b5e354ddb2f"
-// val bitmap = (getDrawable(R.drawable.test) as BitmapDrawable).bitmap
-// val stream = ByteArrayOutputStream()
-// bitmap.compress(Bitmap.CompressFormat.JPEG, 0, stream)
-// val byteArray: ByteArray = stream.toByteArray()
+ miniProgram.username = Constant.weworkMP //必须是应用关联的小程序,注意要有@app后缀
+ miniProgram.description = description
+ miniProgram.path = webpageUrl
+ miniProgram.title = title
-// miniProgram.hdImageData = byteArray
- miniProgram.title = "测试_MaHow"
- iwwapi!!.sendMessage(miniProgram) { resp ->
- if (resp is WWSimpleRespMessage) {
- val rsp = resp as WWSimpleRespMessage
- var t: String? = ""
- Toast.makeText(
- Utils.getApp(),
- "发小程序," + rsp.errCode + "," + rsp.errMsg.also {
- t = it
- },
- Toast.LENGTH_LONG
- ).show()
+ val bitmap = (Utils.getApp().getDrawable(R.mipmap.ic_launcher) as BitmapDrawable).bitmap
+ val stream = ByteArrayOutputStream()
+ bitmap.compress(Bitmap.CompressFormat.JPEG, 0, stream)
+ miniProgram.hdImageData = stream.toByteArray()
+ if (imageUrl != null) {
+ LogUtils.i("下载开始 $imageUrl")
+ val execute = OkGo.get(imageUrl).execute()
+ LogUtils.i("下载完成 $imageUrl")
+ val body = execute.body()
+ if (body != null) {
+ val df = SimpleDateFormat("yyyy-MM-dd")
+ val filePath = "${
+ Utils.getApp().getExternalFilesDir("mp_image_cache")
+ }/${df.format(Date())}/${imageUrl.split("/").lastOrNull()}"
+ val newFile = File(filePath)
+ val create = FileUtils.createFileByDeleteOldFile(newFile)
+ if (create && newFile.canWrite()) {
+ newFile.writeBytes(body.bytes())
+ LogUtils.i("文件存储本地成功 $filePath")
+ val bitmap = ImageUtils.bytes2Bitmap(File(filePath).readBytes())
+ val stream = ByteArrayOutputStream()
+ bitmap.compress(Bitmap.CompressFormat.JPEG, 0, stream)
+ miniProgram.hdImageData = stream.toByteArray()
+ } else {
+ LogUtils.e("文件存储本地失败 $filePath")
+ }
+ } else {
+ LogUtils.e("文件下载失败")
}
}
+ return iwwapi?.sendMessage(miniProgram) ?: false
}
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
index 4e18a52..bbb4562 100644
--- a/app/src/main/res/layout/activity_settings.xml
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -51,7 +51,7 @@
android:background="@color/background"
android:orientation="vertical">
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a63b758..22606f5 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -15,6 +15,7 @@
请输入新的host
删除
取消
+ 复制
确认
新增
host列表