优化:统一管理自定义模板可用变量标签插入按钮 #559

This commit is contained in:
pppscn 2024-11-21 03:47:26 +08:00
parent a77f630524
commit 0a3f9f53f1
37 changed files with 428 additions and 1059 deletions

View File

@ -93,6 +93,15 @@ class App : Application(), CactusCallback, Configuration.Provider by Core {
@SuppressLint("StaticFieldLeak") @SuppressLint("StaticFieldLeak")
lateinit var context: Context lateinit var context: Context
//自定义模板可用变量标签
var COMMON_TAG_MAP: MutableMap<String, String> = mutableMapOf()
var SMS_TAG_MAP: MutableMap<String, String> = mutableMapOf()
var CALL_TAG_MAP: MutableMap<String, String> = mutableMapOf()
var APP_TAG_MAP: MutableMap<String, String> = mutableMapOf()
var LOCATION_TAG_MAP: MutableMap<String, String> = mutableMapOf()
var BATTERY_TAG_MAP: MutableMap<String, String> = mutableMapOf()
var NETWORK_TAG_MAP: MutableMap<String, String> = mutableMapOf()
//通话类型1.来电挂机 2.去电挂机 3.未接来电 4.来电提醒 5.来电接通 6.去电拨出 //通话类型1.来电挂机 2.去电挂机 3.未接来电 4.来电提醒 5.来电接通 6.去电拨出
var CALL_TYPE_MAP: MutableMap<String, String> = mutableMapOf() var CALL_TYPE_MAP: MutableMap<String, String> = mutableMapOf()
var FILED_MAP: MutableMap<String, String> = mutableMapOf() var FILED_MAP: MutableMap<String, String> = mutableMapOf()
@ -390,6 +399,74 @@ class App : Application(), CactusCallback, Configuration.Provider by Core {
private fun switchLanguage(newLocale: Locale) { private fun switchLanguage(newLocale: Locale) {
isNeedSpaceBetweenWords = !newLocale.language.contains("zh") isNeedSpaceBetweenWords = !newLocale.language.contains("zh")
//自定义模板可用变量标签
COMMON_TAG_MAP.clear()
COMMON_TAG_MAP.putAll(
mapOf(
getString(R.string.tag_receive_time) to getString(R.string.insert_tag_receive_time),
getString(R.string.tag_current_time) to getString(R.string.insert_tag_current_time),
getString(R.string.tag_device_name) to getString(R.string.insert_tag_device_name),
getString(R.string.tag_app_version) to getString(R.string.insert_tag_app_version),
)
)
SMS_TAG_MAP.clear()
SMS_TAG_MAP.putAll(
mapOf(
getString(R.string.tag_from) to getString(R.string.insert_tag_from),
getString(R.string.tag_sms) to getString(R.string.insert_tag_sms),
getString(R.string.tag_card_slot) to getString(R.string.insert_tag_card_slot),
getString(R.string.tag_card_subid) to getString(R.string.insert_tag_card_subid),
)
)
CALL_TAG_MAP.clear()
CALL_TAG_MAP.putAll(
mapOf(
getString(R.string.tag_from) to getString(R.string.insert_tag_from),
getString(R.string.tag_sms) to getString(R.string.insert_tag_msg),
getString(R.string.tag_card_slot) to getString(R.string.insert_tag_card_slot),
getString(R.string.tag_card_subid) to getString(R.string.insert_tag_card_subid),
getString(R.string.tag_call_type) to getString(R.string.insert_tag_call_type),
)
)
APP_TAG_MAP.clear()
APP_TAG_MAP.putAll(
mapOf(
getString(R.string.tag_uid) to getString(R.string.insert_tag_uid),
getString(R.string.tag_package_name) to getString(R.string.insert_tag_package_name),
getString(R.string.tag_app_name) to getString(R.string.insert_tag_app_name),
getString(R.string.tag_title) to getString(R.string.insert_tag_title),
getString(R.string.tag_msg) to getString(R.string.insert_tag_msg),
)
)
LOCATION_TAG_MAP.clear()
LOCATION_TAG_MAP.putAll(
mapOf(
getString(R.string.tag_location) to getString(R.string.insert_tag_location),
getString(R.string.tag_location_longitude) to getString(R.string.insert_tag_location_longitude),
getString(R.string.tag_location_latitude) to getString(R.string.insert_tag_location_latitude),
getString(R.string.tag_location_address) to getString(R.string.insert_tag_location_address),
)
)
BATTERY_TAG_MAP.clear()
BATTERY_TAG_MAP.putAll(
mapOf(
getString(R.string.tag_battery_pct) to getString(R.string.insert_tag_battery_pct),
getString(R.string.tag_battery_status) to getString(R.string.insert_tag_battery_status),
getString(R.string.tag_battery_plugged) to getString(R.string.insert_tag_battery_plugged),
getString(R.string.tag_battery_info) to getString(R.string.insert_tag_battery_info),
getString(R.string.tag_battery_info_simple) to getString(R.string.insert_tag_battery_info_simple),
)
)
NETWORK_TAG_MAP.clear()
NETWORK_TAG_MAP.putAll(
mapOf(
getString(R.string.tag_ipv4) to getString(R.string.insert_tag_ipv4),
getString(R.string.tag_ipv6) to getString(R.string.insert_tag_ipv6),
getString(R.string.tag_ip_list) to getString(R.string.insert_tag_ip_list),
getString(R.string.tag_net_type) to getString(R.string.insert_tag_net_type),
)
)
CALL_TYPE_MAP.clear() CALL_TYPE_MAP.clear()
CALL_TYPE_MAP.putAll( CALL_TYPE_MAP.putAll(
mapOf( mapOf(

View File

@ -166,9 +166,6 @@ class RulesEditFragment : BaseFragment<FragmentRulesEditBinding?>(), View.OnClic
binding!!.rbCallType.visibility = View.GONE binding!!.rbCallType.visibility = View.GONE
binding!!.rbContent.visibility = View.GONE binding!!.rbContent.visibility = View.GONE
binding!!.tvMuRuleTips.setText(R.string.mu_rule_app_tips) binding!!.tvMuRuleTips.setText(R.string.mu_rule_app_tips)
binding!!.btInsertExtra.visibility = View.GONE
binding!!.btInsertSender.visibility = View.GONE
binding!!.btInsertContent.visibility = View.GONE
//初始化APP下拉列表 //初始化APP下拉列表
initAppSpinner() initAppSpinner()
//监听已安装App信息列表加载完成事件 //监听已安装App信息列表加载完成事件
@ -183,11 +180,6 @@ class RulesEditFragment : BaseFragment<FragmentRulesEditBinding?>(), View.OnClic
binding!!.rbInformContent.visibility = View.GONE binding!!.rbInformContent.visibility = View.GONE
//binding!!.rbMultiMatch.visibility = View.GONE //binding!!.rbMultiMatch.visibility = View.GONE
binding!!.tvMuRuleTips.setText(R.string.mu_rule_call_tips) binding!!.tvMuRuleTips.setText(R.string.mu_rule_call_tips)
binding!!.btInsertContent.visibility = View.GONE
binding!!.btInsertSenderApp.visibility = View.GONE
binding!!.btInsertUid.visibility = View.GONE
binding!!.btInsertTitleApp.visibility = View.GONE
binding!!.btInsertContentApp.visibility = View.GONE
//通话类型1.来电挂机 2.去电挂机 3.未接来电 4.来电提醒 5.来电接通 6.去电拨出 //通话类型1.来电挂机 2.去电挂机 3.未接来电 4.来电提醒 5.来电接通 6.去电拨出
binding!!.spCallType.setItems(CALL_TYPE_MAP.values.toList()) binding!!.spCallType.setItems(CALL_TYPE_MAP.values.toList())
@ -210,13 +202,12 @@ class RulesEditFragment : BaseFragment<FragmentRulesEditBinding?>(), View.OnClic
binding!!.rbPackageName.visibility = View.GONE binding!!.rbPackageName.visibility = View.GONE
binding!!.rbUid.visibility = View.GONE binding!!.rbUid.visibility = View.GONE
binding!!.rbInformContent.visibility = View.GONE binding!!.rbInformContent.visibility = View.GONE
binding!!.btInsertSenderApp.visibility = View.GONE
binding!!.btInsertUid.visibility = View.GONE
binding!!.btInsertTitleApp.visibility = View.GONE
binding!!.btInsertContentApp.visibility = View.GONE
} }
} }
//创建标签按钮
CommonUtils.createTagButtons(requireContext(), binding!!.glSmsTemplate, binding!!.etSmsTemplate, ruleType)
if (ruleId <= 0) { //新增 if (ruleId <= 0) { //新增
titleBar?.setSubTitle(getString(R.string.add_rule)) titleBar?.setSubTitle(getString(R.string.add_rule))
binding!!.btnDel.setText(R.string.discard) binding!!.btnDel.setText(R.string.discard)
@ -230,15 +221,6 @@ class RulesEditFragment : BaseFragment<FragmentRulesEditBinding?>(), View.OnClic
override fun initListeners() { override fun initListeners() {
binding!!.btnSilentPeriod.setOnClickListener(this) binding!!.btnSilentPeriod.setOnClickListener(this)
binding!!.btInsertSender.setOnClickListener(this)
binding!!.btInsertContent.setOnClickListener(this)
binding!!.btInsertSenderApp.setOnClickListener(this)
binding!!.btInsertUid.setOnClickListener(this)
binding!!.btInsertTitleApp.setOnClickListener(this)
binding!!.btInsertContentApp.setOnClickListener(this)
binding!!.btInsertExtra.setOnClickListener(this)
binding!!.btInsertTime.setOnClickListener(this)
binding!!.btInsertDeviceName.setOnClickListener(this)
binding!!.btnTest.setOnClickListener(this) binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this) binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this) binding!!.btnSave.setOnClickListener(this)
@ -334,7 +316,6 @@ class RulesEditFragment : BaseFragment<FragmentRulesEditBinding?>(), View.OnClic
@SingleClick @SingleClick
override fun onClick(v: View) { override fun onClick(v: View) {
try { try {
val etSmsTemplate: EditText = binding!!.etSmsTemplate
when (v.id) { when (v.id) {
R.id.btn_silent_period -> { R.id.btn_silent_period -> {
OptionsPickerBuilder(context, OnOptionsSelectListener { _: View?, options1: Int, options2: Int, _: Int -> OptionsPickerBuilder(context, OnOptionsSelectListener { _: View?, options1: Int, options2: Int, _: Int ->
@ -350,51 +331,6 @@ class RulesEditFragment : BaseFragment<FragmentRulesEditBinding?>(), View.OnClic
} }
} }
R.id.bt_insert_sender -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_from))
return
}
R.id.bt_insert_content -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_sms))
return
}
R.id.bt_insert_sender_app -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_package_name))
return
}
R.id.bt_insert_uid -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_uid))
return
}
R.id.bt_insert_title_app -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_title))
return
}
R.id.bt_insert_content_app -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_msg))
return
}
R.id.bt_insert_extra -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_card_slot))
return
}
R.id.bt_insert_time -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_receive_time))
return
}
R.id.bt_insert_device_name -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_device_name))
return
}
R.id.btn_test -> { R.id.btn_test -> {
val ruleNew = checkForm() val ruleNew = checkForm()
testRule(ruleNew) testRule(ruleNew)
@ -742,7 +678,7 @@ class RulesEditFragment : BaseFragment<FragmentRulesEditBinding?>(), View.OnClic
) )
val silentDayOfWeek = map.filter { it.value.isChecked } val silentDayOfWeek = map.filter { it.value.isChecked }
.toList().map {it.first }.joinToString(",") .toList().map { it.first }.joinToString(",")
return Rule( return Rule(
ruleId, ruleId,

View File

@ -221,11 +221,6 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
binding!!.btnExtraDeviceMark.setOnClickListener(this) binding!!.btnExtraDeviceMark.setOnClickListener(this)
binding!!.btnExtraSim1.setOnClickListener(this) binding!!.btnExtraSim1.setOnClickListener(this)
binding!!.btnExtraSim2.setOnClickListener(this) binding!!.btnExtraSim2.setOnClickListener(this)
binding!!.btInsertSender.setOnClickListener(this)
binding!!.btInsertContent.setOnClickListener(this)
binding!!.btInsertExtra.setOnClickListener(this)
binding!!.btInsertTime.setOnClickListener(this)
binding!!.btInsertDeviceName.setOnClickListener(this)
binding!!.btnExportLog.setOnClickListener(this) binding!!.btnExportLog.setOnClickListener(this)
//监听已安装App信息列表加载完成事件 //监听已安装App信息列表加载完成事件
@ -235,7 +230,6 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
@SingleClick @SingleClick
override fun onClick(v: View) { override fun onClick(v: View) {
val etSmsTemplate: EditText = binding!!.etSmsTemplate
when (v.id) { when (v.id) {
R.id.btn_silent_period -> { R.id.btn_silent_period -> {
OptionsPickerBuilder(context, OnOptionsSelectListener { _: View?, options1: Int, options2: Int, _: Int -> OptionsPickerBuilder(context, OnOptionsSelectListener { _: View?, options1: Int, options2: Int, _: Int ->
@ -304,37 +298,6 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
return return
} }
R.id.bt_insert_sender -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_from))
return
}
R.id.bt_insert_content -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_sms))
return
}
R.id.bt_insert_extra -> {
CommonUtils.insertOrReplaceText2Cursor(
etSmsTemplate, getString(R.string.tag_card_slot)
)
return
}
R.id.bt_insert_time -> {
CommonUtils.insertOrReplaceText2Cursor(
etSmsTemplate, getString(R.string.tag_receive_time)
)
return
}
R.id.bt_insert_device_name -> {
CommonUtils.insertOrReplaceText2Cursor(
etSmsTemplate, getString(R.string.tag_device_name)
)
return
}
R.id.btn_export_log -> { R.id.btn_export_log -> {
XXPermissions.with(this) XXPermissions.with(this)
// 申请储存权限 // 申请储存权限
@ -1098,6 +1061,8 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
//设置转发信息模版 //设置转发信息模版
private fun editSmsTemplate(textSmsTemplate: EditText) { private fun editSmsTemplate(textSmsTemplate: EditText) {
//创建标签按钮
CommonUtils.createTagButtons(requireContext(), binding!!.glSmsTemplate, textSmsTemplate, "all")
textSmsTemplate.setText(SettingUtils.smsTemplate) textSmsTemplate.setText(SettingUtils.smsTemplate)
textSmsTemplate.addTextChangedListener(object : TextWatcher { textSmsTemplate.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}

View File

@ -77,7 +77,7 @@ class AlarmFragment : BaseFragment<FragmentTasksActionAlarmBinding?>(), View.OnC
mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 2) mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 2)
mCountDownHelper!!.setOnCountDownListener(object : CountDownButtonHelper.OnCountDownListener { mCountDownHelper!!.setOnCountDownListener(object : CountDownButtonHelper.OnCountDownListener {
override fun onCountDown(time: Int) { override fun onCountDown(time: Int) {
binding!!.btnTest.text = String.format(getString(R.string.seconds_n), time.toString()) binding!!.btnTest.text = String.format(getString(R.string.seconds_n), time)
} }
override fun onFinished() { override fun onFinished() {

View File

@ -7,7 +7,6 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.AdapterView import android.widget.AdapterView
import android.widget.CompoundButton import android.widget.CompoundButton
import android.widget.EditText
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@ -156,6 +155,9 @@ class NotificationFragment : BaseFragment<FragmentTasksActionNotificationBinding
//初始化发送通道下拉框 //初始化发送通道下拉框
initSenderSpinner() initSenderSpinner()
//创建标签按钮
CommonUtils.createTagButtons(requireContext(), binding!!.glSmsTemplate, binding!!.etSmsTemplate, ruleType)
} }
override fun onDestroyView() { override fun onDestroyView() {
@ -165,15 +167,6 @@ class NotificationFragment : BaseFragment<FragmentTasksActionNotificationBinding
override fun initListeners() { override fun initListeners() {
binding!!.btnSilentPeriod.setOnClickListener(this) binding!!.btnSilentPeriod.setOnClickListener(this)
binding!!.btInsertSender.setOnClickListener(this)
binding!!.btInsertContent.setOnClickListener(this)
binding!!.btInsertSenderApp.setOnClickListener(this)
binding!!.btInsertUid.setOnClickListener(this)
binding!!.btInsertTitleApp.setOnClickListener(this)
binding!!.btInsertContentApp.setOnClickListener(this)
binding!!.btInsertExtra.setOnClickListener(this)
binding!!.btInsertTime.setOnClickListener(this)
binding!!.btInsertDeviceName.setOnClickListener(this)
binding!!.btnTest.setOnClickListener(this) binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this) binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this) binding!!.btnSave.setOnClickListener(this)
@ -213,7 +206,6 @@ class NotificationFragment : BaseFragment<FragmentTasksActionNotificationBinding
@SingleClick @SingleClick
override fun onClick(v: View) { override fun onClick(v: View) {
try { try {
val etSmsTemplate: EditText = binding!!.etSmsTemplate
when (v.id) { when (v.id) {
R.id.btn_silent_period -> { R.id.btn_silent_period -> {
OptionsPickerBuilder(context, OnOptionsSelectListener { _: View?, options1: Int, options2: Int, _: Int -> OptionsPickerBuilder(context, OnOptionsSelectListener { _: View?, options1: Int, options2: Int, _: Int ->
@ -229,51 +221,6 @@ class NotificationFragment : BaseFragment<FragmentTasksActionNotificationBinding
} }
} }
R.id.bt_insert_sender -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_from))
return
}
R.id.bt_insert_content -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_sms))
return
}
R.id.bt_insert_sender_app -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_package_name))
return
}
R.id.bt_insert_uid -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_uid))
return
}
R.id.bt_insert_title_app -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_title))
return
}
R.id.bt_insert_content_app -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_msg))
return
}
R.id.bt_insert_extra -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_card_slot))
return
}
R.id.bt_insert_time -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_receive_time))
return
}
R.id.bt_insert_device_name -> {
CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_device_name))
return
}
R.id.btn_test -> { R.id.btn_test -> {
mCountDownHelper?.start() mCountDownHelper?.start()
try { try {

View File

@ -4,7 +4,6 @@ import android.text.TextUtils
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.EditText
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.App.Companion.BARK_ENCRYPTION_ALGORITHM_MAP import com.idormy.sms.forwarder.App.Companion.BARK_ENCRYPTION_ALGORITHM_MAP
@ -124,6 +123,10 @@ class BarkFragment : BaseFragment<FragmentSendersBarkBinding?>(), View.OnClickLi
} }
binding!!.spEncryptionAlgorithm.selectedIndex = 0 binding!!.spEncryptionAlgorithm.selectedIndex = 0
//创建标签按钮
CommonUtils.createTagButtons(requireContext(), binding!!.glTitleTemplate, binding!!.etTitleTemplate)
CommonUtils.createTagButtons(requireContext(), binding!!.glAutoCopyTemplate, binding!!.etAutoCopyTemplate)
//新增 //新增
if (senderId <= 0) { if (senderId <= 0) {
titleBar?.setSubTitle(getString(R.string.add_sender)) titleBar?.setSubTitle(getString(R.string.add_sender))
@ -179,14 +182,6 @@ class BarkFragment : BaseFragment<FragmentSendersBarkBinding?>(), View.OnClickLi
} }
override fun initListeners() { override fun initListeners() {
binding!!.btInsertSender.setOnClickListener(this)
binding!!.btInsertExtra.setOnClickListener(this)
binding!!.btInsertTime.setOnClickListener(this)
binding!!.btInsertDeviceName.setOnClickListener(this)
binding!!.btInsertSenderApp.setOnClickListener(this)
binding!!.btInsertUid.setOnClickListener(this)
binding!!.btInsertTitleApp.setOnClickListener(this)
binding!!.btInsertContentApp.setOnClickListener(this)
binding!!.btnTest.setOnClickListener(this) binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this) binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this) binding!!.btnSave.setOnClickListener(this)
@ -196,48 +191,7 @@ class BarkFragment : BaseFragment<FragmentSendersBarkBinding?>(), View.OnClickLi
@SingleClick @SingleClick
override fun onClick(v: View) { override fun onClick(v: View) {
try { try {
val etTitleTemplate: EditText = binding!!.etTitleTemplate
val etAutoCopyTemplate: EditText = binding!!.etAutoCopyTemplate
when (v.id) { when (v.id) {
R.id.bt_insert_sender -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_from))
return
}
R.id.bt_insert_extra -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_card_slot))
return
}
R.id.bt_insert_time -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_receive_time))
return
}
R.id.bt_insert_device_name -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_device_name))
return
}
R.id.bt_insert_sender_app -> {
CommonUtils.insertOrReplaceText2Cursor(etAutoCopyTemplate, getString(R.string.tag_package_name))
return
}
R.id.bt_insert_uid -> {
CommonUtils.insertOrReplaceText2Cursor(etAutoCopyTemplate, getString(R.string.tag_uid))
return
}
R.id.bt_insert_title_app -> {
CommonUtils.insertOrReplaceText2Cursor(etAutoCopyTemplate, getString(R.string.tag_title))
return
}
R.id.bt_insert_content_app -> {
CommonUtils.insertOrReplaceText2Cursor(etAutoCopyTemplate, getString(R.string.tag_msg))
return
}
R.id.btn_test -> { R.id.btn_test -> {
mCountDownHelper?.start() mCountDownHelper?.start()

View File

@ -5,7 +5,6 @@ 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.CompoundButton
import android.widget.EditText
import android.widget.RadioGroup import android.widget.RadioGroup
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import com.google.gson.Gson import com.google.gson.Gson
@ -96,6 +95,9 @@ class DingtalkGroupRobotFragment : BaseFragment<FragmentSendersDingtalkGroupRobo
} }
}) })
//创建标签按钮
CommonUtils.createTagButtons(requireContext(), binding!!.glTitleTemplate, binding!!.etTitleTemplate)
//新增 //新增
if (senderId <= 0) { if (senderId <= 0) {
titleBar?.setSubTitle(getString(R.string.add_sender)) titleBar?.setSubTitle(getString(R.string.add_sender))
@ -138,10 +140,6 @@ class DingtalkGroupRobotFragment : BaseFragment<FragmentSendersDingtalkGroupRobo
} }
override fun initListeners() { override fun initListeners() {
binding!!.btInsertSender.setOnClickListener(this)
binding!!.btInsertExtra.setOnClickListener(this)
binding!!.btInsertTime.setOnClickListener(this)
binding!!.btInsertDeviceName.setOnClickListener(this)
binding!!.btnTest.setOnClickListener(this) binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this) binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this) binding!!.btnSave.setOnClickListener(this)
@ -168,27 +166,7 @@ class DingtalkGroupRobotFragment : BaseFragment<FragmentSendersDingtalkGroupRobo
@SingleClick @SingleClick
override fun onClick(v: View) { override fun onClick(v: View) {
try { try {
val etTitleTemplate: EditText = binding!!.etTitleTemplate
when (v.id) { when (v.id) {
R.id.bt_insert_sender -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_from))
return
}
R.id.bt_insert_extra -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_card_slot))
return
}
R.id.bt_insert_time -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_receive_time))
return
}
R.id.bt_insert_device_name -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_device_name))
return
}
R.id.btn_test -> { R.id.btn_test -> {
mCountDownHelper?.start() mCountDownHelper?.start()

View File

@ -6,7 +6,6 @@ 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.CompoundButton
import android.widget.EditText
import android.widget.RadioGroup import android.widget.RadioGroup
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import com.google.gson.Gson import com.google.gson.Gson
@ -19,7 +18,15 @@ import com.idormy.sms.forwarder.database.viewmodel.SenderViewModel
import com.idormy.sms.forwarder.databinding.FragmentSendersDingtalkInnerRobotBinding import com.idormy.sms.forwarder.databinding.FragmentSendersDingtalkInnerRobotBinding
import com.idormy.sms.forwarder.entity.MsgInfo import com.idormy.sms.forwarder.entity.MsgInfo
import com.idormy.sms.forwarder.entity.setting.DingtalkInnerRobotSetting import com.idormy.sms.forwarder.entity.setting.DingtalkInnerRobotSetting
import com.idormy.sms.forwarder.utils.* import com.idormy.sms.forwarder.utils.CommonUtils
import com.idormy.sms.forwarder.utils.EVENT_TOAST_ERROR
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.Log
import com.idormy.sms.forwarder.utils.SettingUtils
import com.idormy.sms.forwarder.utils.XToastUtils
import com.idormy.sms.forwarder.utils.sender.DingtalkInnerRobotUtils import com.idormy.sms.forwarder.utils.sender.DingtalkInnerRobotUtils
import com.jeremyliao.liveeventbus.LiveEventBus import com.jeremyliao.liveeventbus.LiveEventBus
import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xaop.annotation.SingleClick
@ -35,7 +42,7 @@ 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.net.Proxy import java.net.Proxy
import java.util.* import java.util.Date
@Page(name = "钉钉企业机器人") @Page(name = "钉钉企业机器人")
@Suppress("PrivatePropertyName") @Suppress("PrivatePropertyName")
@ -90,6 +97,9 @@ class DingtalkInnerRobotFragment : BaseFragment<FragmentSendersDingtalkInnerRobo
} }
}) })
//创建标签按钮
CommonUtils.createTagButtons(requireContext(), binding!!.glTitleTemplate, binding!!.etTitleTemplate)
//新增 //新增
if (senderId <= 0) { if (senderId <= 0) {
titleBar?.setSubTitle(getString(R.string.add_sender)) titleBar?.setSubTitle(getString(R.string.add_sender))
@ -137,10 +147,6 @@ class DingtalkInnerRobotFragment : BaseFragment<FragmentSendersDingtalkInnerRobo
} }
override fun initListeners() { override fun initListeners() {
binding!!.btInsertSender.setOnClickListener(this)
binding!!.btInsertExtra.setOnClickListener(this)
binding!!.btInsertTime.setOnClickListener(this)
binding!!.btInsertDeviceName.setOnClickListener(this)
binding!!.btnTest.setOnClickListener(this) binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this) binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this) binding!!.btnSave.setOnClickListener(this)
@ -176,27 +182,7 @@ class DingtalkInnerRobotFragment : BaseFragment<FragmentSendersDingtalkInnerRobo
@SingleClick @SingleClick
override fun onClick(v: View) { override fun onClick(v: View) {
try { try {
val etTitleTemplate: EditText = binding!!.etTitleTemplate
when (v.id) { when (v.id) {
R.id.bt_insert_sender -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_from))
return
}
R.id.bt_insert_extra -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_card_slot))
return
}
R.id.bt_insert_time -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_receive_time))
return
}
R.id.bt_insert_device_name -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_device_name))
return
}
R.id.btn_test -> { R.id.btn_test -> {
mCountDownHelper?.start() mCountDownHelper?.start()

View File

@ -166,6 +166,10 @@ class EmailFragment : BaseFragment<FragmentSendersEmailBinding?>(), View.OnClick
} }
} }
//创建标签按钮
CommonUtils.createTagButtons(requireContext(), binding!!.glTitleTemplate, binding!!.etTitleTemplate)
CommonUtils.createTagButtons(requireContext(), binding!!.glNickname, binding!!.etNickname)
//新增 //新增
if (senderId <= 0) { if (senderId <= 0) {
titleBar?.setSubTitle(getString(R.string.add_sender)) titleBar?.setSubTitle(getString(R.string.add_sender))
@ -237,14 +241,6 @@ class EmailFragment : BaseFragment<FragmentSendersEmailBinding?>(), View.OnClick
} }
override fun initListeners() { override fun initListeners() {
binding!!.btInsertSenderToNickname.setOnClickListener(this)
binding!!.btInsertExtraToNickname.setOnClickListener(this)
binding!!.btInsertTimeToNickname.setOnClickListener(this)
binding!!.btInsertDeviceNameToNickname.setOnClickListener(this)
binding!!.btInsertSender.setOnClickListener(this)
binding!!.btInsertExtra.setOnClickListener(this)
binding!!.btInsertTime.setOnClickListener(this)
binding!!.btInsertDeviceName.setOnClickListener(this)
binding!!.btnTest.setOnClickListener(this) binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this) binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this) binding!!.btnSave.setOnClickListener(this)
@ -260,48 +256,7 @@ class EmailFragment : BaseFragment<FragmentSendersEmailBinding?>(), View.OnClick
@SingleClick @SingleClick
override fun onClick(v: View) { override fun onClick(v: View) {
try { try {
val etNickname: EditText = binding!!.etNickname
val etTitleTemplate: EditText = binding!!.etTitleTemplate
when (v.id) { when (v.id) {
R.id.bt_insert_sender_to_nickname -> {
CommonUtils.insertOrReplaceText2Cursor(etNickname, getString(R.string.tag_from))
return
}
R.id.bt_insert_extra_to_nickname -> {
CommonUtils.insertOrReplaceText2Cursor(etNickname, getString(R.string.tag_card_slot))
return
}
R.id.bt_insert_time_to_nickname -> {
CommonUtils.insertOrReplaceText2Cursor(etNickname, getString(R.string.tag_receive_time))
return
}
R.id.bt_insert_device_name_to_nickname -> {
CommonUtils.insertOrReplaceText2Cursor(etNickname, getString(R.string.tag_device_name))
return
}
R.id.bt_insert_sender -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_from))
return
}
R.id.bt_insert_extra -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_card_slot))
return
}
R.id.bt_insert_time -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_receive_time))
return
}
R.id.bt_insert_device_name -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_device_name))
return
}
R.id.btn_test -> { R.id.btn_test -> {
mCountDownHelper?.start() mCountDownHelper?.start()

View File

@ -4,7 +4,6 @@ import android.text.TextUtils
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.EditText
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.JsonParser import com.google.gson.JsonParser
@ -105,6 +104,10 @@ class FeishuAppFragment : BaseFragment<FragmentSendersFeishuAppBinding?>(), View
} }
} }
//创建标签按钮
CommonUtils.createTagButtons(requireContext(), binding!!.glTitleTemplate, binding!!.etTitleTemplate)
CommonUtils.createTagButtons(requireContext(), binding!!.glMessageCard, binding!!.etMessageCard)
//新增 //新增
if (senderId <= 0) { if (senderId <= 0) {
titleBar?.setSubTitle(getString(R.string.add_sender)) titleBar?.setSubTitle(getString(R.string.add_sender))
@ -150,15 +153,6 @@ class FeishuAppFragment : BaseFragment<FragmentSendersFeishuAppBinding?>(), View
} }
override fun initListeners() { override fun initListeners() {
binding!!.btInsertSenderToTitle.setOnClickListener(this)
binding!!.btInsertExtraToTitle.setOnClickListener(this)
binding!!.btInsertTimeToTitle.setOnClickListener(this)
binding!!.btInsertDeviceNameToTitle.setOnClickListener(this)
binding!!.btInsertSender.setOnClickListener(this)
binding!!.btInsertContent.setOnClickListener(this)
binding!!.btInsertExtra.setOnClickListener(this)
binding!!.btInsertTime.setOnClickListener(this)
binding!!.btInsertDeviceName.setOnClickListener(this)
binding!!.btnTest.setOnClickListener(this) binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this) binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this) binding!!.btnSave.setOnClickListener(this)
@ -168,53 +162,7 @@ class FeishuAppFragment : BaseFragment<FragmentSendersFeishuAppBinding?>(), View
@SingleClick @SingleClick
override fun onClick(v: View) { override fun onClick(v: View) {
try { try {
val etTitleTemplate: EditText = binding!!.etTitleTemplate
val etMessageCard: EditText = binding!!.etMessageCard
when (v.id) { when (v.id) {
R.id.bt_insert_sender_to_title -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_from))
return
}
R.id.bt_insert_extra_to_title -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_card_slot))
return
}
R.id.bt_insert_time_to_title -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_receive_time))
return
}
R.id.bt_insert_device_name_to_title -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_device_name))
return
}
R.id.bt_insert_sender -> {
CommonUtils.insertOrReplaceText2Cursor(etMessageCard, getString(R.string.tag_from))
return
}
R.id.bt_insert_content -> {
CommonUtils.insertOrReplaceText2Cursor(etMessageCard, getString(R.string.tag_sms))
return
}
R.id.bt_insert_extra -> {
CommonUtils.insertOrReplaceText2Cursor(etMessageCard, getString(R.string.tag_card_slot))
return
}
R.id.bt_insert_time -> {
CommonUtils.insertOrReplaceText2Cursor(etMessageCard, getString(R.string.tag_receive_time))
return
}
R.id.bt_insert_device_name -> {
CommonUtils.insertOrReplaceText2Cursor(etMessageCard, getString(R.string.tag_device_name))
return
}
R.id.btn_test -> { R.id.btn_test -> {
mCountDownHelper?.start() mCountDownHelper?.start()

View File

@ -4,7 +4,6 @@ import android.text.TextUtils
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.EditText
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.JsonParser import com.google.gson.JsonParser
@ -105,6 +104,10 @@ class FeishuFragment : BaseFragment<FragmentSendersFeishuBinding?>(), View.OnCli
} }
} }
//创建标签按钮
CommonUtils.createTagButtons(requireContext(), binding!!.glTitleTemplate, binding!!.etTitleTemplate)
CommonUtils.createTagButtons(requireContext(), binding!!.glMessageCard, binding!!.etMessageCard)
//新增 //新增
if (senderId <= 0) { if (senderId <= 0) {
titleBar?.setSubTitle(getString(R.string.add_sender)) titleBar?.setSubTitle(getString(R.string.add_sender))
@ -145,15 +148,6 @@ class FeishuFragment : BaseFragment<FragmentSendersFeishuBinding?>(), View.OnCli
} }
override fun initListeners() { override fun initListeners() {
binding!!.btInsertSenderToTitle.setOnClickListener(this)
binding!!.btInsertExtraToTitle.setOnClickListener(this)
binding!!.btInsertTimeToTitle.setOnClickListener(this)
binding!!.btInsertDeviceNameToTitle.setOnClickListener(this)
binding!!.btInsertSender.setOnClickListener(this)
binding!!.btInsertContent.setOnClickListener(this)
binding!!.btInsertExtra.setOnClickListener(this)
binding!!.btInsertTime.setOnClickListener(this)
binding!!.btInsertDeviceName.setOnClickListener(this)
binding!!.btnTest.setOnClickListener(this) binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this) binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this) binding!!.btnSave.setOnClickListener(this)
@ -163,53 +157,7 @@ class FeishuFragment : BaseFragment<FragmentSendersFeishuBinding?>(), View.OnCli
@SingleClick @SingleClick
override fun onClick(v: View) { override fun onClick(v: View) {
try { try {
val etTitleTemplate: EditText = binding!!.etTitleTemplate
val etMessageCard: EditText = binding!!.etMessageCard
when (v.id) { when (v.id) {
R.id.bt_insert_sender_to_title -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_from))
return
}
R.id.bt_insert_extra_to_title -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_card_slot))
return
}
R.id.bt_insert_time_to_title -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_receive_time))
return
}
R.id.bt_insert_device_name_to_title -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_device_name))
return
}
R.id.bt_insert_sender -> {
CommonUtils.insertOrReplaceText2Cursor(etMessageCard, getString(R.string.tag_from))
return
}
R.id.bt_insert_content -> {
CommonUtils.insertOrReplaceText2Cursor(etMessageCard, getString(R.string.tag_sms))
return
}
R.id.bt_insert_extra -> {
CommonUtils.insertOrReplaceText2Cursor(etMessageCard, getString(R.string.tag_card_slot))
return
}
R.id.bt_insert_time -> {
CommonUtils.insertOrReplaceText2Cursor(etMessageCard, getString(R.string.tag_receive_time))
return
}
R.id.bt_insert_device_name -> {
CommonUtils.insertOrReplaceText2Cursor(etMessageCard, getString(R.string.tag_device_name))
return
}
R.id.btn_test -> { R.id.btn_test -> {
mCountDownHelper?.start() mCountDownHelper?.start()

View File

@ -4,7 +4,6 @@ import android.text.TextUtils
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.EditText
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
@ -94,6 +93,9 @@ class GotifyFragment : BaseFragment<FragmentSendersGotifyBinding?>(), View.OnCli
} }
}) })
//创建标签按钮
CommonUtils.createTagButtons(requireContext(), binding!!.glTitleTemplate, binding!!.etTitleTemplate)
//新增 //新增
if (senderId <= 0) { if (senderId <= 0) {
titleBar?.setSubTitle(getString(R.string.add_sender)) titleBar?.setSubTitle(getString(R.string.add_sender))
@ -132,10 +134,6 @@ class GotifyFragment : BaseFragment<FragmentSendersGotifyBinding?>(), View.OnCli
} }
override fun initListeners() { override fun initListeners() {
binding!!.btInsertSender.setOnClickListener(this)
binding!!.btInsertExtra.setOnClickListener(this)
binding!!.btInsertTime.setOnClickListener(this)
binding!!.btInsertDeviceName.setOnClickListener(this)
binding!!.btnTest.setOnClickListener(this) binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this) binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this) binding!!.btnSave.setOnClickListener(this)
@ -145,27 +143,7 @@ class GotifyFragment : BaseFragment<FragmentSendersGotifyBinding?>(), View.OnCli
@SingleClick @SingleClick
override fun onClick(v: View) { override fun onClick(v: View) {
try { try {
val etTitleTemplate: EditText = binding!!.etTitleTemplate
when (v.id) { when (v.id) {
R.id.bt_insert_sender -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_from))
return
}
R.id.bt_insert_extra -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_card_slot))
return
}
R.id.bt_insert_time -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_receive_time))
return
}
R.id.bt_insert_device_name -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_device_name))
return
}
R.id.btn_test -> { R.id.btn_test -> {
mCountDownHelper?.start() mCountDownHelper?.start()

View File

@ -4,7 +4,6 @@ import android.text.TextUtils
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.EditText
import android.widget.RadioGroup import android.widget.RadioGroup
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import com.google.gson.Gson import com.google.gson.Gson
@ -95,6 +94,9 @@ class PushplusFragment : BaseFragment<FragmentSendersPushplusBinding?>(), View.O
} }
}) })
//创建标签按钮
CommonUtils.createTagButtons(requireContext(), binding!!.glTitleTemplate, binding!!.etTitleTemplate)
//新增 //新增
if (senderId <= 0) { if (senderId <= 0) {
titleBar?.setSubTitle(getString(R.string.add_sender)) titleBar?.setSubTitle(getString(R.string.add_sender))
@ -143,10 +145,6 @@ class PushplusFragment : BaseFragment<FragmentSendersPushplusBinding?>(), View.O
} }
override fun initListeners() { override fun initListeners() {
binding!!.btInsertSender.setOnClickListener(this)
binding!!.btInsertExtra.setOnClickListener(this)
binding!!.btInsertTime.setOnClickListener(this)
binding!!.btInsertDeviceName.setOnClickListener(this)
binding!!.btnTest.setOnClickListener(this) binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this) binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this) binding!!.btnSave.setOnClickListener(this)
@ -165,27 +163,7 @@ class PushplusFragment : BaseFragment<FragmentSendersPushplusBinding?>(), View.O
@SingleClick @SingleClick
override fun onClick(v: View) { override fun onClick(v: View) {
try { try {
val etTitleTemplate: EditText = binding!!.etTitleTemplate
when (v.id) { when (v.id) {
R.id.bt_insert_sender -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_from))
return
}
R.id.bt_insert_extra -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_card_slot))
return
}
R.id.bt_insert_time -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_receive_time))
return
}
R.id.bt_insert_device_name -> {
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_device_name))
return
}
R.id.btn_test -> { R.id.btn_test -> {
mCountDownHelper?.start() mCountDownHelper?.start()

View File

@ -6,18 +6,29 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.graphics.Rect import android.graphics.Rect
import android.os.Build
import android.text.SpannableString import android.text.SpannableString
import android.text.SpannableStringBuilder import android.text.SpannableStringBuilder
import android.text.Spanned import android.text.Spanned
import android.text.TextUtils import android.text.TextUtils
import android.text.method.LinkMovementMethod import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan import android.text.style.ClickableSpan
import android.util.TypedValue
import android.view.View import android.view.View
import android.widget.EditText import android.widget.EditText
import android.widget.GridLayout
import android.widget.TextView
import androidx.annotation.ColorInt import androidx.annotation.ColorInt
import androidx.core.app.NotificationManagerCompat import androidx.core.app.NotificationManagerCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import com.idormy.sms.forwarder.App import com.idormy.sms.forwarder.App
import com.idormy.sms.forwarder.App.Companion.APP_TAG_MAP
import com.idormy.sms.forwarder.App.Companion.BATTERY_TAG_MAP
import com.idormy.sms.forwarder.App.Companion.CALL_TAG_MAP
import com.idormy.sms.forwarder.App.Companion.COMMON_TAG_MAP
import com.idormy.sms.forwarder.App.Companion.LOCATION_TAG_MAP
import com.idormy.sms.forwarder.App.Companion.NETWORK_TAG_MAP
import com.idormy.sms.forwarder.App.Companion.SMS_TAG_MAP
import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.core.webview.AgentWebActivity import com.idormy.sms.forwarder.core.webview.AgentWebActivity
import com.idormy.sms.forwarder.core.webview.AgentWebFragment import com.idormy.sms.forwarder.core.webview.AgentWebFragment
@ -35,6 +46,8 @@ import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog.SingleButton
import com.xuexiang.xui.widget.imageview.preview.PreviewBuilder import com.xuexiang.xui.widget.imageview.preview.PreviewBuilder
import com.xuexiang.xutil.XUtil import com.xuexiang.xutil.XUtil
import com.xuexiang.xutil.common.StringUtils import com.xuexiang.xutil.common.StringUtils
import com.xuexiang.xutil.resource.ResUtils.getColor
import com.xuexiang.xutil.resource.ResUtils.getDrawable
import com.xuexiang.xutil.resource.ResUtils.getString import com.xuexiang.xutil.resource.ResUtils.getString
import java.net.Inet4Address import java.net.Inet4Address
import java.net.Inet6Address import java.net.Inet6Address
@ -338,38 +351,73 @@ class CommonUtils private constructor() {
XUtil.exitApp() XUtil.exitApp()
} }
/*fun switchLanguage(oldLocale: Locale, newLocale: Locale) { // 动态创建标签按钮并设置点击事件(将标签插入指定输入框)
val oldLang = if (TAG_LANG.contains(oldLocale.toString())) oldLocale.toString() else "en" fun createTagButtons(context: Context, gridLayout: GridLayout, editText: EditText, scene: String = "basic", excludeButtons: Array<String> = emptyArray()) {
val newLang = if (TAG_LANG.contains(newLocale.toString())) newLocale.toString() else "en" // 将排除的按钮转换成一个集合,方便查找
Log.i(App.TAG, "switchLanguage: oldLang=$oldLang, newLang=$newLang") val excludeSet = excludeButtons.toSet()
//替换自定义模板标签 // 清空GridLayout中的所有视图
var smsTemplate = SettingUtils.smsTemplate gridLayout.removeAllViews()
//替换Rule.sms_template中的标签
var ruleColumn = "sms_template"
//替换Sender.json_setting中的标签
var senderColumn = "json_setting"
for (i in TAG_LIST.indices) { // 根据场景动态拼接所有按钮数据
val oldTag = TAG_LIST[i][oldLang].toString() val allButtons = when (scene) {
val newTag = TAG_LIST[i][newLang].toString() "sms" -> SMS_TAG_MAP
if (oldTag == newTag) continue "call" -> CALL_TAG_MAP
"app" -> APP_TAG_MAP
else -> CALL_TAG_MAP + SMS_TAG_MAP + APP_TAG_MAP
}.toMutableMap()
smsTemplate = smsTemplate.replace(oldTag, newTag) if (SettingUtils.enableLocation) {
ruleColumn = "REPLACE($ruleColumn, '$oldTag', '$newTag')" allButtons += LOCATION_TAG_MAP
senderColumn = "REPLACE($senderColumn, '$oldTag', '$newTag')" }
if (scene == "all") {
allButtons += BATTERY_TAG_MAP
allButtons += NETWORK_TAG_MAP
}
allButtons += COMMON_TAG_MAP
val btnBackground = getDrawable(R.drawable.rounded_button)
val btnTextColor = getColor(android.R.color.white)
// 遍历所有按钮数据,过滤掉需要排除的按钮
allButtons.forEach { (tag, lable) ->
if (excludeSet.isNotEmpty() && excludeSet.contains(tag)) {
allButtons.remove(tag)
}
val button = TextView(context).apply {
text = lable
setOnClickListener {
insertOrReplaceText2Cursor(editText, tag)
}
// 设置紧凑样式
setTextSize(TypedValue.COMPLEX_UNIT_SP, 9f)
maxLines = 1
ellipsize = TextUtils.TruncateAt.END
setPadding(5, 5, 5, 5)
gravity = android.view.Gravity.CENTER
background = btnBackground
setTextColor(btnTextColor)
// 布局参数
layoutParams = GridLayout.LayoutParams().apply {
height = GridLayout.LayoutParams.WRAP_CONTENT
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
width = 0
columnSpec = GridLayout.spec(GridLayout.UNDEFINED, 1f)
} else {
width = GridLayout.LayoutParams.WRAP_CONTENT
}
setMargins(8, 8, 8, 8)
}
}
gridLayout.addView(button)
} }
SettingUtils.smsTemplate = smsTemplate }
val updateRuleSql = "UPDATE Rule SET sms_template = $ruleColumn WHERE sms_template != ''"
Log.d(App.TAG, "updateRuleSql: $updateRuleSql")
Core.rule.replaceTags(updateRuleSql)
val updateSenderSql = "UPDATE Sender SET json_setting = $senderColumn WHERE type NOT IN (4, 5, 6, 7, 8, 14)"
Log.d(App.TAG, "updateSenderSql: $updateSenderSql")
Core.sender.replaceTags(updateSenderSql)
}*/
} }
init { init {

View File

@ -376,65 +376,13 @@
android:inputType="textMultiLine" android:inputType="textMultiLine"
app:met_clearButton="true" /> app:met_clearButton="true" />
<LinearLayout <GridLayout
android:id="@+id/gl_sms_template"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:layout_gravity="center"
android:columnCount="4"
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton android:orientation="horizontal" />
android:id="@+id/bt_insert_sender"
style="@style/insertButtonStyle"
android:text="@string/insert_sender" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_content"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_content" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_extra"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_extra" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_sender_app"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_sender_app" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_uid"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_uid" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_title_app"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_title_app" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_content_app"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_content_app" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_time"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_time" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_device_name"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_device_name" />
</LinearLayout>
</LinearLayout> </LinearLayout>
@ -566,8 +514,8 @@
<HorizontalScrollView <HorizontalScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_marginTop="3dp" android:layout_height="wrap_content"
android:layout_height="wrap_content"> android:layout_marginTop="3dp">
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"

View File

@ -293,35 +293,13 @@
android:singleLine="true" android:singleLine="true"
app:met_clearButton="true" /> app:met_clearButton="true" />
<LinearLayout <GridLayout
android:id="@+id/gl_title_template"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:layout_gravity="center"
android:columnCount="4"
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton android:orientation="horizontal" />
android:id="@+id/bt_insert_sender"
style="@style/insertButtonStyle"
android:text="@string/insert_sender" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_extra"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_extra" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_time"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_time" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_device_name"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_device_name" />
</LinearLayout>
</LinearLayout> </LinearLayout>
@ -361,36 +339,13 @@
android:singleLine="true" android:singleLine="true"
app:met_clearButton="true" /> app:met_clearButton="true" />
<LinearLayout <GridLayout
android:id="@+id/gl_auto_copy_template"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:layout_gravity="center"
android:columnCount="4"
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton android:orientation="horizontal" />
android:id="@+id/bt_insert_title_app"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_title_app" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_content_app"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_content_app" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_sender_app"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_sender_app" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_uid"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_uid" />
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -253,35 +253,13 @@
android:singleLine="true" android:singleLine="true"
app:met_clearButton="true" /> app:met_clearButton="true" />
<LinearLayout <GridLayout
android:id="@+id/gl_title_template"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:layout_gravity="center"
android:columnCount="4"
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton android:orientation="horizontal" />
android:id="@+id/bt_insert_sender"
style="@style/insertButtonStyle"
android:text="@string/insert_sender" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_extra"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_extra" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_time"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_time" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_device_name"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_device_name" />
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -230,35 +230,13 @@
android:singleLine="true" android:singleLine="true"
app:met_clearButton="true" /> app:met_clearButton="true" />
<LinearLayout <GridLayout
android:id="@+id/gl_title_template"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:layout_gravity="center"
android:columnCount="4"
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton android:orientation="horizontal" />
android:id="@+id/bt_insert_sender"
style="@style/insertButtonStyle"
android:text="@string/insert_sender" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_extra"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_extra" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_time"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_time" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_device_name"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_device_name" />
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -149,35 +149,13 @@
android:singleLine="true" android:singleLine="true"
app:met_clearButton="true" /> app:met_clearButton="true" />
<LinearLayout <GridLayout
android:id="@+id/gl_nickname"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:layout_gravity="center"
android:columnCount="4"
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton android:orientation="horizontal" />
android:id="@+id/bt_insert_sender_to_nickname"
style="@style/insertButtonStyle"
android:text="@string/insert_sender" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_extra_to_nickname"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_extra" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_time_to_nickname"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_time" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_device_name_to_nickname"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_device_name" />
</LinearLayout>
</LinearLayout> </LinearLayout>
@ -520,35 +498,13 @@
android:singleLine="true" android:singleLine="true"
app:met_clearButton="true" /> app:met_clearButton="true" />
<LinearLayout <GridLayout
android:id="@+id/gl_title_template"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:layout_gravity="center"
android:columnCount="4"
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton android:orientation="horizontal" />
android:id="@+id/bt_insert_sender"
style="@style/insertButtonStyle"
android:text="@string/insert_sender" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_extra"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_extra" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_time"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_time" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_device_name"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_device_name" />
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -158,35 +158,13 @@
android:singleLine="true" android:singleLine="true"
app:met_clearButton="true" /> app:met_clearButton="true" />
<LinearLayout <GridLayout
android:id="@+id/gl_title_template"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:layout_gravity="center"
android:columnCount="4"
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton android:orientation="horizontal" />
android:id="@+id/bt_insert_sender_to_title"
style="@style/insertButtonStyle"
android:text="@string/insert_sender" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_extra_to_title"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_extra" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_time_to_title"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_time" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_device_name_to_title"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_device_name" />
</LinearLayout>
</LinearLayout> </LinearLayout>
@ -230,41 +208,13 @@
android:text="" android:text=""
tools:ignore="RtlHardcoded,SpeakableTextPresentCheck" /> tools:ignore="RtlHardcoded,SpeakableTextPresentCheck" />
<LinearLayout <GridLayout
android:id="@+id/gl_message_card"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:layout_gravity="center"
android:columnCount="4"
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton android:orientation="horizontal" />
android:id="@+id/bt_insert_sender"
style="@style/insertButtonStyle"
android:text="@string/insert_sender" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_content"
style="@style/insertButtonStyle"
android:layout_marginStart="3dp"
android:text="@string/insert_content" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_extra"
style="@style/insertButtonStyle"
android:layout_marginStart="3dp"
android:text="@string/insert_extra" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_time"
style="@style/insertButtonStyle"
android:layout_marginStart="3dp"
android:text="@string/insert_time" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_device_name"
style="@style/insertButtonStyle"
android:layout_marginStart="3dp"
android:text="@string/insert_device_name" />
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -235,35 +235,13 @@
android:singleLine="true" android:singleLine="true"
app:met_clearButton="true" /> app:met_clearButton="true" />
<LinearLayout <GridLayout
android:id="@+id/gl_title_template"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:layout_gravity="center"
android:columnCount="4"
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton android:orientation="horizontal" />
android:id="@+id/bt_insert_sender_to_title"
style="@style/insertButtonStyle"
android:text="@string/insert_sender" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_extra_to_title"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_extra" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_time_to_title"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_time" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_device_name_to_title"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_device_name" />
</LinearLayout>
</LinearLayout> </LinearLayout>
@ -307,41 +285,13 @@
android:text="" android:text=""
tools:ignore="RtlHardcoded,SpeakableTextPresentCheck" /> tools:ignore="RtlHardcoded,SpeakableTextPresentCheck" />
<LinearLayout <GridLayout
android:id="@+id/gl_message_card"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:layout_gravity="center"
android:columnCount="4"
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton android:orientation="horizontal" />
android:id="@+id/bt_insert_sender"
style="@style/insertButtonStyle"
android:text="@string/insert_sender" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_content"
style="@style/insertButtonStyle"
android:layout_marginStart="3dp"
android:text="@string/insert_content" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_extra"
style="@style/insertButtonStyle"
android:layout_marginStart="3dp"
android:text="@string/insert_extra" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_time"
style="@style/insertButtonStyle"
android:layout_marginStart="3dp"
android:text="@string/insert_time" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_device_name"
style="@style/insertButtonStyle"
android:layout_marginStart="3dp"
android:text="@string/insert_device_name" />
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -112,35 +112,13 @@
android:singleLine="true" android:singleLine="true"
app:met_clearButton="true" /> app:met_clearButton="true" />
<LinearLayout <GridLayout
android:id="@+id/gl_title_template"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:layout_gravity="center"
android:columnCount="4"
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton android:orientation="horizontal" />
android:id="@+id/bt_insert_sender"
style="@style/insertButtonStyle"
android:text="@string/insert_sender" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_extra"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_extra" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_time"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_time" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_device_name"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_device_name" />
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -286,35 +286,13 @@
android:singleLine="true" android:singleLine="true"
app:met_clearButton="true" /> app:met_clearButton="true" />
<LinearLayout <GridLayout
android:id="@+id/gl_title_template"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:layout_gravity="center"
android:columnCount="4"
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton android:orientation="horizontal" />
android:id="@+id/bt_insert_sender"
style="@style/insertButtonStyle"
android:text="@string/insert_sender" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_extra"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_extra" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_time"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_time" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_device_name"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_device_name" />
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -1742,41 +1742,13 @@
android:text="" android:text=""
tools:ignore="RtlHardcoded,SpeakableTextPresentCheck" /> tools:ignore="RtlHardcoded,SpeakableTextPresentCheck" />
<LinearLayout <GridLayout
android:id="@+id/gl_sms_template"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:layout_gravity="center"
android:columnCount="4"
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton android:orientation="horizontal" />
android:id="@+id/bt_insert_sender"
style="@style/insertButtonStyle"
android:text="@string/insert_sender" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_content"
style="@style/insertButtonStyle"
android:layout_marginStart="3dp"
android:text="@string/insert_content" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_extra"
style="@style/insertButtonStyle"
android:layout_marginStart="3dp"
android:text="@string/insert_extra" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_time"
style="@style/insertButtonStyle"
android:layout_marginStart="3dp"
android:text="@string/insert_time" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_device_name"
style="@style/insertButtonStyle"
android:layout_marginStart="3dp"
android:text="@string/insert_device_name" />
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -161,65 +161,13 @@
android:inputType="textMultiLine" android:inputType="textMultiLine"
app:met_clearButton="true" /> app:met_clearButton="true" />
<LinearLayout <GridLayout
android:id="@+id/gl_sms_template"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:layout_gravity="center"
android:columnCount="4"
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton android:orientation="horizontal" />
android:id="@+id/bt_insert_sender"
style="@style/insertButtonStyle"
android:text="@string/insert_sender" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_content"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_content" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_extra"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_extra" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_sender_app"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_sender_app" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_uid"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_uid" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_title_app"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_title_app" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_content_app"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_content_app" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_time"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_time" />
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
android:id="@+id/bt_insert_device_name"
style="@style/insertButtonStyle"
android:layout_marginStart="5dp"
android:text="@string/insert_device_name" />
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -1,5 +1,33 @@
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="insert_tag_from">Phone Number</string>
<string name="insert_tag_sms">SMS Content</string>
<string name="insert_tag_package_name">Package Name</string>
<string name="insert_tag_app_name">App Name</string>
<string name="insert_tag_title">Inform Title</string>
<string name="insert_tag_msg">Inform Content</string>
<string name="insert_tag_card_slot">SIM Label</string>
<string name="insert_tag_card_subid">SIM SubId</string>
<string name="insert_tag_receive_time">Receive Time</string>
<string name="insert_tag_current_time">Current Time</string>
<string name="insert_tag_device_name">Device Name</string>
<string name="insert_tag_app_version">SmsF Version</string>
<string name="insert_tag_call_type">Call Type</string>
<string name="insert_tag_location">Location</string>
<string name="insert_tag_location_longitude">Longitude</string>
<string name="insert_tag_location_latitude">Latitude</string>
<string name="insert_tag_location_address">Address</string>
<string name="insert_tag_battery_pct">Battery Percentage</string>
<string name="insert_tag_battery_status">Battery Status</string>
<string name="insert_tag_battery_plugged">Charging Method</string>
<string name="insert_tag_battery_info">Complete Battery Info</string>
<string name="insert_tag_battery_info_simple">Simplified Battery Info</string>
<string name="insert_tag_uid">UID</string>
<string name="insert_tag_ipv4">Public IPv4</string>
<string name="insert_tag_ipv6">Public IPv6</string>
<string name="insert_tag_ip_list">IP List</string>
<string name="insert_tag_net_type">Network Status</string>
<string name="type_param_sms">Sms</string> <string name="type_param_sms">Sms</string>
<string name="type_param_call">Call</string> <string name="type_param_call">Call</string>
<string name="type_param_app">App</string> <string name="type_param_app">App</string>
@ -223,8 +251,8 @@
<string name="invalid_wework_agent">CoreID, AgentID, and Secret cannot be empty</string> <string name="invalid_wework_agent">CoreID, AgentID, and Secret cannot be empty</string>
<string name="invalid_dingtalk_inner_robot">AgentId, AppKey, AppSecret, and UserIds cannot be empty</string> <string name="invalid_dingtalk_inner_robot">AgentId, AppKey, AppSecret, and UserIds cannot be empty</string>
<string name="invalid_phone_num">The receiving phone number cannot be empty</string> <string name="invalid_phone_num">The receiving phone number cannot be empty</string>
<string name="invalid_multi_match">Malformed multiple match rule line %s</string> <string name="invalid_multi_match">Malformed multiple match rule line %d</string>
<string name="invalid_regex_replace">Incorrect format on line %s of regex replacement</string> <string name="invalid_regex_replace">Incorrect format on line %d of regex replacement</string>
<string name="invalid_message_card">The Message Card Json is invalid.</string> <string name="invalid_message_card">The Message Card Json is invalid.</string>
<string name="email_host">Host</string> <string name="email_host">Host</string>
<string name="smtp_port">Port</string> <string name="smtp_port">Port</string>
@ -318,14 +346,6 @@
<string name="custom_template">Custom templates</string> <string name="custom_template">Custom templates</string>
<string name="custom_template_tips">Tip: Insert labels as needed; Leave blank to apply default template</string> <string name="custom_template_tips">Tip: Insert labels as needed; Leave blank to apply default template</string>
<string name="insert_sender">Phone</string> <string name="insert_sender">Phone</string>
<string name="insert_sender_app">PackageName</string>
<string name="insert_uid">UID</string>
<string name="insert_content">SMS</string>
<string name="insert_title_app">InformTitle</string>
<string name="insert_content_app">InformContent</string>
<string name="insert_extra">SIM</string>
<string name="insert_time">Time</string>
<string name="insert_device_name">Device</string>
<string name="battery_setting">Battery Optimization</string> <string name="battery_setting">Battery Optimization</string>
<string name="battery_setting_tips">Set it to manual management, including automatic startup, associated startup, and background running</string> <string name="battery_setting_tips">Set it to manual management, including automatic startup, associated startup, and background running</string>
<string name="unknown_number">Unknown Number</string> <string name="unknown_number">Unknown Number</string>
@ -455,7 +475,7 @@
<string name="interval_label">Increasing Interval</string> <string name="interval_label">Increasing Interval</string>
<string name="timeout_label">Single Timeout</string> <string name="timeout_label">Single Timeout</string>
<string name="seconds">secs</string> <string name="seconds">secs</string>
<string name="seconds_n">%s sec</string> <string name="seconds_n">%d sec</string>
<string name="retry_label">Max Retries</string> <string name="retry_label">Max Retries</string>
<string name="test_sender_sms">[%s] Congratulations, the sender test is successful, please continue to add forwarding rules!</string> <string name="test_sender_sms">[%s] Congratulations, the sender test is successful, please continue to add forwarding rules!</string>
<string name="test_sender_name">Test Channel</string> <string name="test_sender_name">Test Channel</string>

View File

@ -1,5 +1,33 @@
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="insert_tag_from">来源号码</string>
<string name="insert_tag_sms">短信内容</string>
<string name="insert_tag_package_name">APP包名</string>
<string name="insert_tag_app_name">APP应用名</string>
<string name="insert_tag_title">通知标题</string>
<string name="insert_tag_msg">通知内容</string>
<string name="insert_tag_card_slot">卡槽备注</string>
<string name="insert_tag_card_subid">卡槽主键</string>
<string name="insert_tag_receive_time">接收时间</string>
<string name="insert_tag_current_time">当前时间</string>
<string name="insert_tag_device_name">设备名称</string>
<string name="insert_tag_app_version">SmsF版本</string>
<string name="insert_tag_call_type">通话类型</string>
<string name="insert_tag_location">定位信息</string>
<string name="insert_tag_location_longitude">定位经度</string>
<string name="insert_tag_location_latitude">定位维度</string>
<string name="insert_tag_location_address">定位地址</string>
<string name="insert_tag_battery_pct">电池电量</string>
<string name="insert_tag_battery_status">电池状态</string>
<string name="insert_tag_battery_plugged">充电方式</string>
<string name="insert_tag_battery_info">电池完整信息</string>
<string name="insert_tag_battery_info_simple">电池简单信息</string>
<string name="insert_tag_uid">用户UID</string>
<string name="insert_tag_ipv4">公网IPv4</string>
<string name="insert_tag_ipv6">公网IPv6</string>
<string name="insert_tag_ip_list">IP地址列表</string>
<string name="insert_tag_net_type">网络状态</string>
<string name="type_param_sms">短信</string> <string name="type_param_sms">短信</string>
<string name="type_param_call">通话</string> <string name="type_param_call">通话</string>
<string name="type_param_app">应用</string> <string name="type_param_app">应用</string>
@ -224,8 +252,8 @@
<string name="invalid_wework_agent">企业ID、AgentID、Secret都不能为空</string> <string name="invalid_wework_agent">企业ID、AgentID、Secret都不能为空</string>
<string name="invalid_dingtalk_inner_robot">AgentId、AppKey、AppSecret、UserIds都不能为空</string> <string name="invalid_dingtalk_inner_robot">AgentId、AppKey、AppSecret、UserIds都不能为空</string>
<string name="invalid_phone_num">接收手机号不能为空</string> <string name="invalid_phone_num">接收手机号不能为空</string>
<string name="invalid_multi_match">多重匹配规则的第 %s 行格式有误</string> <string name="invalid_multi_match">多重匹配规则的第 %d 行格式有误</string>
<string name="invalid_regex_replace">正则替换内容的第 %s 行格式有误</string> <string name="invalid_regex_replace">正则替换内容的第 %d 行格式有误</string>
<string name="invalid_message_card">自定义消息卡片Json不合法</string> <string name="invalid_message_card">自定义消息卡片Json不合法</string>
<string name="email_host">主机</string> <string name="email_host">主机</string>
<string name="smtp_port">端口</string> <string name="smtp_port">端口</string>
@ -319,14 +347,6 @@
<string name="custom_template">转发信息模版</string> <string name="custom_template">转发信息模版</string>
<string name="custom_template_tips">Tip按需插入内容标签留空使用默认模版</string> <string name="custom_template_tips">Tip按需插入内容标签留空使用默认模版</string>
<string name="insert_sender">来源号码</string> <string name="insert_sender">来源号码</string>
<string name="insert_sender_app">APP包名</string>
<string name="insert_uid">UID</string>
<string name="insert_content">短信内容</string>
<string name="insert_title_app">通知标题</string>
<string name="insert_content_app">通知内容</string>
<string name="insert_extra">卡槽信息</string>
<string name="insert_time">接收时间</string>
<string name="insert_device_name">设备名称</string>
<string name="battery_setting">忽略电池优化设置</string> <string name="battery_setting">忽略电池优化设置</string>
<string name="battery_setting_tips">请设置为手动管理:允许自启动、允许关联启动、允许后台运行</string> <string name="battery_setting_tips">请设置为手动管理:允许自启动、允许关联启动、允许后台运行</string>
<string name="unknown_number">未知号码</string> <string name="unknown_number">未知号码</string>
@ -456,7 +476,7 @@
<string name="interval_label">递增间隔</string> <string name="interval_label">递增间隔</string>
<string name="timeout_label">单次超时</string> <string name="timeout_label">单次超时</string>
<string name="seconds"></string> <string name="seconds"></string>
<string name="seconds_n">%s</string> <string name="seconds_n">%d</string>
<string name="retry_label">最多重试</string> <string name="retry_label">最多重试</string>
<string name="test_sender_sms">【%s】恭喜您该发送通道测试成功请继续添加转发规则</string> <string name="test_sender_sms">【%s】恭喜您该发送通道测试成功请继续添加转发规则</string>
<string name="test_sender_name">测试通道</string> <string name="test_sender_name">测试通道</string>

View File

@ -1,5 +1,33 @@
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="insert_tag_from">來源號碼</string>
<string name="insert_tag_sms">簡訊內容</string>
<string name="insert_tag_package_name">APP包名</string>
<string name="insert_tag_app_name">APP應用名</string>
<string name="insert_tag_title">通知標題</string>
<string name="insert_tag_msg">通知內容</string>
<string name="insert_tag_card_slot">卡槽備註</string>
<string name="insert_tag_card_subid">卡槽主鍵</string>
<string name="insert_tag_receive_time">接收時間</string>
<string name="insert_tag_current_time">當前時間</string>
<string name="insert_tag_device_name">設備名稱</string>
<string name="insert_tag_app_version">SmsF版本</string>
<string name="insert_tag_call_type">通話類型</string>
<string name="insert_tag_location">定位資訊</string>
<string name="insert_tag_location_longitude">定位經度</string>
<string name="insert_tag_location_latitude">定位緯度</string>
<string name="insert_tag_location_address">定位地址</string>
<string name="insert_tag_battery_pct">電池電量</string>
<string name="insert_tag_battery_status">電池狀態</string>
<string name="insert_tag_battery_plugged">充電方式</string>
<string name="insert_tag_battery_info">電池完整資訊</string>
<string name="insert_tag_battery_info_simple">電池簡單資訊</string>
<string name="insert_tag_uid">用戶UID</string>
<string name="insert_tag_ipv4">公網IPv4</string>
<string name="insert_tag_ipv6">公網IPv6</string>
<string name="insert_tag_ip_list">IP地址列表</string>
<string name="insert_tag_net_type">網路狀態</string>
<string name="type_param_sms">簡訊</string> <string name="type_param_sms">簡訊</string>
<string name="type_param_call">通話</string> <string name="type_param_call">通話</string>
<string name="type_param_app">應用</string> <string name="type_param_app">應用</string>
@ -217,8 +245,8 @@
<string name="invalid_wework_agent">企業ID、AgentID、Secret都不能為空</string> <string name="invalid_wework_agent">企業ID、AgentID、Secret都不能為空</string>
<string name="invalid_dingtalk_inner_robot">AgentId、AppKey、AppSecret、UserIds都不能為空</string> <string name="invalid_dingtalk_inner_robot">AgentId、AppKey、AppSecret、UserIds都不能為空</string>
<string name="invalid_phone_num">接收手機號不能為空</string> <string name="invalid_phone_num">接收手機號不能為空</string>
<string name="invalid_multi_match">多重匹配規則的第 %s 行格式有誤</string> <string name="invalid_multi_match">多重匹配規則的第 %d 行格式有誤</string>
<string name="invalid_regex_replace">正則替換內容的第 %s 行格式有誤</string> <string name="invalid_regex_replace">正則替換內容的第 %d 行格式有誤</string>
<string name="invalid_message_card">自定義消息卡片Json不合法</string> <string name="invalid_message_card">自定義消息卡片Json不合法</string>
<string name="email_host">主機</string> <string name="email_host">主機</string>
<string name="smtp_port">端口</string> <string name="smtp_port">端口</string>
@ -312,14 +340,6 @@
<string name="custom_template">轉發信息模版</string> <string name="custom_template">轉發信息模版</string>
<string name="custom_template_tips">Tip按需插入內容標籤留空使用默認模版</string> <string name="custom_template_tips">Tip按需插入內容標籤留空使用默認模版</string>
<string name="insert_sender">來源號碼</string> <string name="insert_sender">來源號碼</string>
<string name="insert_sender_app">APP包名</string>
<string name="insert_uid">UID</string>
<string name="insert_content">簡訊內容</string>
<string name="insert_title_app">通知標題</string>
<string name="insert_content_app">通知內容</string>
<string name="insert_extra">卡槽信息</string>
<string name="insert_time">接收時間</string>
<string name="insert_device_name">裝置名稱</string>
<string name="battery_setting">忽略電池優化設置</string> <string name="battery_setting">忽略電池優化設置</string>
<string name="battery_setting_tips">請設置為手動管理:允許自啟動、允許關聯啟動、允許後台運行</string> <string name="battery_setting_tips">請設置為手動管理:允許自啟動、允許關聯啟動、允許後台運行</string>
<string name="unknown_number">未知號碼</string> <string name="unknown_number">未知號碼</string>
@ -449,7 +469,7 @@
<string name="interval_label">遞增間隔</string> <string name="interval_label">遞增間隔</string>
<string name="timeout_label">單次超時</string> <string name="timeout_label">單次超時</string>
<string name="seconds"></string> <string name="seconds"></string>
<string name="seconds_n">%s</string> <string name="seconds_n">%d</string>
<string name="retry_label">最多重試</string> <string name="retry_label">最多重試</string>
<string name="test_sender_sms">【%s】恭喜您該發送通道測試成功請繼續添加轉發規則</string> <string name="test_sender_sms">【%s】恭喜您該發送通道測試成功請繼續添加轉發規則</string>
<string name="test_sender_name">測試通道</string> <string name="test_sender_name">測試通道</string>

View File

@ -27,6 +27,34 @@
<string name="tag_ip_list" translatable="false">{{IP_LIST}}</string> <string name="tag_ip_list" translatable="false">{{IP_LIST}}</string>
<string name="tag_net_type" translatable="false">{{NET_TYPE}}</string> <string name="tag_net_type" translatable="false">{{NET_TYPE}}</string>
<string name="insert_tag_from">来源号码</string>
<string name="insert_tag_sms">短信内容</string>
<string name="insert_tag_package_name">APP包名</string>
<string name="insert_tag_app_name">APP应用名</string>
<string name="insert_tag_title">通知标题</string>
<string name="insert_tag_msg">通知内容</string>
<string name="insert_tag_card_slot">卡槽备注</string>
<string name="insert_tag_card_subid">卡槽主键</string>
<string name="insert_tag_receive_time">接收时间</string>
<string name="insert_tag_current_time">当前时间</string>
<string name="insert_tag_device_name">设备名称</string>
<string name="insert_tag_app_version">SmsF版本</string>
<string name="insert_tag_call_type">通话类型</string>
<string name="insert_tag_location">定位信息</string>
<string name="insert_tag_location_longitude">定位经度</string>
<string name="insert_tag_location_latitude">定位维度</string>
<string name="insert_tag_location_address">定位地址</string>
<string name="insert_tag_battery_pct">电池电量</string>
<string name="insert_tag_battery_status">电池状态</string>
<string name="insert_tag_battery_plugged">充电方式</string>
<string name="insert_tag_battery_info">电池完整信息</string>
<string name="insert_tag_battery_info_simple">电池简单信息</string>
<string name="insert_tag_uid">用户UID</string>
<string name="insert_tag_ipv4">公网IPv4</string>
<string name="insert_tag_ipv6">公网IPv6</string>
<string name="insert_tag_ip_list">IP地址列表</string>
<string name="insert_tag_net_type">网络状态</string>
<string name="type_param_sms">短信</string> <string name="type_param_sms">短信</string>
<string name="type_param_call">通话</string> <string name="type_param_call">通话</string>
<string name="type_param_app">应用</string> <string name="type_param_app">应用</string>
@ -251,8 +279,8 @@
<string name="invalid_wework_agent">企业ID、AgentID、Secret都不能为空</string> <string name="invalid_wework_agent">企业ID、AgentID、Secret都不能为空</string>
<string name="invalid_dingtalk_inner_robot">AgentId、AppKey、AppSecret、UserIds都不能为空</string> <string name="invalid_dingtalk_inner_robot">AgentId、AppKey、AppSecret、UserIds都不能为空</string>
<string name="invalid_phone_num">接收手机号不能为空</string> <string name="invalid_phone_num">接收手机号不能为空</string>
<string name="invalid_multi_match">多重匹配规则的第 %s 行格式有误</string> <string name="invalid_multi_match">多重匹配规则的第 %d 行格式有误</string>
<string name="invalid_regex_replace">正则替换内容的第 %s 行格式有误</string> <string name="invalid_regex_replace">正则替换内容的第 %d 行格式有误</string>
<string name="invalid_message_card">自定义消息卡片Json不合法</string> <string name="invalid_message_card">自定义消息卡片Json不合法</string>
<string name="email_host">主机</string> <string name="email_host">主机</string>
<string name="smtp_port">端口</string> <string name="smtp_port">端口</string>
@ -346,14 +374,6 @@
<string name="custom_template">转发信息模版</string> <string name="custom_template">转发信息模版</string>
<string name="custom_template_tips">Tip按需插入内容标签留空使用默认模版</string> <string name="custom_template_tips">Tip按需插入内容标签留空使用默认模版</string>
<string name="insert_sender">来源号码</string> <string name="insert_sender">来源号码</string>
<string name="insert_sender_app">APP包名</string>
<string name="insert_uid">UID</string>
<string name="insert_content">短信内容</string>
<string name="insert_title_app">通知标题</string>
<string name="insert_content_app">通知内容</string>
<string name="insert_extra">卡槽信息</string>
<string name="insert_time">接收时间</string>
<string name="insert_device_name">设备名称</string>
<string name="battery_setting">忽略电池优化设置</string> <string name="battery_setting">忽略电池优化设置</string>
<string name="battery_setting_tips">请设置为手动管理:允许自启动、允许关联启动、允许后台运行</string> <string name="battery_setting_tips">请设置为手动管理:允许自启动、允许关联启动、允许后台运行</string>
<string name="unknown_number">未知号码</string> <string name="unknown_number">未知号码</string>
@ -483,7 +503,7 @@
<string name="interval_label">递增间隔</string> <string name="interval_label">递增间隔</string>
<string name="timeout_label">单次超时</string> <string name="timeout_label">单次超时</string>
<string name="seconds"></string> <string name="seconds"></string>
<string name="seconds_n">%s</string> <string name="seconds_n">%d</string>
<string name="retry_label">最多重试</string> <string name="retry_label">最多重试</string>
<string name="test_sender_sms">【%s】恭喜您该发送通道测试成功请继续添加转发规则</string> <string name="test_sender_sms">【%s】恭喜您该发送通道测试成功请继续添加转发规则</string>
<string name="test_sender_name">测试通道</string> <string name="test_sender_name">测试通道</string>