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