mirror of
https://github.com/pppscn/SmsForwarder
synced 2025-08-03 09:27:41 +08:00
新增:企微群机器人
发送文本消息
时支持at成员 #376
This commit is contained in:
parent
95e9f22816
commit
5381151ac3
@ -6,6 +6,9 @@ import java.io.Serializable
|
|||||||
data class WeworkRobotSetting(
|
data class WeworkRobotSetting(
|
||||||
var webHook: String,
|
var webHook: String,
|
||||||
val msgType: String = "text",
|
val msgType: String = "text",
|
||||||
|
var atAll: Boolean? = false,
|
||||||
|
var atUserIds: String? = "",
|
||||||
|
var atMobiles: String? = "",
|
||||||
) : Serializable {
|
) : Serializable {
|
||||||
|
|
||||||
fun getMsgTypeCheckId(): Int {
|
fun getMsgTypeCheckId(): Int {
|
||||||
|
@ -6,6 +6,8 @@ import android.util.Log
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import android.widget.CompoundButton
|
||||||
|
import android.widget.RadioGroup
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.idormy.sms.forwarder.R
|
import com.idormy.sms.forwarder.R
|
||||||
@ -17,7 +19,13 @@ import com.idormy.sms.forwarder.database.viewmodel.SenderViewModel
|
|||||||
import com.idormy.sms.forwarder.databinding.FragmentSendersWeworkRobotBinding
|
import com.idormy.sms.forwarder.databinding.FragmentSendersWeworkRobotBinding
|
||||||
import com.idormy.sms.forwarder.entity.MsgInfo
|
import com.idormy.sms.forwarder.entity.MsgInfo
|
||||||
import com.idormy.sms.forwarder.entity.setting.WeworkRobotSetting
|
import com.idormy.sms.forwarder.entity.setting.WeworkRobotSetting
|
||||||
import com.idormy.sms.forwarder.utils.*
|
import com.idormy.sms.forwarder.utils.CommonUtils
|
||||||
|
import com.idormy.sms.forwarder.utils.KEY_SENDER_CLONE
|
||||||
|
import com.idormy.sms.forwarder.utils.KEY_SENDER_ID
|
||||||
|
import com.idormy.sms.forwarder.utils.KEY_SENDER_TEST
|
||||||
|
import com.idormy.sms.forwarder.utils.KEY_SENDER_TYPE
|
||||||
|
import com.idormy.sms.forwarder.utils.SettingUtils
|
||||||
|
import com.idormy.sms.forwarder.utils.XToastUtils
|
||||||
import com.idormy.sms.forwarder.utils.sender.WeworkRobotUtils
|
import com.idormy.sms.forwarder.utils.sender.WeworkRobotUtils
|
||||||
import com.jeremyliao.liveeventbus.LiveEventBus
|
import com.jeremyliao.liveeventbus.LiveEventBus
|
||||||
import com.xuexiang.xaop.annotation.SingleClick
|
import com.xuexiang.xaop.annotation.SingleClick
|
||||||
@ -32,11 +40,11 @@ import io.reactivex.SingleObserver
|
|||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.disposables.Disposable
|
import io.reactivex.disposables.Disposable
|
||||||
import io.reactivex.schedulers.Schedulers
|
import io.reactivex.schedulers.Schedulers
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
@Page(name = "企业微信群机器人")
|
@Page(name = "企业微信群机器人")
|
||||||
@Suppress("PrivatePropertyName")
|
@Suppress("PrivatePropertyName")
|
||||||
class WeworkRobotFragment : BaseFragment<FragmentSendersWeworkRobotBinding?>(), View.OnClickListener {
|
class WeworkRobotFragment : BaseFragment<FragmentSendersWeworkRobotBinding?>(), View.OnClickListener, CompoundButton.OnCheckedChangeListener {
|
||||||
|
|
||||||
private val TAG: String = WeworkRobotFragment::class.java.simpleName
|
private val TAG: String = WeworkRobotFragment::class.java.simpleName
|
||||||
var titleBar: TitleBar? = null
|
var titleBar: TitleBar? = null
|
||||||
@ -122,6 +130,10 @@ class WeworkRobotFragment : BaseFragment<FragmentSendersWeworkRobotBinding?>(),
|
|||||||
if (settingVo != null) {
|
if (settingVo != null) {
|
||||||
binding!!.etWebHook.setText(settingVo.webHook)
|
binding!!.etWebHook.setText(settingVo.webHook)
|
||||||
binding!!.rgMsgType.check(settingVo.getMsgTypeCheckId())
|
binding!!.rgMsgType.check(settingVo.getMsgTypeCheckId())
|
||||||
|
binding!!.layoutAt.visibility = if (settingVo.getMsgTypeCheckId() == R.id.rb_msg_type_text) View.VISIBLE else View.GONE
|
||||||
|
binding!!.sbAtAll.isChecked = settingVo.atAll == true
|
||||||
|
binding!!.etAtMobiles.setText(settingVo.atMobiles)
|
||||||
|
binding!!.etAtUserIds.setText(settingVo.atUserIds)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -131,9 +143,26 @@ class WeworkRobotFragment : BaseFragment<FragmentSendersWeworkRobotBinding?>(),
|
|||||||
binding!!.btnTest.setOnClickListener(this)
|
binding!!.btnTest.setOnClickListener(this)
|
||||||
binding!!.btnDel.setOnClickListener(this)
|
binding!!.btnDel.setOnClickListener(this)
|
||||||
binding!!.btnSave.setOnClickListener(this)
|
binding!!.btnSave.setOnClickListener(this)
|
||||||
|
binding!!.sbAtAll.setOnCheckedChangeListener(this)
|
||||||
|
binding!!.rgMsgType.setOnCheckedChangeListener { _: RadioGroup?, checkedId: Int ->
|
||||||
|
binding!!.layoutAt.visibility = if (checkedId == R.id.rb_msg_type_text) View.VISIBLE else View.GONE
|
||||||
|
}
|
||||||
LiveEventBus.get(KEY_SENDER_TEST, String::class.java).observe(this) { mCountDownHelper?.finish() }
|
LiveEventBus.get(KEY_SENDER_TEST, String::class.java).observe(this) { mCountDownHelper?.finish() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) {
|
||||||
|
//这里只有一个监听不需要判断id
|
||||||
|
if (isChecked) {
|
||||||
|
binding!!.layoutAtMobiles.visibility = View.GONE
|
||||||
|
binding!!.layoutAtUserIds.visibility = View.GONE
|
||||||
|
binding!!.etAtMobiles.setText("")
|
||||||
|
binding!!.etAtUserIds.setText("")
|
||||||
|
} else {
|
||||||
|
binding!!.layoutAtMobiles.visibility = View.VISIBLE
|
||||||
|
binding!!.layoutAtUserIds.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@SingleClick
|
@SingleClick
|
||||||
override fun onClick(v: View) {
|
override fun onClick(v: View) {
|
||||||
try {
|
try {
|
||||||
@ -208,7 +237,10 @@ class WeworkRobotFragment : BaseFragment<FragmentSendersWeworkRobotBinding?>(),
|
|||||||
throw Exception(getString(R.string.invalid_webhook))
|
throw Exception(getString(R.string.invalid_webhook))
|
||||||
}
|
}
|
||||||
val msgType = if (binding!!.rgMsgType.checkedRadioButtonId == R.id.rb_msg_type_markdown) "markdown" else "text"
|
val msgType = if (binding!!.rgMsgType.checkedRadioButtonId == R.id.rb_msg_type_markdown) "markdown" else "text"
|
||||||
return WeworkRobotSetting(webHook, msgType)
|
val atAll = binding!!.sbAtAll.isChecked
|
||||||
|
val atUserIds = binding!!.etAtUserIds.text.toString().trim()
|
||||||
|
val atMobiles = binding!!.etAtMobiles.text.toString().trim()
|
||||||
|
return WeworkRobotSetting(webHook, msgType, atAll, atUserIds, atMobiles)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
|
@ -38,14 +38,23 @@ class WeworkRobotUtils private constructor() {
|
|||||||
val msgMap: MutableMap<String, Any> = mutableMapOf()
|
val msgMap: MutableMap<String, Any> = mutableMapOf()
|
||||||
msgMap["msgtype"] = setting.msgType
|
msgMap["msgtype"] = setting.msgType
|
||||||
|
|
||||||
|
val contextMap = mutableMapOf<String, Any>()
|
||||||
|
contextMap["content"] = content
|
||||||
|
|
||||||
if (setting.msgType == "markdown") {
|
if (setting.msgType == "markdown") {
|
||||||
val markdownText: MutableMap<String, Any> = mutableMapOf()
|
msgMap["markdown"] = contextMap
|
||||||
markdownText["content"] = content
|
|
||||||
msgMap["markdown"] = markdownText
|
|
||||||
} else {
|
} else {
|
||||||
val textText: MutableMap<String, Any> = mutableMapOf()
|
if (setting.atAll == true) {
|
||||||
textText["content"] = content
|
contextMap["mentioned_list"] = arrayListOf("@all")
|
||||||
msgMap["text"] = textText
|
} else {
|
||||||
|
if (!setting.atUserIds.isNullOrEmpty()) {
|
||||||
|
contextMap["mentioned_list"] = setting.atUserIds!!.split(",")
|
||||||
|
}
|
||||||
|
if (!setting.atMobiles.isNullOrEmpty()) {
|
||||||
|
contextMap["mentioned_mobile_list"] = setting.atMobiles!!.split(",")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
msgMap["text"] = contextMap
|
||||||
}
|
}
|
||||||
|
|
||||||
val requestMsg: String = Gson().toJson(msgMap)
|
val requestMsg: String = Gson().toJson(msgMap)
|
||||||
|
@ -38,14 +38,16 @@
|
|||||||
android:layout_marginStart="5dp"
|
android:layout_marginStart="5dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
app:met_clearButton="true" />
|
app:met_clearButton="true"
|
||||||
|
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" />
|
||||||
|
|
||||||
<com.xuexiang.xui.widget.button.switchbutton.SwitchButton
|
<com.xuexiang.xui.widget.button.switchbutton.SwitchButton
|
||||||
android:id="@+id/sb_enable"
|
android:id="@+id/sb_enable"
|
||||||
style="@style/SwitchButtonStyle"
|
style="@style/SwitchButtonStyle"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:checked="true" />
|
android:checked="true"
|
||||||
|
tools:ignore="DuplicateSpeakableTextCheck,TouchTargetSizeCheck" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
@ -73,7 +75,8 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
app:met_passWordButton="true" />
|
app:met_passWordButton="true"
|
||||||
|
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
@ -99,17 +102,112 @@
|
|||||||
android:id="@+id/rb_msg_type_text"
|
android:id="@+id/rb_msg_type_text"
|
||||||
style="@style/rg_rb_style"
|
style="@style/rg_rb_style"
|
||||||
android:checked="true"
|
android:checked="true"
|
||||||
android:text="@string/wework_msg_type_text" />
|
android:text="@string/wework_msg_type_text"
|
||||||
|
tools:ignore="TouchTargetSizeCheck" />
|
||||||
|
|
||||||
<RadioButton
|
<RadioButton
|
||||||
android:id="@+id/rb_msg_type_markdown"
|
android:id="@+id/rb_msg_type_markdown"
|
||||||
style="@style/rg_rb_style"
|
style="@style/rg_rb_style"
|
||||||
android:text="@string/wework_msg_type_markdown" />
|
android:text="@string/wework_msg_type_markdown"
|
||||||
|
tools:ignore="TouchTargetSizeCheck" />
|
||||||
|
|
||||||
</RadioGroup>
|
</RadioGroup>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/layout_at"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
style="@style/senderBarStyleWithSwitch"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="@string/is_at_all"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<com.xuexiang.xui.widget.button.switchbutton.SwitchButton
|
||||||
|
android:id="@+id/sb_at_all"
|
||||||
|
style="@style/SwitchButtonStyle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:checked="true"
|
||||||
|
tools:ignore="TouchTargetSizeCheck" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/layout_at_user_ids"
|
||||||
|
style="@style/senderBarStyle"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:visibility="gone">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/wework_at_userids"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="@string/wework_at_userids_tip"
|
||||||
|
android:textSize="10sp"
|
||||||
|
tools:ignore="SmallSp" />
|
||||||
|
|
||||||
|
<com.xuexiang.xui.widget.edittext.materialedittext.MaterialEditText
|
||||||
|
android:id="@+id/et_at_user_ids"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:singleLine="true"
|
||||||
|
app:met_clearButton="true" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/layout_at_mobiles"
|
||||||
|
style="@style/senderBarStyle"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:visibility="gone">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/wework_at_mobiles"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="@string/wework_at_mobiles_tip"
|
||||||
|
android:textSize="10sp"
|
||||||
|
tools:ignore="SmallSp" />
|
||||||
|
|
||||||
|
<com.xuexiang.xui.widget.edittext.materialedittext.MaterialEditText
|
||||||
|
android:id="@+id/et_at_mobiles"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:singleLine="true"
|
||||||
|
app:met_clearButton="true" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</androidx.core.widget.NestedScrollView>
|
</androidx.core.widget.NestedScrollView>
|
||||||
@ -128,7 +226,7 @@
|
|||||||
android:paddingStart="15dp"
|
android:paddingStart="15dp"
|
||||||
android:text="@string/del"
|
android:text="@string/del"
|
||||||
android:textSize="11sp"
|
android:textSize="11sp"
|
||||||
tools:ignore="RtlSymmetry" />
|
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" />
|
||||||
|
|
||||||
<com.xuexiang.xui.widget.textview.supertextview.SuperButton
|
<com.xuexiang.xui.widget.textview.supertextview.SuperButton
|
||||||
android:id="@+id/btn_save"
|
android:id="@+id/btn_save"
|
||||||
@ -138,7 +236,7 @@
|
|||||||
android:paddingStart="15dp"
|
android:paddingStart="15dp"
|
||||||
android:text="@string/save"
|
android:text="@string/save"
|
||||||
android:textSize="11sp"
|
android:textSize="11sp"
|
||||||
tools:ignore="RtlSymmetry" />
|
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" />
|
||||||
|
|
||||||
<com.xuexiang.xui.widget.textview.supertextview.SuperButton
|
<com.xuexiang.xui.widget.textview.supertextview.SuperButton
|
||||||
android:id="@+id/btn_test"
|
android:id="@+id/btn_test"
|
||||||
@ -148,7 +246,7 @@
|
|||||||
android:paddingStart="15dp"
|
android:paddingStart="15dp"
|
||||||
android:text="@string/test"
|
android:text="@string/test"
|
||||||
android:textSize="11sp"
|
android:textSize="11sp"
|
||||||
tools:ignore="RtlSymmetry" />
|
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
@ -774,6 +774,10 @@
|
|||||||
<string name="wework_msg_type">Msg Type</string>
|
<string name="wework_msg_type">Msg Type</string>
|
||||||
<string name="wework_msg_type_text">Text</string>
|
<string name="wework_msg_type_text">Text</string>
|
||||||
<string name="wework_msg_type_markdown">Markdown</string>
|
<string name="wework_msg_type_markdown">Markdown</string>
|
||||||
|
<string name="wework_at_mobiles">At Mobiles</string>
|
||||||
|
<string name="wework_at_mobiles_tip">Tips: Separate multiple mobiles with commas, e.g. 18888888888,19999999999</string>
|
||||||
|
<string name="wework_at_userids">At UserId</string>
|
||||||
|
<string name="wework_at_userids_tip">Tips:Separate multiple UserIds with commas, e.g. user1,user2</string>
|
||||||
|
|
||||||
<string name="url_scheme">URL Scheme</string>
|
<string name="url_scheme">URL Scheme</string>
|
||||||
<string name="url_scheme_tips">Example:myapp://api/add?&type=0&msg=[msg]</string>
|
<string name="url_scheme_tips">Example:myapp://api/add?&type=0&msg=[msg]</string>
|
||||||
|
@ -775,6 +775,10 @@
|
|||||||
<string name="wework_msg_type">消息类型</string>
|
<string name="wework_msg_type">消息类型</string>
|
||||||
<string name="wework_msg_type_text">纯文本</string>
|
<string name="wework_msg_type_text">纯文本</string>
|
||||||
<string name="wework_msg_type_markdown">markdown</string>
|
<string name="wework_msg_type_markdown">markdown</string>
|
||||||
|
<string name="wework_at_mobiles">被@人的手机号</string>
|
||||||
|
<string name="wework_at_mobiles_tip">Tips:多个手机号用逗号分开,例如:18888888888,19999999999</string>
|
||||||
|
<string name="wework_at_userids">被@人的userid</string>
|
||||||
|
<string name="wework_at_userids_tip">Tips:多个userid用逗号分开,例如:user1,user2</string>
|
||||||
|
|
||||||
<string name="url_scheme">URL Scheme</string>
|
<string name="url_scheme">URL Scheme</string>
|
||||||
<string name="url_scheme_tips">示例:myapp://api/add?&type=0&msg=[msg]</string>
|
<string name="url_scheme_tips">示例:myapp://api/add?&type=0&msg=[msg]</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user