新增:自动任务·快捷指令 (开发中)

pull/408/head
pppscn 10 months ago
parent 22df7592f7
commit b94a25c09d

@ -46,6 +46,7 @@ import com.xuexiang.xui.adapter.recyclerview.RecyclerViewHolder
import com.xuexiang.xui.utils.DensityUtils
import com.xuexiang.xui.utils.ResUtils
import com.xuexiang.xui.utils.WidgetUtils
import com.xuexiang.xui.widget.alpha.XUIAlphaTextView
import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction
import com.xuexiang.xui.widget.dialog.materialdialog.GravityEnum
import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog
@ -329,6 +330,9 @@ class MainActivity : BaseActivity<ActivityMainBinding?>(),
widgetItemAdapter.setOnItemClickListener(this)
recyclerView.adapter = widgetItemAdapter
val bottomSheetCloseButton: XUIAlphaTextView = view.findViewById(R.id.bottom_sheet_close_button)
bottomSheetCloseButton.setOnClickListener { dialog.dismiss() }
dialog.setContentView(view)
dialog.setCancelable(true)
dialog.setCanceledOnTouchOutside(true)

@ -6,15 +6,7 @@ import androidx.room.Entity
import androidx.room.PrimaryKey
import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.utils.STATUS_OFF
import com.idormy.sms.forwarder.utils.TASK_ACTION_FRPC
import com.idormy.sms.forwarder.utils.TASK_ACTION_HTTPSERVER
import com.idormy.sms.forwarder.utils.TASK_ACTION_NOTIFICATION
import com.idormy.sms.forwarder.utils.TASK_ACTION_SENDSMS
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 com.idormy.sms.forwarder.utils.task.TaskUtils
import kotlinx.parcelize.Parcelize
import java.util.Date
@ -33,32 +25,10 @@ data class Task(
) : Parcelable {
val imageId: Int
get() = when (type) {
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_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
TASK_ACTION_HTTPSERVER -> R.drawable.auto_task_icon_http_server
else -> R.drawable.auto_task_icon_custom_time
}
get() = TaskUtils.getTypeImageId(type)
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
}
get() = TaskUtils.getTypeGreyImageId(type)
val statusImageId: Int
get() = when (status) {

@ -1,14 +1,6 @@
package com.idormy.sms.forwarder.entity.task
import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.utils.TASK_ACTION_FRPC
import com.idormy.sms.forwarder.utils.TASK_ACTION_HTTPSERVER
import com.idormy.sms.forwarder.utils.TASK_ACTION_NOTIFICATION
import com.idormy.sms.forwarder.utils.TASK_ACTION_SENDSMS
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.TaskUtils
import java.io.Serializable
data class TaskSetting(
@ -20,28 +12,8 @@ data class TaskSetting(
) : Serializable {
val iconId: Int
get() = when (type) {
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_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
}
get() = TaskUtils.getTypeImageId(type)
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
}
get() = TaskUtils.getTypeGreyImageId(type)
}

@ -38,6 +38,7 @@ import com.xuexiang.xui.adapter.recyclerview.RecyclerViewHolder
import com.xuexiang.xui.utils.DensityUtils
import com.xuexiang.xui.utils.WidgetUtils
import com.xuexiang.xui.widget.actionbar.TitleBar
import com.xuexiang.xui.widget.alpha.XUIAlphaTextView
import gatewayapps.crondroid.CronExpression
import io.reactivex.SingleObserver
import io.reactivex.android.schedulers.AndroidSchedulers
@ -175,6 +176,9 @@ class TasksEditFragment : BaseFragment<FragmentTasksEditBinding?>(), View.OnClic
widgetItemAdapter.setOnItemClickListener(that)
recyclerView.adapter = widgetItemAdapter
val bottomSheetCloseButton: XUIAlphaTextView = view.findViewById(R.id.bottom_sheet_close_button)
bottomSheetCloseButton.setOnClickListener { dialog.dismiss() }
dialog.setContentView(view)
dialog.setCancelable(true)
dialog.setCanceledOnTouchOutside(true)
@ -191,6 +195,9 @@ class TasksEditFragment : BaseFragment<FragmentTasksEditBinding?>(), View.OnClic
widgetItemAdapter.setOnItemClickListener(that)
recyclerView.adapter = widgetItemAdapter
val bottomSheetCloseButton: XUIAlphaTextView = view.findViewById(R.id.bottom_sheet_close_button)
bottomSheetCloseButton.setOnClickListener { dialog.dismiss() }
dialog.setContentView(view)
dialog.setCancelable(true)
dialog.setCanceledOnTouchOutside(true)

@ -498,10 +498,13 @@ 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_TO_ADDRESS = 1001
const val TASK_CONDITION_LEAVE_ADDRESS = 1002
const val TASK_CONDITION_NETWORK = 1003
const val TASK_CONDITION_SIM = 1004
const val TASK_CONDITION_BATTERY = 1005
const val TASK_CONDITION_CHARGE = 1006
const val TASK_CONDITION_LOCK_SCREEN = 1007
var TASK_CONDITION_FRAGMENT_LIST = listOf(
PageInfo(
getString(R.string.task_cron),
@ -511,18 +514,18 @@ var TASK_CONDITION_FRAGMENT_LIST = listOf(
R.drawable.auto_task_icon_custom_time,
),
PageInfo(
getString(R.string.task_battery),
"com.idormy.sms.forwarder.fragment.condition.BatteryFragment",
getString(R.string.to_address),
"com.idormy.sms.forwarder.fragment.condition.ToAddressFragment",
"{\"\":\"\"}",
CoreAnim.slide,
R.drawable.auto_task_icon_battery
R.drawable.auto_task_icon_to_address,
),
PageInfo(
getString(R.string.task_charge),
"com.idormy.sms.forwarder.fragment.condition.ChargeFragment",
getString(R.string.leave_address),
"com.idormy.sms.forwarder.fragment.condition.LeaveAddressFragment",
"{\"\":\"\"}",
CoreAnim.slide,
R.drawable.auto_task_icon_charge
R.drawable.auto_task_icon_leave_address,
),
PageInfo(
getString(R.string.task_network),
@ -538,6 +541,27 @@ var TASK_CONDITION_FRAGMENT_LIST = listOf(
CoreAnim.slide,
R.drawable.auto_task_icon_sim
),
PageInfo(
getString(R.string.task_battery),
"com.idormy.sms.forwarder.fragment.condition.BatteryFragment",
"{\"\":\"\"}",
CoreAnim.slide,
R.drawable.auto_task_icon_battery
),
PageInfo(
getString(R.string.task_charge),
"com.idormy.sms.forwarder.fragment.condition.ChargeFragment",
"{\"\":\"\"}",
CoreAnim.slide,
R.drawable.auto_task_icon_charge
),
PageInfo(
getString(R.string.task_lock_screen),
"com.idormy.sms.forwarder.fragment.condition.LockScreenFragment",
"{\"\":\"\"}",
CoreAnim.slide,
R.drawable.auto_task_icon_lock_screen
),
)
//注意TASK_ACTION_XXX 枚举值 等于 TASK_ACTION_FRAGMENT_LIST 索引加上 KEY_BACK_CODE_ACTION不可改变

@ -1,6 +1,7 @@
package com.idormy.sms.forwarder.utils.task
import android.os.BatteryManager
import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.utils.SP_BATTERY_INFO
import com.idormy.sms.forwarder.utils.SP_BATTERY_LEVEL
import com.idormy.sms.forwarder.utils.SP_BATTERY_PCT
@ -13,6 +14,18 @@ import com.idormy.sms.forwarder.utils.SP_NETWORK_STATE
import com.idormy.sms.forwarder.utils.SP_SIM_STATE
import com.idormy.sms.forwarder.utils.SP_WIFI_SSID
import com.idormy.sms.forwarder.utils.SharedPreference
import com.idormy.sms.forwarder.utils.TASK_ACTION_FRPC
import com.idormy.sms.forwarder.utils.TASK_ACTION_HTTPSERVER
import com.idormy.sms.forwarder.utils.TASK_ACTION_NOTIFICATION
import com.idormy.sms.forwarder.utils.TASK_ACTION_SENDSMS
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_LEAVE_ADDRESS
import com.idormy.sms.forwarder.utils.TASK_CONDITION_LOCK_SCREEN
import com.idormy.sms.forwarder.utils.TASK_CONDITION_NETWORK
import com.idormy.sms.forwarder.utils.TASK_CONDITION_SIM
import com.idormy.sms.forwarder.utils.TASK_CONDITION_TO_ADDRESS
/**
* 自动任务工具类 用于存储自动任务相关的配置
@ -21,6 +34,44 @@ class TaskUtils private constructor() {
companion object {
//获取任务类型图标
fun getTypeImageId(type: Int): Int {
return when (type) {
TASK_CONDITION_CRON -> R.drawable.auto_task_icon_custom_time
TASK_CONDITION_TO_ADDRESS -> R.drawable.auto_task_icon_to_address
TASK_CONDITION_LEAVE_ADDRESS -> R.drawable.auto_task_icon_leave_address
TASK_CONDITION_NETWORK -> R.drawable.auto_task_icon_network
TASK_CONDITION_SIM -> R.drawable.auto_task_icon_sim
TASK_CONDITION_BATTERY -> R.drawable.auto_task_icon_battery
TASK_CONDITION_CHARGE -> R.drawable.auto_task_icon_charge
TASK_CONDITION_LOCK_SCREEN -> R.drawable.auto_task_icon_lock_screen
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_custom_time
}
}
//获取任务类型图标(灰色)
fun getTypeGreyImageId(type: Int): Int {
return when (type) {
TASK_CONDITION_CRON -> R.drawable.auto_task_icon_custom_time_grey
TASK_CONDITION_TO_ADDRESS -> R.drawable.auto_task_icon_to_address_grey
TASK_CONDITION_LEAVE_ADDRESS -> R.drawable.auto_task_icon_leave_address_grey
TASK_CONDITION_NETWORK -> R.drawable.auto_task_icon_network_grey
TASK_CONDITION_SIM -> R.drawable.auto_task_icon_sim_grey
TASK_CONDITION_BATTERY -> R.drawable.auto_task_icon_battery_grey
TASK_CONDITION_CHARGE -> R.drawable.auto_task_icon_charge_grey
TASK_CONDITION_LOCK_SCREEN -> R.drawable.auto_task_icon_lock_screen_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
}
}
//电池信息
var batteryInfo: String by SharedPreference(SP_BATTERY_INFO, "")

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<vector android:height="24.0dip" android:width="25.0dip" android:autoMirrored="true" android:viewportWidth="25.0" android:viewportHeight="24.0"
xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@color/color_green_primary_default" android:pathData="M6.66,0L18.66,0A6,6 0,0 1,24.66 6L24.66,18A6,6 0,0 1,18.66 24L6.66,24A6,6 0,0 1,0.66 18L0.66,6A6,6 0,0 1,6.66 0z" />
<path android:fillColor="@color/color_yellow_primary_default" android:pathData="M6.66,0L18.66,0A6,6 0,0 1,24.66 6L24.66,18A6,6 0,0 1,18.66 24L6.66,24A6,6 0,0 1,0.66 18L0.66,6A6,6 0,0 1,6.66 0z" />
<path android:fillColor="#ffffffff" android:pathData="M14.609,5.449C14.127,5.449 13.737,5.839 13.737,6.321V16.927C13.737,17.409 14.127,17.799 14.609,17.799C15.09,17.799 15.481,17.409 15.481,16.927V9.248H17.732C18.052,9.248 18.215,8.864 17.994,8.633L15.377,5.908C15.23,5.634 14.941,5.449 14.609,5.449Z" android:fillType="evenOdd" />
<path android:fillColor="#ffffffff" android:pathData="M9.962,17.799C10.443,17.799 10.834,17.409 10.834,16.927V6.321C10.834,5.839 10.443,5.449 9.962,5.449C9.48,5.449 9.09,5.839 9.09,6.321V14H6.838C6.518,14 6.355,14.384 6.576,14.615L9.193,17.34C9.34,17.613 9.629,17.799 9.962,17.799Z" android:fillType="evenOdd" />
</vector>

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<vector android:height="24.0dip" android:width="25.0dip" android:autoMirrored="true" android:viewportWidth="25.0" android:viewportHeight="24.0"
xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@color/color_green_primary_default" android:pathData="M6.66,0L18.66,0A6,6 0,0 1,24.66 6L24.66,18A6,6 0,0 1,18.66 24L6.66,24A6,6 0,0 1,0.66 18L0.66,6A6,6 0,0 1,6.66 0z" android:strokeAlpha="0.3" android:fillAlpha="0.3" />
<path android:fillColor="@color/color_yellow_primary_default" android:pathData="M6.66,0L18.66,0A6,6 0,0 1,24.66 6L24.66,18A6,6 0,0 1,18.66 24L6.66,24A6,6 0,0 1,0.66 18L0.66,6A6,6 0,0 1,6.66 0z" android:strokeAlpha="0.3" android:fillAlpha="0.3" />
<path android:fillColor="#ffffffff" android:pathData="M14.609,5.449C14.127,5.449 13.737,5.839 13.737,6.321V16.927C13.737,17.409 14.127,17.799 14.609,17.799C15.09,17.799 15.481,17.409 15.481,16.927V9.248H17.732C18.052,9.248 18.215,8.864 17.994,8.633L15.377,5.908C15.23,5.634 14.941,5.449 14.609,5.449Z" android:strokeAlpha="0.3" android:fillAlpha="0.3" android:fillType="evenOdd" />
<path android:fillColor="#ffffffff" android:pathData="M9.962,17.799C10.443,17.799 10.834,17.409 10.834,16.927V6.321C10.834,5.839 10.443,5.449 9.962,5.449C9.48,5.449 9.09,5.839 9.09,6.321V14H6.838C6.518,14 6.355,14.384 6.576,14.615L9.193,17.34C9.34,17.613 9.629,17.799 9.962,17.799Z" android:strokeAlpha="0.3" android:fillAlpha="0.3" android:fillType="evenOdd" />
</vector>

@ -11,7 +11,8 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="10dp"
android:text="@string/select_sender_type" />
android:text="@string/select_sender_type"
android:textStyle="bold" />
<View
android:layout_width="match_parent"
@ -25,4 +26,18 @@
android:overScrollMode="never"
tools:listitem="@android:layout/simple_list_item_2" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?attr/xui_config_color_separator_light" />
<com.xuexiang.xui.widget.alpha.XUIAlphaTextView
android:id="@+id/bottom_sheet_close_button"
android:layout_width="match_parent"
android:layout_height="48dp"
android:gravity="center"
android:text="@string/bottom_sheet_close"
android:textColor="#49505A"
android:textSize="14sp" />
</LinearLayout>

@ -11,7 +11,8 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="10dp"
android:text="@string/select_task_action" />
android:text="@string/select_task_action"
android:textStyle="bold" />
<View
android:layout_width="match_parent"
@ -25,4 +26,18 @@
android:overScrollMode="never"
tools:listitem="@android:layout/simple_list_item_2" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?attr/xui_config_color_separator_light" />
<com.xuexiang.xui.widget.alpha.XUIAlphaTextView
android:id="@+id/bottom_sheet_close_button"
android:layout_width="match_parent"
android:layout_height="48dp"
android:gravity="center"
android:text="@string/bottom_sheet_close"
android:textColor="#49505A"
android:textSize="14sp" />
</LinearLayout>

@ -12,7 +12,8 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="10dp"
android:text="@string/select_task_condition" />
android:text="@string/select_task_condition"
android:textStyle="bold" />
<View
android:layout_width="match_parent"
@ -26,4 +27,18 @@
android:overScrollMode="never"
tools:listitem="@android:layout/simple_list_item_2" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?attr/xui_config_color_separator_light" />
<com.xuexiang.xui.widget.alpha.XUIAlphaTextView
android:id="@+id/bottom_sheet_close_button"
android:layout_width="match_parent"
android:layout_height="48dp"
android:gravity="center"
android:text="@string/bottom_sheet_close"
android:textColor="#49505A"
android:textSize="14sp" />
</LinearLayout>

@ -1114,11 +1114,15 @@
<string name="select_task_trigger">Please select trigger condition</string>
<string name="select_task_condition">Please select additional condition</string>
<string name="select_task_action">Please select action</string>
<string name="bottom_sheet_close">Close</string>
<string name="task_cron">Cron</string>
<string name="task_charge">Charge</string>
<string name="task_battery">Battery</string>
<string name="to_address">To Address</string>
<string name="leave_address">Leave Address</string>
<string name="task_network">Network</string>
<string name="task_sim">SIM Status</string>
<string name="task_battery">Battery</string>
<string name="task_charge">Charge</string>
<string name="task_lock_screen">Lock Screen</string>
<string name="task_sendsms">Send Sms</string>
<string name="task_notification">Notification</string>
<string name="task_frpc">Frpc Setting</string>

@ -1115,11 +1115,15 @@
<string name="select_task_trigger">请选择触发条件</string>
<string name="select_task_condition">请选择附加条件</string>
<string name="select_task_action">请选择动作</string>
<string name="bottom_sheet_close">关 闭</string>
<string name="task_cron">定时任务</string>
<string name="task_charge">充电状态</string>
<string name="task_battery">电量使用</string>
<string name="to_address">到达地点</string>
<string name="leave_address">离开地点</string>
<string name="task_network">网络状态</string>
<string name="task_sim">SIM卡状态</string>
<string name="task_battery">电量使用</string>
<string name="task_charge">充电状态</string>
<string name="task_lock_screen">屏幕锁定</string>
<string name="task_sendsms">发送短信</string>
<string name="task_notification">通道推送</string>
<string name="task_frpc">Frpc设置</string>

Loading…
Cancel
Save