diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index eed96ea7..b3210a90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,10 @@
xmlns:tools="http://schemas.android.com/tools"
android:installLocation="internalOnly">
+
+
@@ -239,6 +243,11 @@
+
+
(R.id.iv_setting_icon)
- ivConditionIcon.setImageResource(condition.iconId)
+ if (item.status == 0) {
+ ivConditionIcon.setImageResource(condition.greyIconId)
+ } else {
+ ivConditionIcon.setImageResource(condition.iconId)
+ }
holder.binding.layoutConditionsIcons.addView(layoutConditionItem)
}
}
@@ -50,12 +54,14 @@ class TaskPagingAdapter(private val itemClickListener: OnItemClickListener) : Pa
holder.binding.layoutActionsIcons.removeAllViews()
if (item.actions.isNotEmpty()) {
val actionList = Gson().fromJson(item.actions, Array::class.java).toMutableList()
- //Log.d("TaskPagingAdapter", "actionList:$actionList")
for (action in actionList) {
- //Log.d("TaskPagingAdapter", "action:$action")
val layoutActionItem = View.inflate(App.context, R.layout.item_setting, null) as LinearLayout
val ivActionIcon = layoutActionItem.findViewById(R.id.iv_setting_icon)
- ivActionIcon.setImageResource(action.iconId)
+ if (item.status == 0) {
+ ivActionIcon.setImageResource(action.greyIconId)
+ } else {
+ ivActionIcon.setImageResource(action.iconId)
+ }
holder.binding.layoutActionsIcons.addView(layoutActionItem)
}
}
@@ -69,7 +75,11 @@ class TaskPagingAdapter(private val itemClickListener: OnItemClickListener) : Pa
} else {
holder.binding.layoutImage.visibility = View.VISIBLE
holder.binding.layoutIcons.visibility = View.GONE
- holder.binding.ivImage.setImageResource(item.imageId)
+ if (item.status == 0) {
+ holder.binding.ivImage.setImageResource(item.greyImageId)
+ } else {
+ holder.binding.ivImage.setImageResource(item.imageId)
+ }
holder.binding.ivStatus.setImageResource(item.statusImageId)
holder.binding.ivEdit.visibility = View.GONE
holder.binding.ivDelete.visibility = View.GONE
diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/entity/Task.kt b/app/src/main/java/com/idormy/sms/forwarder/database/entity/Task.kt
index 20a40163..6d58bbd4 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/database/entity/Task.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/database/entity/Task.kt
@@ -14,6 +14,7 @@ import com.idormy.sms.forwarder.utils.TASK_CONDITION_BATTERY
import com.idormy.sms.forwarder.utils.TASK_CONDITION_CHARGE
import com.idormy.sms.forwarder.utils.TASK_CONDITION_CRON
import com.idormy.sms.forwarder.utils.TASK_CONDITION_NETWORK
+import com.idormy.sms.forwarder.utils.TASK_CONDITION_SIM
import kotlinx.parcelize.Parcelize
import java.util.Date
@@ -36,7 +37,8 @@ data class Task(
TASK_CONDITION_CRON -> R.drawable.auto_task_icon_custom_time
TASK_CONDITION_BATTERY -> R.drawable.auto_task_icon_battery
TASK_CONDITION_CHARGE -> R.drawable.auto_task_icon_charge
- TASK_CONDITION_NETWORK -> R.drawable.auto_task_icon_wlan
+ TASK_CONDITION_NETWORK -> R.drawable.auto_task_icon_network
+ TASK_CONDITION_SIM -> R.drawable.auto_task_icon_sim
TASK_ACTION_SENDSMS -> R.drawable.auto_task_icon_sms
TASK_ACTION_NOTIFICATION -> R.drawable.auto_task_icon_sender
TASK_ACTION_FRPC -> R.drawable.auto_task_icon_frpc
@@ -44,6 +46,20 @@ data class Task(
else -> R.drawable.auto_task_icon_custom_time
}
+ val greyImageId: Int
+ get() = when (type) {
+ TASK_CONDITION_CRON -> R.drawable.auto_task_icon_custom_time_grey
+ TASK_CONDITION_BATTERY -> R.drawable.auto_task_icon_battery_grey
+ TASK_CONDITION_CHARGE -> R.drawable.auto_task_icon_charge_grey
+ TASK_CONDITION_NETWORK -> R.drawable.auto_task_icon_network_grey
+ TASK_CONDITION_SIM -> R.drawable.auto_task_icon_sim_grey
+ TASK_ACTION_SENDSMS -> R.drawable.auto_task_icon_sms_grey
+ TASK_ACTION_NOTIFICATION -> R.drawable.auto_task_icon_sender_grey
+ TASK_ACTION_FRPC -> R.drawable.auto_task_icon_frpc_grey
+ TASK_ACTION_HTTPSERVER -> R.drawable.auto_task_icon_http_server_grey
+ else -> R.drawable.auto_task_icon_custom_time_grey
+ }
+
val statusImageId: Int
get() = when (status) {
STATUS_OFF -> R.drawable.icon_off
diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/task/BatterySetting.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/task/BatterySetting.kt
new file mode 100644
index 00000000..31ff9dd2
--- /dev/null
+++ b/app/src/main/java/com/idormy/sms/forwarder/entity/task/BatterySetting.kt
@@ -0,0 +1,22 @@
+package com.idormy.sms.forwarder.entity.task
+
+import android.os.BatteryManager
+import com.idormy.sms.forwarder.R
+import java.io.Serializable
+
+data class BatterySetting(
+ var description: String = "", //描述
+ var status: Int = BatteryManager.BATTERY_STATUS_CHARGING, //状态
+ var levelMin: Int = 1, //电量下限
+ var levelMax: Int = 100, //电量上限
+ var keepReminding: Boolean = false, //持续提醒
+) : Serializable {
+
+ fun getStatusCheckId(): Int {
+ return when (status) {
+ BatteryManager.BATTERY_STATUS_CHARGING -> R.id.rb_battery_charging
+ BatteryManager.BATTERY_STATUS_DISCHARGING -> R.id.rb_battery_discharging
+ else -> R.id.rb_battery_charging
+ }
+ }
+}
diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/task/ChargeSetting.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/task/ChargeSetting.kt
new file mode 100644
index 00000000..1f0b29a8
--- /dev/null
+++ b/app/src/main/java/com/idormy/sms/forwarder/entity/task/ChargeSetting.kt
@@ -0,0 +1,74 @@
+package com.idormy.sms.forwarder.entity.task
+
+import android.os.BatteryManager
+import com.idormy.sms.forwarder.R
+import com.xuexiang.xui.utils.ResUtils
+import com.xuexiang.xutil.resource.ResUtils.getString
+import java.io.Serializable
+
+@Suppress("DEPRECATION", "unused")
+data class ChargeSetting(
+ var description: String = "", //描述
+ var status: Int = BatteryManager.BATTERY_STATUS_UNKNOWN, //状态
+ var plugged: Int = BatteryManager.BATTERY_PLUGGED_AC, //充电方式
+) : Serializable {
+
+ constructor(statusCheckId: Int, pluggedCheckId: Int) : this() {
+ status = when (statusCheckId) {
+ R.id.rb_battery_charging -> BatteryManager.BATTERY_STATUS_CHARGING
+ R.id.rb_battery_discharging -> BatteryManager.BATTERY_STATUS_DISCHARGING
+ R.id.rb_battery_not_charging -> BatteryManager.BATTERY_STATUS_NOT_CHARGING
+ R.id.rb_battery_full -> BatteryManager.BATTERY_STATUS_FULL
+ R.id.rb_battery_unknown -> BatteryManager.BATTERY_STATUS_UNKNOWN
+ else -> BatteryManager.BATTERY_STATUS_UNKNOWN
+ }
+ plugged = when (pluggedCheckId) {
+ R.id.rb_plugged_ac -> BatteryManager.BATTERY_PLUGGED_AC
+ R.id.rb_plugged_usb -> BatteryManager.BATTERY_PLUGGED_USB
+ R.id.rb_plugged_wireless -> BatteryManager.BATTERY_PLUGGED_WIRELESS
+ else -> BatteryManager.BATTERY_PLUGGED_AC
+ }
+ description = String.format(getString(R.string.battery_status), getStatusStr(status))
+ description += ", " + String.format(getString(R.string.battery_plugged), getPluggedStr(plugged))
+ }
+
+ private fun getStatusStr(status: Int): String {
+ return when (status) {
+ BatteryManager.BATTERY_STATUS_CHARGING -> ResUtils.getString(R.string.battery_charging)
+ BatteryManager.BATTERY_STATUS_DISCHARGING -> ResUtils.getString(R.string.battery_discharging)
+ BatteryManager.BATTERY_STATUS_NOT_CHARGING -> ResUtils.getString(R.string.battery_not_charging)
+ BatteryManager.BATTERY_STATUS_FULL -> ResUtils.getString(R.string.battery_full)
+ BatteryManager.BATTERY_STATUS_UNKNOWN -> ResUtils.getString(R.string.battery_unknown)
+ else -> ResUtils.getString(R.string.battery_unknown)
+ }
+ }
+
+ fun getStatusCheckId(): Int {
+ return when (status) {
+ BatteryManager.BATTERY_STATUS_CHARGING -> R.id.rb_battery_charging
+ BatteryManager.BATTERY_STATUS_DISCHARGING -> R.id.rb_battery_discharging
+ BatteryManager.BATTERY_STATUS_NOT_CHARGING -> R.id.rb_battery_not_charging
+ BatteryManager.BATTERY_STATUS_FULL -> R.id.rb_battery_full
+ BatteryManager.BATTERY_STATUS_UNKNOWN -> R.id.rb_battery_unknown
+ else -> R.id.rb_battery_charging
+ }
+ }
+
+ private fun getPluggedStr(plugged: Int): String {
+ return when (plugged) {
+ BatteryManager.BATTERY_PLUGGED_AC -> ResUtils.getString(R.string.battery_ac)
+ BatteryManager.BATTERY_PLUGGED_USB -> ResUtils.getString(R.string.battery_usb)
+ BatteryManager.BATTERY_PLUGGED_WIRELESS -> ResUtils.getString(R.string.battery_wireless)
+ else -> ResUtils.getString(R.string.battery_unknown)
+ }
+ }
+
+ fun getPluggedCheckId(): Int {
+ return when (plugged) {
+ BatteryManager.BATTERY_PLUGGED_AC -> R.id.rb_plugged_ac
+ BatteryManager.BATTERY_PLUGGED_USB -> R.id.rb_plugged_usb
+ BatteryManager.BATTERY_PLUGGED_WIRELESS -> R.id.rb_plugged_wireless
+ else -> R.id.rb_plugged_unknown
+ }
+ }
+}
diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/task/CronSetting.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/task/CronSetting.kt
index e0b3d06d..077062ab 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/entity/task/CronSetting.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/entity/task/CronSetting.kt
@@ -3,6 +3,6 @@ package com.idormy.sms.forwarder.entity.task
import java.io.Serializable
data class CronSetting(
- var expression: String,
- var description: String = "",
+ var description: String = "", //描述
+ var expression: String = "", //表达式
) : Serializable
diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/task/NetworkSetting.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/task/NetworkSetting.kt
new file mode 100644
index 00000000..025a64bf
--- /dev/null
+++ b/app/src/main/java/com/idormy/sms/forwarder/entity/task/NetworkSetting.kt
@@ -0,0 +1,41 @@
+package com.idormy.sms.forwarder.entity.task
+
+import com.idormy.sms.forwarder.R
+import com.xuexiang.xutil.resource.ResUtils.getString
+import java.io.Serializable
+
+data class NetworkSetting(
+ var description: String = "", //描述
+ var networkState: Int = 0, //网络状态:0-没有网络,1-移动网络,2-WiFi,3-以太网, 4-未知
+) : Serializable {
+
+ constructor(networkStateCheckId: Int) : this() {
+ networkState = when (networkStateCheckId) {
+ R.id.rb_no_network -> 0
+ R.id.rb_net_mobile -> 1
+ R.id.rb_net_wifi -> 2
+ R.id.rb_net_ethernet -> 3
+ else -> 4
+ }
+ description = String.format(
+ getString(R.string.network_state),
+ when (networkState) {
+ 0 -> getString(R.string.no_network)
+ 1 -> getString(R.string.net_mobile)
+ 2 -> getString(R.string.net_wifi)
+ 3 -> getString(R.string.net_ethernet)
+ else -> getString(R.string.net_unknown)
+ }
+ )
+ }
+
+ fun getNetworkStateCheckId(): Int {
+ return when (networkState) {
+ 0 -> R.id.rb_no_network
+ 1 -> R.id.rb_net_mobile
+ 2 -> R.id.rb_net_wifi
+ 3 -> R.id.rb_net_ethernet
+ else -> R.id.rb_net_unknown
+ }
+ }
+}
diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/task/SimSetting.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/task/SimSetting.kt
new file mode 100644
index 00000000..3b70ca98
--- /dev/null
+++ b/app/src/main/java/com/idormy/sms/forwarder/entity/task/SimSetting.kt
@@ -0,0 +1,35 @@
+package com.idormy.sms.forwarder.entity.task
+
+import com.idormy.sms.forwarder.R
+import com.xuexiang.xutil.resource.ResUtils.getString
+import java.io.Serializable
+
+data class SimSetting(
+ var description: String = "", //描述
+ var simState: Int = 0, //SIM卡状态:0-未知状态,1-卡被移除,5-卡已准备就绪
+) : Serializable {
+
+ constructor(simStateCheckId: Int) : this() {
+ simState = when (simStateCheckId) {
+ R.id.rb_sim_state_absent -> 1
+ R.id.rb_sim_state_ready -> 5
+ else -> 0
+ }
+ description = String.format(
+ getString(R.string.sim_state),
+ when (simState) {
+ 1 -> getString(R.string.sim_state_absent)
+ 5 -> getString(R.string.sim_state_ready)
+ else -> getString(R.string.sim_state_unknown)
+ }
+ )
+ }
+
+ fun getSimStateCheckId(): Int {
+ return when (simState) {
+ 1 -> R.id.rb_sim_state_absent
+ 5 -> R.id.rb_sim_state_ready
+ else -> R.id.rb_sim_state_unknown
+ }
+ }
+}
diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/task/SmsSetting.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/task/SmsSetting.kt
index a546222d..2f652366 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/entity/task/SmsSetting.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/entity/task/SmsSetting.kt
@@ -3,8 +3,8 @@ package com.idormy.sms.forwarder.entity.task
import java.io.Serializable
data class SmsSetting(
- var description: String = "",
- var simSlot: Int = 1,
- var phoneNumbers: String = "",
- var msgContent: String = "",
+ var description: String = "", //描述
+ var simSlot: Int = 1, //卡槽
+ var phoneNumbers: String = "", //手机号码
+ var msgContent: String = "", //短信内容
) : Serializable
diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/task/TaskSetting.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/task/TaskSetting.kt
index a70eb9f1..1ac40fbe 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/entity/task/TaskSetting.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/entity/task/TaskSetting.kt
@@ -13,10 +13,10 @@ import java.io.Serializable
data class TaskSetting(
val type: Int, // TASK_CONDITION_FRAGMENT_LIST 索引加上 KEY_BACK_CODE_CONDITION 或者 TASK_ACTION_FRAGMENT_LIST 索引加上 KEY_BACK_CODE_ACTION
- val title: String,
- val description: String,
- var setting: String = "",
- var position: Int = -1
+ val title: String, //标题
+ val description: String, //描述
+ var setting: String = "", //设置
+ var position: Int = -1 //位置
) : Serializable {
val iconId: Int
@@ -24,11 +24,24 @@ data class TaskSetting(
TASK_CONDITION_CRON -> R.drawable.auto_task_icon_custom_time
TASK_CONDITION_BATTERY -> R.drawable.auto_task_icon_battery
TASK_CONDITION_CHARGE -> R.drawable.auto_task_icon_charge
- TASK_CONDITION_NETWORK -> R.drawable.auto_task_icon_wlan
+ TASK_CONDITION_NETWORK -> R.drawable.auto_task_icon_network
TASK_ACTION_SENDSMS -> R.drawable.auto_task_icon_sms
TASK_ACTION_NOTIFICATION -> R.drawable.auto_task_icon_sender
TASK_ACTION_FRPC -> R.drawable.auto_task_icon_frpc
TASK_ACTION_HTTPSERVER -> R.drawable.auto_task_icon_http_server
else -> R.drawable.auto_task_icon_sms
}
+
+ val greyIconId: Int
+ get() = when (type) {
+ TASK_CONDITION_CRON -> R.drawable.auto_task_icon_custom_time_grey
+ TASK_CONDITION_BATTERY -> R.drawable.auto_task_icon_battery_grey
+ TASK_CONDITION_CHARGE -> R.drawable.auto_task_icon_charge_grey
+ TASK_CONDITION_NETWORK -> R.drawable.auto_task_icon_network_grey
+ TASK_ACTION_SENDSMS -> R.drawable.auto_task_icon_sms_grey
+ TASK_ACTION_NOTIFICATION -> R.drawable.auto_task_icon_sender_grey
+ TASK_ACTION_FRPC -> R.drawable.auto_task_icon_frpc_grey
+ TASK_ACTION_HTTPSERVER -> R.drawable.auto_task_icon_http_server_grey
+ else -> R.drawable.auto_task_icon_sms_grey
+ }
}
diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksEditFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksEditFragment.kt
index da8ada65..51d7a74b 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksEditFragment.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksEditFragment.kt
@@ -166,8 +166,10 @@ class TasksEditFragment : BaseFragment(), View.OnClic
when (v.id) {
R.id.layout_add_condition -> {
val view: View = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_task_condition_bottom_sheet, null)
- val recyclerView: RecyclerView = view.findViewById(R.id.recyclerView)
+ val tvTitle: TextView = view.findViewById(R.id.tv_title)
+ tvTitle.text = if (itemListConditions.isEmpty()) getString(R.string.select_task_trigger) else getString(R.string.select_task_condition)
+ val recyclerView: RecyclerView = view.findViewById(R.id.recyclerView)
WidgetUtils.initGridRecyclerView(recyclerView, 4, DensityUtils.dp2px(1f))
val widgetItemAdapter = WidgetItemAdapter(TASK_CONDITION_FRAGMENT_LIST)
widgetItemAdapter.setOnItemClickListener(that)
@@ -347,10 +349,6 @@ class TasksEditFragment : BaseFragment(), View.OnClic
try {
dialog.dismiss()
Log.d(TAG, "onItemClick: $widgetInfo")
- if (pos > 0) {
- XToastUtils.info("暂不支持,敬请期待……")
- return
- }
//判断点击的是条件还是动作
if (widgetInfo.classPath.contains(".condition.")) {
//判断是否已经添加过该类型条件
@@ -385,54 +383,18 @@ class TasksEditFragment : BaseFragment(), View.OnClic
super.onFragmentResult(requestCode, resultCode, data)
Log.d(TAG, "requestCode:$requestCode resultCode:$resultCode data:$data")
if (data != null) {
- val extras = data.extras
+ val extras = data.extras ?: return
+
+ val description: String?
var setting: String? = null
if (resultCode in KEY_BACK_CODE_CONDITION..KEY_BACK_CODE_CONDITION + 999) {
- setting = extras!!.getString(KEY_BACK_DATA_CONDITION)
- if (setting == null) return
+ setting = extras.getString(KEY_BACK_DATA_CONDITION) ?: return
//注意:TASK_CONDITION_XXX 枚举值 等于 TASK_CONDITION_FRAGMENT_LIST 索引加上 KEY_BACK_CODE_CONDITION,不可改变
val widgetInfoIndex = resultCode - KEY_BACK_CODE_CONDITION
if (widgetInfoIndex >= TASK_CONDITION_FRAGMENT_LIST.size) return
val widgetInfo = TASK_CONDITION_FRAGMENT_LIST[widgetInfoIndex]
- val taskSetting: TaskSetting
- when (resultCode) {
-
- TASK_CONDITION_CRON -> {
- val settingVo = Gson().fromJson(setting, CronSetting::class.java)
- Log.d(TAG, settingVo.toString())
- taskSetting = TaskSetting(
- resultCode, widgetInfo.name, settingVo.description, setting, requestCode
- )
- }
-
- TASK_CONDITION_BATTERY -> {
- val settingVo = Gson().fromJson(setting, CronSetting::class.java)
- Log.d(TAG, settingVo.toString())
- taskSetting = TaskSetting(
- resultCode, widgetInfo.name, settingVo.description, setting, requestCode
- )
- }
-
- TASK_CONDITION_CHARGE -> {
- val settingVo = Gson().fromJson(setting, CronSetting::class.java)
- Log.d(TAG, settingVo.toString())
- taskSetting = TaskSetting(
- resultCode, widgetInfo.name, settingVo.description, setting, requestCode
- )
- }
-
- TASK_CONDITION_NETWORK -> {
- val settingVo = Gson().fromJson(setting, CronSetting::class.java)
- Log.d(TAG, settingVo.toString())
- taskSetting = TaskSetting(
- resultCode, widgetInfo.name, settingVo.description, setting, requestCode
- )
- }
-
- else -> {
- return
- }
- }
+ description = extras.getString(KEY_BACK_DESCRIPTION_CONDITION) ?: widgetInfo.name.toString()
+ val taskSetting = TaskSetting(resultCode, widgetInfo.name, description, setting, requestCode)
//requestCode: 等于 itemListConditions 的索引加1
if (requestCode == 0) {
taskSetting.position = itemListConditions.size
@@ -443,51 +405,13 @@ class TasksEditFragment : BaseFragment(), View.OnClic
conditionsAdapter.notifyDataSetChanged()
binding!!.layoutAddCondition.visibility = if (itemListConditions.size >= MAX_SETTING_NUM) View.GONE else View.VISIBLE
} else if (resultCode in KEY_BACK_CODE_ACTION..KEY_BACK_CODE_ACTION + 999) {
- setting = extras!!.getString(KEY_BACK_DATA_ACTION)
- if (setting == null) return
+ setting = extras.getString(KEY_BACK_DATA_ACTION) ?: return
//注意:TASK_ACTION_XXX 枚举值 等于 TASK_ACTION_FRAGMENT_LIST 索引加上 KEY_BACK_CODE_ACTION,不可改变
val widgetInfoIndex = resultCode - KEY_BACK_CODE_ACTION
if (widgetInfoIndex >= TASK_ACTION_FRAGMENT_LIST.size) return
val widgetInfo = TASK_ACTION_FRAGMENT_LIST[widgetInfoIndex]
- val taskSetting: TaskSetting
- when (resultCode) {
-
- TASK_ACTION_SENDSMS -> {
- val settingVo = Gson().fromJson(setting, CronSetting::class.java)
- Log.d(TAG, settingVo.toString())
- taskSetting = TaskSetting(
- resultCode, widgetInfo.name, settingVo.description, setting, requestCode
- )
- }
-
- TASK_ACTION_NOTIFICATION -> {
- val settingVo = Gson().fromJson(setting, CronSetting::class.java)
- Log.d(TAG, settingVo.toString())
- taskSetting = TaskSetting(
- resultCode, widgetInfo.name, settingVo.description, setting, requestCode
- )
- }
-
- TASK_ACTION_FRPC -> {
- val settingVo = Gson().fromJson(setting, CronSetting::class.java)
- Log.d(TAG, settingVo.toString())
- taskSetting = TaskSetting(
- resultCode, widgetInfo.name, settingVo.description, setting, requestCode
- )
- }
-
- TASK_ACTION_HTTPSERVER -> {
- val settingVo = Gson().fromJson(setting, CronSetting::class.java)
- Log.d(TAG, settingVo.toString())
- taskSetting = TaskSetting(
- resultCode, widgetInfo.name, settingVo.description, setting, requestCode
- )
- }
-
- else -> {
- return
- }
- }
+ description = extras.getString(KEY_BACK_DESCRIPTION_ACTION) ?: widgetInfo.name.toString()
+ val taskSetting = TaskSetting(resultCode, widgetInfo.name, description, setting, requestCode)
//requestCode: 等于 itemListActions 的索引加1
if (requestCode == 0) {
taskSetting.position = itemListActions.size
diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/FrpcFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/FrpcFragment.kt
index a5bfd184..7fffae41 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/FrpcFragment.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/FrpcFragment.kt
@@ -136,6 +136,6 @@ class FrpcFragment : BaseFragment(), View.On
//检查设置
@SuppressLint("SetTextI18n")
private fun checkSetting(): CronSetting {
- return CronSetting(expression, description)
+ return CronSetting(description, expression)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/HttpServerFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/HttpServerFragment.kt
index 33975eef..dc62fcc4 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/HttpServerFragment.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/HttpServerFragment.kt
@@ -136,6 +136,6 @@ class HttpServerFragment : BaseFragment(), V
//检查设置
@SuppressLint("SetTextI18n")
private fun checkSetting(): CronSetting {
- return CronSetting(expression, description)
+ return CronSetting(description, expression)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/BatteryFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/BatteryFragment.kt
index 58347773..e6e8e0a6 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/BatteryFragment.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/BatteryFragment.kt
@@ -2,6 +2,7 @@ package com.idormy.sms.forwarder.fragment.condition
import android.annotation.SuppressLint
import android.content.Intent
+import android.os.BatteryManager
import android.util.Log
import android.view.LayoutInflater
import android.view.View
@@ -9,9 +10,10 @@ import android.view.ViewGroup
import com.google.gson.Gson
import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.core.BaseFragment
-import com.idormy.sms.forwarder.databinding.FragmentTasksActionSendSmsBinding
-import com.idormy.sms.forwarder.entity.task.CronSetting
+import com.idormy.sms.forwarder.databinding.FragmentTasksConditionBatteryBinding
+import com.idormy.sms.forwarder.entity.task.BatterySetting
import com.idormy.sms.forwarder.utils.KEY_BACK_DATA_CONDITION
+import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_CONDITION
import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_CONDITION
import com.idormy.sms.forwarder.utils.KEY_TEST_CONDITION
import com.idormy.sms.forwarder.utils.TASK_CONDITION_BATTERY
@@ -26,7 +28,7 @@ import com.xuexiang.xui.widget.actionbar.TitleBar
@Page(name = "Battery")
@Suppress("PrivatePropertyName")
-class BatteryFragment : BaseFragment(), View.OnClickListener {
+class BatteryFragment : BaseFragment(), View.OnClickListener {
private val TAG: String = BatteryFragment::class.java.simpleName
var titleBar: TitleBar? = null
@@ -36,8 +38,7 @@ class BatteryFragment : BaseFragment(), View
@AutoWired(name = KEY_EVENT_DATA_CONDITION)
var eventData: String? = null
- private var expression = "* * * * * ? *"
- private var description = "测试描述"
+ private var description = ""
override fun initArgs() {
XRouter.getInstance().inject(this)
@@ -46,8 +47,8 @@ class BatteryFragment : BaseFragment(), View
override fun viewBindingInflate(
inflater: LayoutInflater,
container: ViewGroup,
- ): FragmentTasksActionSendSmsBinding {
- return FragmentTasksActionSendSmsBinding.inflate(inflater, container, false)
+ ): FragmentTasksConditionBatteryBinding {
+ return FragmentTasksConditionBatteryBinding.inflate(inflater, container, false)
}
override fun initTitle(): TitleBar? {
@@ -71,10 +72,27 @@ class BatteryFragment : BaseFragment(), View
}
})
+ binding!!.rgStatus.setOnCheckedChangeListener { _, checkedId ->
+ if (checkedId == R.id.rb_battery_discharging) {
+ binding!!.xsbLevelMin.visibility = View.VISIBLE
+ binding!!.xsbLevelMax.visibility = View.GONE
+ } else {
+ binding!!.xsbLevelMin.visibility = View.GONE
+ binding!!.xsbLevelMax.visibility = View.VISIBLE
+ }
+ }
+
Log.d(TAG, "initViews eventData:$eventData")
if (eventData != null) {
- val settingVo = Gson().fromJson(eventData, CronSetting::class.java)
+ val settingVo = Gson().fromJson(eventData, BatterySetting::class.java)
Log.d(TAG, "initViews settingVo:$settingVo")
+ binding!!.rgStatus.check(settingVo.getStatusCheckId())
+ binding!!.xsbLevelMin.setDefaultValue(settingVo.levelMin)
+ binding!!.xsbLevelMax.setDefaultValue(settingVo.levelMax)
+ binding!!.sbKeepReminding.isChecked = settingVo.keepReminding
+ } else {
+ binding!!.xsbLevelMin.setDefaultValue(10)
+ binding!!.xsbLevelMax.setDefaultValue(90)
}
}
@@ -121,6 +139,7 @@ class BatteryFragment : BaseFragment(), View
R.id.btn_save -> {
val settingVo = checkSetting()
val intent = Intent()
+ intent.putExtra(KEY_BACK_DESCRIPTION_CONDITION, description)
intent.putExtra(KEY_BACK_DATA_CONDITION, Gson().toJson(settingVo))
setFragmentResult(TASK_CONDITION_BATTERY, intent)
popToBack()
@@ -135,7 +154,26 @@ class BatteryFragment : BaseFragment(), View
//检查设置
@SuppressLint("SetTextI18n")
- private fun checkSetting(): CronSetting {
- return CronSetting(expression, description)
+ private fun checkSetting(): BatterySetting {
+ val levelMin = binding!!.xsbLevelMin.selectedNumber
+ val levelMax = binding!!.xsbLevelMax.selectedNumber
+ val keepReminding = binding!!.sbKeepReminding.isChecked
+ val status: Int
+ if (binding!!.rgStatus.checkedRadioButtonId == R.id.rb_battery_discharging) {
+ status = BatteryManager.BATTERY_STATUS_DISCHARGING
+ description = if (keepReminding) {
+ String.format(getString(R.string.battery_discharged_below), levelMin.toString())
+ } else {
+ String.format(getString(R.string.battery_discharged_to), levelMin.toString())
+ }
+ } else {
+ status = BatteryManager.BATTERY_STATUS_CHARGING
+ description = if (keepReminding) {
+ String.format(getString(R.string.battery_charged_above), levelMax.toString())
+ } else {
+ String.format(getString(R.string.battery_charged_to), levelMax.toString())
+ }
+ }
+ return BatterySetting(description, status, levelMin, levelMax, keepReminding)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/ChargeFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/ChargeFragment.kt
index fd2f3313..255ce625 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/ChargeFragment.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/ChargeFragment.kt
@@ -9,9 +9,10 @@ import android.view.ViewGroup
import com.google.gson.Gson
import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.core.BaseFragment
-import com.idormy.sms.forwarder.databinding.FragmentTasksActionSendSmsBinding
-import com.idormy.sms.forwarder.entity.task.CronSetting
+import com.idormy.sms.forwarder.databinding.FragmentTasksConditionChargeBinding
+import com.idormy.sms.forwarder.entity.task.ChargeSetting
import com.idormy.sms.forwarder.utils.KEY_BACK_DATA_CONDITION
+import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_CONDITION
import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_CONDITION
import com.idormy.sms.forwarder.utils.KEY_TEST_CONDITION
import com.idormy.sms.forwarder.utils.TASK_CONDITION_CHARGE
@@ -26,7 +27,7 @@ import com.xuexiang.xui.widget.actionbar.TitleBar
@Page(name = "Charge")
@Suppress("PrivatePropertyName")
-class ChargeFragment : BaseFragment(), View.OnClickListener {
+class ChargeFragment : BaseFragment(), View.OnClickListener {
private val TAG: String = ChargeFragment::class.java.simpleName
var titleBar: TitleBar? = null
@@ -36,9 +37,6 @@ class ChargeFragment : BaseFragment(), View.
@AutoWired(name = KEY_EVENT_DATA_CONDITION)
var eventData: String? = null
- private var expression = "* * * * * ? *"
- private var description = "测试描述"
-
override fun initArgs() {
XRouter.getInstance().inject(this)
}
@@ -46,8 +44,8 @@ class ChargeFragment : BaseFragment(), View.
override fun viewBindingInflate(
inflater: LayoutInflater,
container: ViewGroup,
- ): FragmentTasksActionSendSmsBinding {
- return FragmentTasksActionSendSmsBinding.inflate(inflater, container, false)
+ ): FragmentTasksConditionChargeBinding {
+ return FragmentTasksConditionChargeBinding.inflate(inflater, container, false)
}
override fun initTitle(): TitleBar? {
@@ -73,8 +71,10 @@ class ChargeFragment : BaseFragment(), View.
Log.d(TAG, "initViews eventData:$eventData")
if (eventData != null) {
- val settingVo = Gson().fromJson(eventData, CronSetting::class.java)
+ val settingVo = Gson().fromJson(eventData, ChargeSetting::class.java)
Log.d(TAG, "initViews settingVo:$settingVo")
+ binding!!.rgStatus.check(settingVo.getStatusCheckId())
+ binding!!.rgPlugged.check(settingVo.getPluggedCheckId())
}
}
@@ -121,6 +121,7 @@ class ChargeFragment : BaseFragment(), View.
R.id.btn_save -> {
val settingVo = checkSetting()
val intent = Intent()
+ intent.putExtra(KEY_BACK_DESCRIPTION_CONDITION, settingVo.description)
intent.putExtra(KEY_BACK_DATA_CONDITION, Gson().toJson(settingVo))
setFragmentResult(TASK_CONDITION_CHARGE, intent)
popToBack()
@@ -134,8 +135,9 @@ class ChargeFragment : BaseFragment(), View.
}
//检查设置
- @SuppressLint("SetTextI18n")
- private fun checkSetting(): CronSetting {
- return CronSetting(expression, description)
+ private fun checkSetting(): ChargeSetting {
+ val statusCheckId = binding!!.rgStatus.checkedRadioButtonId
+ val pluggedCheckId = binding!!.rgPlugged.checkedRadioButtonId
+ return ChargeSetting(statusCheckId = statusCheckId, pluggedCheckId = pluggedCheckId)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/CronFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/CronFragment.kt
index c7861282..fed14979 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/CronFragment.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/CronFragment.kt
@@ -16,6 +16,7 @@ import com.idormy.sms.forwarder.core.BaseFragment
import com.idormy.sms.forwarder.databinding.FragmentTasksConditionCronBinding
import com.idormy.sms.forwarder.entity.task.CronSetting
import com.idormy.sms.forwarder.utils.KEY_BACK_DATA_CONDITION
+import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_CONDITION
import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_CONDITION
import com.idormy.sms.forwarder.utils.KEY_TEST_CONDITION
import com.idormy.sms.forwarder.utils.TASK_CONDITION_CRON
@@ -201,6 +202,7 @@ class CronFragment : BaseFragment(), View.On
R.id.btn_save -> {
val settingVo = checkSetting()
val intent = Intent()
+ intent.putExtra(KEY_BACK_DESCRIPTION_CONDITION, description)
intent.putExtra(KEY_BACK_DATA_CONDITION, Gson().toJson(settingVo))
setFragmentResult(TASK_CONDITION_CRON, intent)
popToBack()
@@ -1644,6 +1646,6 @@ class CronFragment : BaseFragment(), View.On
options.isNeedSpaceBetweenWords = locale == Locale("zh") || locale == Locale("ja") || locale == Locale("ko")
description = CronExpressionDescriptor.getDescription(expression, options, locale)
- return CronSetting(expression, description)
+ return CronSetting(description, expression)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/NetworkFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/NetworkFragment.kt
index 6c2efc6e..b54d16ec 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/NetworkFragment.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/NetworkFragment.kt
@@ -9,9 +9,10 @@ import android.view.ViewGroup
import com.google.gson.Gson
import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.core.BaseFragment
-import com.idormy.sms.forwarder.databinding.FragmentTasksActionSendSmsBinding
-import com.idormy.sms.forwarder.entity.task.CronSetting
+import com.idormy.sms.forwarder.databinding.FragmentTasksConditionNetworkBinding
+import com.idormy.sms.forwarder.entity.task.NetworkSetting
import com.idormy.sms.forwarder.utils.KEY_BACK_DATA_CONDITION
+import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_CONDITION
import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_CONDITION
import com.idormy.sms.forwarder.utils.KEY_TEST_CONDITION
import com.idormy.sms.forwarder.utils.TASK_CONDITION_NETWORK
@@ -26,7 +27,7 @@ import com.xuexiang.xui.widget.actionbar.TitleBar
@Page(name = "Network")
@Suppress("PrivatePropertyName")
-class NetworkFragment : BaseFragment(), View.OnClickListener {
+class NetworkFragment : BaseFragment(), View.OnClickListener {
private val TAG: String = NetworkFragment::class.java.simpleName
var titleBar: TitleBar? = null
@@ -36,9 +37,6 @@ class NetworkFragment : BaseFragment(), View
@AutoWired(name = KEY_EVENT_DATA_CONDITION)
var eventData: String? = null
- private var expression = "* * * * * ? *"
- private var description = "测试描述"
-
override fun initArgs() {
XRouter.getInstance().inject(this)
}
@@ -46,8 +44,8 @@ class NetworkFragment : BaseFragment(), View
override fun viewBindingInflate(
inflater: LayoutInflater,
container: ViewGroup,
- ): FragmentTasksActionSendSmsBinding {
- return FragmentTasksActionSendSmsBinding.inflate(inflater, container, false)
+ ): FragmentTasksConditionNetworkBinding {
+ return FragmentTasksConditionNetworkBinding.inflate(inflater, container, false)
}
override fun initTitle(): TitleBar? {
@@ -73,8 +71,9 @@ class NetworkFragment : BaseFragment(), View
Log.d(TAG, "initViews eventData:$eventData")
if (eventData != null) {
- val settingVo = Gson().fromJson(eventData, CronSetting::class.java)
+ val settingVo = Gson().fromJson(eventData, NetworkSetting::class.java)
Log.d(TAG, "initViews settingVo:$settingVo")
+ binding!!.rgNetworkState.check(settingVo.getNetworkStateCheckId())
}
}
@@ -121,6 +120,7 @@ class NetworkFragment : BaseFragment(), View
R.id.btn_save -> {
val settingVo = checkSetting()
val intent = Intent()
+ intent.putExtra(KEY_BACK_DESCRIPTION_CONDITION, settingVo.description)
intent.putExtra(KEY_BACK_DATA_CONDITION, Gson().toJson(settingVo))
setFragmentResult(TASK_CONDITION_NETWORK, intent)
popToBack()
@@ -134,8 +134,8 @@ class NetworkFragment : BaseFragment(), View
}
//检查设置
- @SuppressLint("SetTextI18n")
- private fun checkSetting(): CronSetting {
- return CronSetting(expression, description)
+ private fun checkSetting(): NetworkSetting {
+ val networkStateCheckId = binding!!.rgNetworkState.checkedRadioButtonId
+ return NetworkSetting(networkStateCheckId)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/SimFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/SimFragment.kt
new file mode 100644
index 00000000..cb20f716
--- /dev/null
+++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/SimFragment.kt
@@ -0,0 +1,141 @@
+package com.idormy.sms.forwarder.fragment.condition
+
+import android.annotation.SuppressLint
+import android.content.Intent
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import com.google.gson.Gson
+import com.idormy.sms.forwarder.R
+import com.idormy.sms.forwarder.core.BaseFragment
+import com.idormy.sms.forwarder.databinding.FragmentTasksConditionSimBinding
+import com.idormy.sms.forwarder.entity.task.SimSetting
+import com.idormy.sms.forwarder.utils.KEY_BACK_DATA_CONDITION
+import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_CONDITION
+import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_CONDITION
+import com.idormy.sms.forwarder.utils.KEY_TEST_CONDITION
+import com.idormy.sms.forwarder.utils.TASK_CONDITION_SIM
+import com.idormy.sms.forwarder.utils.XToastUtils
+import com.jeremyliao.liveeventbus.LiveEventBus
+import com.xuexiang.xaop.annotation.SingleClick
+import com.xuexiang.xpage.annotation.Page
+import com.xuexiang.xrouter.annotation.AutoWired
+import com.xuexiang.xrouter.launcher.XRouter
+import com.xuexiang.xui.utils.CountDownButtonHelper
+import com.xuexiang.xui.widget.actionbar.TitleBar
+
+@Page(name = "Sim")
+@Suppress("PrivatePropertyName")
+class SimFragment : BaseFragment(), View.OnClickListener {
+
+ private val TAG: String = SimFragment::class.java.simpleName
+ var titleBar: TitleBar? = null
+ private var mCountDownHelper: CountDownButtonHelper? = null
+
+ @JvmField
+ @AutoWired(name = KEY_EVENT_DATA_CONDITION)
+ var eventData: String? = null
+
+ override fun initArgs() {
+ XRouter.getInstance().inject(this)
+ }
+
+ override fun viewBindingInflate(
+ inflater: LayoutInflater,
+ container: ViewGroup,
+ ): FragmentTasksConditionSimBinding {
+ return FragmentTasksConditionSimBinding.inflate(inflater, container, false)
+ }
+
+ override fun initTitle(): TitleBar? {
+ titleBar = super.initTitle()!!.setImmersive(false).setTitle(R.string.task_sim)
+ return titleBar
+ }
+
+ /**
+ * 初始化控件
+ */
+ override fun initViews() {
+ //测试按钮增加倒计时,避免重复点击
+ mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 3)
+ mCountDownHelper!!.setOnCountDownListener(object : CountDownButtonHelper.OnCountDownListener {
+ override fun onCountDown(time: Int) {
+ binding!!.btnTest.text = String.format(getString(R.string.seconds_n), time)
+ }
+
+ override fun onFinished() {
+ binding!!.btnTest.text = getString(R.string.test)
+ }
+ })
+
+ Log.d(TAG, "initViews eventData:$eventData")
+ if (eventData != null) {
+ val settingVo = Gson().fromJson(eventData, SimSetting::class.java)
+ Log.d(TAG, "initViews settingVo:$settingVo")
+ binding!!.rgSimState.check(settingVo.getSimStateCheckId())
+ }
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun initListeners() {
+ binding!!.btnTest.setOnClickListener(this)
+ binding!!.btnDel.setOnClickListener(this)
+ binding!!.btnSave.setOnClickListener(this)
+ LiveEventBus.get(KEY_TEST_CONDITION, String::class.java).observe(this) {
+ mCountDownHelper?.finish()
+
+ if (it == "success") {
+ XToastUtils.success("测试通过", 30000)
+ } else {
+ XToastUtils.error(it, 30000)
+ }
+ }
+ }
+
+ @SingleClick
+ override fun onClick(v: View) {
+ try {
+ when (v.id) {
+ R.id.btn_test -> {
+ mCountDownHelper?.start()
+ Thread {
+ try {
+ val settingVo = checkSetting()
+ Log.d(TAG, settingVo.toString())
+ LiveEventBus.get(KEY_TEST_CONDITION, String::class.java).post("success")
+ } catch (e: Exception) {
+ LiveEventBus.get(KEY_TEST_CONDITION, String::class.java).post(e.message.toString())
+ e.printStackTrace()
+ }
+ }.start()
+ return
+ }
+
+ R.id.btn_del -> {
+ popToBack()
+ return
+ }
+
+ R.id.btn_save -> {
+ val settingVo = checkSetting()
+ val intent = Intent()
+ intent.putExtra(KEY_BACK_DESCRIPTION_CONDITION, settingVo.description)
+ intent.putExtra(KEY_BACK_DATA_CONDITION, Gson().toJson(settingVo))
+ setFragmentResult(TASK_CONDITION_SIM, intent)
+ popToBack()
+ return
+ }
+ }
+ } catch (e: Exception) {
+ XToastUtils.error(e.message.toString(), 30000)
+ e.printStackTrace()
+ }
+ }
+
+ //检查设置
+ private fun checkSetting(): SimSetting {
+ val simStateCheckId = binding!!.rgSimState.checkedRadioButtonId
+ return SimSetting(simStateCheckId)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/idormy/sms/forwarder/receiver/SimStateReceiver.kt b/app/src/main/java/com/idormy/sms/forwarder/receiver/SimStateReceiver.kt
index f72901af..f618e774 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/receiver/SimStateReceiver.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/receiver/SimStateReceiver.kt
@@ -19,7 +19,7 @@ import com.idormy.sms.forwarder.workers.SendWorker
import com.xuexiang.xutil.resource.ResUtils.getString
import java.util.Date
-@Suppress("PrivatePropertyName")
+@Suppress("PrivatePropertyName", "UNUSED_PARAMETER")
class SimStateReceiver : BroadcastReceiver() {
private var TAG = "SimStateReceiver"
diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt
index ba3e57bf..7cecf3ba 100644
--- a/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt
+++ b/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt
@@ -487,17 +487,20 @@ const val KEY_TEST_CONDITION = "key_test_condition"
const val KEY_EVENT_DATA_CONDITION = "event_data_condition"
const val KEY_BACK_CODE_CONDITION = 1000
const val KEY_BACK_DATA_CONDITION = "back_data_condition"
+const val KEY_BACK_DESCRIPTION_CONDITION = "back_description_condition"
const val KEY_TEST_ACTION = "key_test_action"
const val KEY_EVENT_DATA_ACTION = "event_data_action"
const val KEY_BACK_CODE_ACTION = 2000
const val KEY_BACK_DATA_ACTION = "back_data_action"
+const val KEY_BACK_DESCRIPTION_ACTION = "back_description_action"
//注意:TASK_CONDITION_XXX 枚举值 等于 TASK_CONDITION_FRAGMENT_LIST 索引加上 KEY_BACK_CODE_CONDITION,不可改变
const val TASK_CONDITION_CRON = 1000
const val TASK_CONDITION_BATTERY = 1001
const val TASK_CONDITION_CHARGE = 1002
const val TASK_CONDITION_NETWORK = 1003
+const val TASK_CONDITION_SIM = 1004
var TASK_CONDITION_FRAGMENT_LIST = listOf(
PageInfo(
getString(R.string.task_cron),
@@ -525,7 +528,14 @@ var TASK_CONDITION_FRAGMENT_LIST = listOf(
"com.idormy.sms.forwarder.fragment.condition.NetworkFragment",
"{\"\":\"\"}",
CoreAnim.slide,
- R.drawable.auto_task_icon_wlan
+ R.drawable.auto_task_icon_network
+ ),
+ PageInfo(
+ getString(R.string.task_sim),
+ "com.idormy.sms.forwarder.fragment.condition.SimFragment",
+ "{\"\":\"\"}",
+ CoreAnim.slide,
+ R.drawable.auto_task_icon_sim
),
)
diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/task/TaskUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/task/TaskUtils.kt
new file mode 100644
index 00000000..7771e14e
--- /dev/null
+++ b/app/src/main/java/com/idormy/sms/forwarder/utils/task/TaskUtils.kt
@@ -0,0 +1,16 @@
+package com.idormy.sms.forwarder.utils.task
+
+import com.idormy.sms.forwarder.utils.SP_ENABLE_SERVER_AUTORUN
+import com.idormy.sms.forwarder.utils.SharedPreference
+
+/**
+ * 自动任务工具类 —— 用于存储自动任务相关的配置
+ */
+class TaskUtils private constructor() {
+
+ companion object {
+
+ //是否启用HttpServer开机自启
+ var enableServerAutorun: Boolean by SharedPreference(SP_ENABLE_SERVER_AUTORUN, false)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/auto_task_icon_custom_time_grey.xml b/app/src/main/res/drawable/auto_task_icon_custom_time_grey.xml
index 8d0a106f..06fab5f3 100644
--- a/app/src/main/res/drawable/auto_task_icon_custom_time_grey.xml
+++ b/app/src/main/res/drawable/auto_task_icon_custom_time_grey.xml
@@ -1,6 +1,15 @@
-
-
-
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/auto_task_icon_custom_time_tran.xml b/app/src/main/res/drawable/auto_task_icon_custom_time_tran.xml
index b466cb87..82a4fdd3 100644
--- a/app/src/main/res/drawable/auto_task_icon_custom_time_tran.xml
+++ b/app/src/main/res/drawable/auto_task_icon_custom_time_tran.xml
@@ -1,6 +1,19 @@
-
-
-
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/auto_task_icon_frpc_grey.xml b/app/src/main/res/drawable/auto_task_icon_frpc_grey.xml
new file mode 100644
index 00000000..94feedde
--- /dev/null
+++ b/app/src/main/res/drawable/auto_task_icon_frpc_grey.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/auto_task_icon_http_server_grey.xml b/app/src/main/res/drawable/auto_task_icon_http_server_grey.xml
new file mode 100644
index 00000000..f4c0e2c6
--- /dev/null
+++ b/app/src/main/res/drawable/auto_task_icon_http_server_grey.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/auto_task_icon_sender_grey.xml b/app/src/main/res/drawable/auto_task_icon_sender_grey.xml
new file mode 100644
index 00000000..a59f4d77
--- /dev/null
+++ b/app/src/main/res/drawable/auto_task_icon_sender_grey.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/auto_task_icon_sim.xml b/app/src/main/res/drawable/auto_task_icon_sim.xml
index 55bae44b..eb422a6f 100644
--- a/app/src/main/res/drawable/auto_task_icon_sim.xml
+++ b/app/src/main/res/drawable/auto_task_icon_sim.xml
@@ -8,8 +8,14 @@
-
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/auto_task_icon_sim_grey.xml b/app/src/main/res/drawable/auto_task_icon_sim_grey.xml
new file mode 100644
index 00000000..af38558b
--- /dev/null
+++ b/app/src/main/res/drawable/auto_task_icon_sim_grey.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/auto_task_icon_sms.xml b/app/src/main/res/drawable/auto_task_icon_sms.xml
index dff53962..835318b3 100644
--- a/app/src/main/res/drawable/auto_task_icon_sms.xml
+++ b/app/src/main/res/drawable/auto_task_icon_sms.xml
@@ -1,6 +1,14 @@
-
-
-
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/auto_task_icon_sms_grey.xml b/app/src/main/res/drawable/auto_task_icon_sms_grey.xml
new file mode 100644
index 00000000..d64c1acb
--- /dev/null
+++ b/app/src/main/res/drawable/auto_task_icon_sms_grey.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_task_condition_bottom_sheet.xml b/app/src/main/res/layout/dialog_task_condition_bottom_sheet.xml
index ca11da57..a616884a 100644
--- a/app/src/main/res/layout/dialog_task_condition_bottom_sheet.xml
+++ b/app/src/main/res/layout/dialog_task_condition_bottom_sheet.xml
@@ -7,6 +7,7 @@
android:orientation="vertical">
@@ -29,7 +29,15 @@
+ android:text="@string/sim_slot"
+ android:textStyle="bold" />
+
+
@@ -63,7 +71,15 @@
+ android:text="@string/phone_numbers"
+ android:textStyle="bold" />
+
+
@@ -88,7 +104,15 @@
+ android:text="@string/msg_content"
+ android:textStyle="bold" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_tasks_condition_charge.xml b/app/src/main/res/layout/fragment_tasks_condition_charge.xml
new file mode 100644
index 00000000..3ee26229
--- /dev/null
+++ b/app/src/main/res/layout/fragment_tasks_condition_charge.xml
@@ -0,0 +1,178 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_tasks_condition_network.xml b/app/src/main/res/layout/fragment_tasks_condition_network.xml
new file mode 100644
index 00000000..efa39e8d
--- /dev/null
+++ b/app/src/main/res/layout/fragment_tasks_condition_network.xml
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_tasks_condition_sim.xml b/app/src/main/res/layout/fragment_tasks_condition_sim.xml
new file mode 100644
index 00000000..2fc55f3e
--- /dev/null
+++ b/app/src/main/res/layout/fragment_tasks_condition_sim.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml
index 68f0e630..c065db41 100644
--- a/app/src/main/res/values-en/strings.xml
+++ b/app/src/main/res/values-en/strings.xml
@@ -581,7 +581,8 @@
[%s] Congratulations, the sending channel test is successful, please continue to add forwarding rules!
Test Channel
SIM1_TestOperator_18888888888
- Continued
+ Keep Reminding
+ After exceeding the preset value, each change in battery level continues to trigger.
Resend
Rematch
From:
@@ -929,12 +930,15 @@
Unspecified Failure
Cold
Level: %s
+ Level
Scale: %s
Voltage: %s
Temperature: %s
Status: %s
+ Status
Health: %s
Plugged: %s
+ Plugged
History
Login
@@ -1073,9 +1077,11 @@
3G Net
4G Net
5G Net
+ Mobile
WiFi
Ethernet
Unknown
+ Network State: %s
WiFi SSID
Enable {{LOCATION}} Tag
@@ -1104,12 +1110,14 @@
例如:禁用所有转发通道
继续添加动作
- Please select condition
+ Please select trigger condition
+ Please select additional condition
Please select action
Cron
Charge
Battery
Network
+ SIM Status
Send Sms
Notification
Frpc Setting
@@ -1162,8 +1170,8 @@
day of each month.
Last day of month
Last day of month recent days
- 第
- 周的星期
+ The
+ th week\'s day
The last [day of the week] of this month.
The last week
of this month.
@@ -1172,4 +1180,15 @@
The next %s execution times:\n%s
Use SIM-%s to send sms\n%s
+ Discharged to the specified battery level
+ Charged to the specified battery level
+ The battery discharged to %s%%
+ "The battery discharged below %s%%
+ The battery charged to %s%%
+ The battery charged above %s%%
+
+ SIM State:%s
+ Absent
+ Ready
+ Unknown
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index aadfce49..e03846f5 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -443,7 +443,7 @@
请输入服务端IP
当前处于无线网络
当前处于移动网络
- 当前没有网络
+ 没有网络
未连接Wifi
获取IP失败
短 信
@@ -583,6 +583,7 @@
测试通道
SIM1_测试运营商_18888888888
持续提醒
+ 超过预设值之后,每次电量变化继续触发
重发消息
重新匹配规则
来源:
@@ -930,12 +931,15 @@
未知错误
温度过低
剩余电量:%s
+ 剩余电量
充满电量:%s
当前电压:%s
当前温度:%s
电池状态:%s
+ 电池状态
健康度:%s
充电器:%s
+ 充电器
历史记录
登录服务
@@ -1074,9 +1078,11 @@
3G网络
4G网络
5G网络
+ 移动网络
WiFi
有线网络
未知网络
+ 网络状态:%s
WiFi名称
启用 {{定位信息}} 标签
@@ -1105,12 +1111,14 @@
例如:禁用所有转发通道
继续添加动作
- 请选择条件
+ 请选择触发条件
+ 请选择附加条件
请选择动作
定时任务
充电状态
电量使用
网络状态
+ SIM卡状态
发送短信
通道推送
设置 Frpc
@@ -1173,4 +1181,15 @@
最近 %s 次运行时间:\n%s
通过卡槽 SIM-%s 发送短信到:\n%s
+ 放电到指定电量
+ 充电到指定电量
+ 电池放电低到%s%%
+ 电池放电低于%s%%
+ 电池充电达到%s%%
+ 电池充电高于%s%%
+
+ SIM卡状态:%s
+ 被移除
+ 已就绪
+ 未知
diff --git a/app/src/main/res/values/styles_widget.xml b/app/src/main/res/values/styles_widget.xml
index e5a32895..61d49d62 100644
--- a/app/src/main/res/values/styles_widget.xml
+++ b/app/src/main/res/values/styles_widget.xml
@@ -229,7 +229,7 @@
- match_parent
- wrap_content
- true
- - 12sp
+
- @drawable/custom_radio_button