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

This commit is contained in:
pppscn 2023-12-16 15:51:24 +08:00
parent f288f5a6dc
commit 1302bf9e20
18 changed files with 413 additions and 514 deletions

View File

@ -15,15 +15,12 @@ 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
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 = "Battery")
@ -32,7 +29,6 @@ class BatteryFragment : BaseFragment<FragmentTasksConditionBatteryBinding?>(), V
private val TAG: String = BatteryFragment::class.java.simpleName
var titleBar: TitleBar? = null
private var mCountDownHelper: CountDownButtonHelper? = null
@JvmField
@AutoWired(name = KEY_EVENT_DATA_CONDITION)
@ -60,18 +56,6 @@ class BatteryFragment : BaseFragment<FragmentTasksConditionBatteryBinding?>(), V
* 初始化控件
*/
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)
}
})
binding!!.rgStatus.setOnCheckedChangeListener { _, checkedId ->
if (checkedId == R.id.rb_battery_discharging) {
binding!!.xsbLevelMin.visibility = View.VISIBLE
@ -80,16 +64,18 @@ class BatteryFragment : BaseFragment<FragmentTasksConditionBatteryBinding?>(), V
binding!!.xsbLevelMin.visibility = View.GONE
binding!!.xsbLevelMax.visibility = View.VISIBLE
}
checkSetting(true)
}
Log.d(TAG, "initViews eventData:$eventData")
if (eventData != null) {
val settingVo = Gson().fromJson(eventData, BatterySetting::class.java)
Log.d(TAG, "initViews settingVo:$settingVo")
binding!!.rgStatus.check(settingVo.getStatusCheckId())
binding!!.tvDescription.text = settingVo.description
binding!!.xsbLevelMin.setDefaultValue(settingVo.levelMin)
binding!!.xsbLevelMax.setDefaultValue(settingVo.levelMax)
binding!!.sbKeepReminding.isChecked = settingVo.keepReminding
binding!!.rgStatus.check(settingVo.getStatusCheckId())
} else {
binding!!.xsbLevelMin.setDefaultValue(10)
binding!!.xsbLevelMax.setDefaultValue(90)
@ -98,17 +84,16 @@ class BatteryFragment : BaseFragment<FragmentTasksConditionBatteryBinding?>(), V
@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)
}
binding!!.xsbLevelMin.setOnSeekBarListener { _, _ ->
checkSetting(true)
}
binding!!.xsbLevelMax.setOnSeekBarListener { _, _ ->
checkSetting(true)
}
binding!!.sbKeepReminding.setOnCheckedChangeListener { _, _ ->
checkSetting(true)
}
}
@ -116,20 +101,6 @@ class BatteryFragment : BaseFragment<FragmentTasksConditionBatteryBinding?>(), V
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()
@ -154,26 +125,34 @@ class BatteryFragment : BaseFragment<FragmentTasksConditionBatteryBinding?>(), V
//检查设置
@SuppressLint("SetTextI18n")
private fun checkSetting(): BatterySetting {
private fun checkSetting(updateView: Boolean = false): 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())
val status: Int = when (binding!!.rgStatus.checkedRadioButtonId) {
R.id.rb_battery_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())
}
BatteryManager.BATTERY_STATUS_DISCHARGING
}
} 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())
else -> {
description = if (keepReminding) {
String.format(getString(R.string.battery_charged_above), levelMax.toString())
} else {
String.format(getString(R.string.battery_charged_to), levelMax.toString())
}
BatteryManager.BATTERY_STATUS_CHARGING
}
}
if (updateView) {
binding!!.tvDescription.text = description
}
return BatterySetting(description, status, levelMin, levelMax, keepReminding)
}
}

View File

@ -14,15 +14,12 @@ 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
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 = "Charge")
@ -31,7 +28,6 @@ class ChargeFragment : BaseFragment<FragmentTasksConditionChargeBinding?>(), Vie
private val TAG: String = ChargeFragment::class.java.simpleName
var titleBar: TitleBar? = null
private var mCountDownHelper: CountDownButtonHelper? = null
@JvmField
@AutoWired(name = KEY_EVENT_DATA_CONDITION)
@ -57,22 +53,11 @@ class ChargeFragment : BaseFragment<FragmentTasksConditionChargeBinding?>(), Vie
* 初始化控件
*/
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, ChargeSetting::class.java)
Log.d(TAG, "initViews settingVo:$settingVo")
binding!!.tvDescription.text = settingVo.description
binding!!.rgStatus.check(settingVo.getStatusCheckId())
binding!!.rgPlugged.check(settingVo.getPluggedCheckId())
}
@ -80,17 +65,13 @@ class ChargeFragment : BaseFragment<FragmentTasksConditionChargeBinding?>(), Vie
@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)
}
binding!!.rgStatus.setOnCheckedChangeListener { _, _ ->
checkSetting(true)
}
binding!!.rgPlugged.setOnCheckedChangeListener { _, _ ->
checkSetting(true)
}
}
@ -98,20 +79,6 @@ class ChargeFragment : BaseFragment<FragmentTasksConditionChargeBinding?>(), Vie
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()
@ -135,9 +102,15 @@ class ChargeFragment : BaseFragment<FragmentTasksConditionChargeBinding?>(), Vie
}
//检查设置
private fun checkSetting(): ChargeSetting {
private fun checkSetting(updateView: Boolean = false): ChargeSetting {
val statusCheckId = binding!!.rgStatus.checkedRadioButtonId
val pluggedCheckId = binding!!.rgPlugged.checkedRadioButtonId
return ChargeSetting(statusCheckId = statusCheckId, pluggedCheckId = pluggedCheckId)
val settingVo = ChargeSetting(statusCheckId = statusCheckId, pluggedCheckId = pluggedCheckId)
if (updateView) {
binding!!.tvDescription.text = settingVo.description
}
return settingVo
}
}

View File

@ -116,6 +116,7 @@ class CronFragment : BaseFragment<FragmentTasksConditionCronBinding?>(), View.On
Log.d(TAG, "initViews eventData:$eventData")
if (eventData != null) {
val settingVo = Gson().fromJson(eventData, CronSetting::class.java)
binding!!.tvDescription.text = settingVo.description
expression = settingVo.expression
Log.d(TAG, "initViews expression:$expression")
@ -159,6 +160,7 @@ class CronFragment : BaseFragment<FragmentTasksConditionCronBinding?>(), View.On
nextTimeList.add(dateFormat.format(nextDate))
times++
}
binding!!.tvDescription.text = description
binding!!.tvCronExpressionCheckTips.text = "$expression\n$description"
binding!!.tvNextTimeList.text = String.format(getString(R.string.next_execution_times), times.toString(), nextTimeList.joinToString("\n"))
binding!!.tvNextTimeList.visibility = View.VISIBLE
@ -235,13 +237,6 @@ class CronFragment : BaseFragment<FragmentTasksConditionCronBinding?>(), View.On
afterSecondChanged()
}
}
/*binding!!.etSecond.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable) {
afterSecondChanged()
}
})*/
binding!!.etSecond.setText(second)
afterSecondChanged()
@ -405,13 +400,6 @@ class CronFragment : BaseFragment<FragmentTasksConditionCronBinding?>(), View.On
afterMinuteChanged()
}
}
/*binding!!.etMinute.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable) {
afterMinuteChanged()
}
})*/
binding!!.etMinute.setText(minute)
afterMinuteChanged()
@ -575,13 +563,6 @@ class CronFragment : BaseFragment<FragmentTasksConditionCronBinding?>(), View.On
afterHourChanged()
}
}
/*binding!!.etHour.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable) {
afterHourChanged()
}
})*/
binding!!.etHour.setText(hour)
afterHourChanged()
@ -745,13 +726,6 @@ class CronFragment : BaseFragment<FragmentTasksConditionCronBinding?>(), View.On
afterDayChanged()
}
}
/*binding!!.etDay.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable) {
afterDayChanged()
}
})*/
binding!!.etDay.setText(day)
afterDayChanged()
@ -961,13 +935,6 @@ class CronFragment : BaseFragment<FragmentTasksConditionCronBinding?>(), View.On
afterMonthChanged()
}
}
/*binding!!.etMonth.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable) {
afterMonthChanged()
}
})*/
binding!!.etMonth.setText(month)
afterMonthChanged()
@ -1130,13 +1097,6 @@ class CronFragment : BaseFragment<FragmentTasksConditionCronBinding?>(), View.On
afterWeekChanged()
}
}
/*binding!!.etWeek.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable) {
afterWeekChanged()
}
})*/
binding!!.etWeek.setText(week)
afterWeekChanged()
@ -1346,13 +1306,6 @@ class CronFragment : BaseFragment<FragmentTasksConditionCronBinding?>(), View.On
afterYearChanged()
}
}
/*binding!!.etYear.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable) {
afterYearChanged()
}
})*/
binding!!.etYear.setText(year)
afterYearChanged()

View File

@ -2,6 +2,8 @@ package com.idormy.sms.forwarder.fragment.condition
import android.annotation.SuppressLint
import android.content.Intent
import android.text.Editable
import android.text.TextWatcher
import android.util.Log
import android.view.LayoutInflater
import android.view.View
@ -17,16 +19,13 @@ import com.idormy.sms.forwarder.utils.HttpServerUtils
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.SettingUtils
import com.idormy.sms.forwarder.utils.TASK_CONDITION_LEAVE_ADDRESS
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
import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction
import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog
@ -37,7 +36,6 @@ class LeaveAddressFragment : BaseFragment<FragmentTasksConditionLeaveAddressBind
private val TAG: String = LeaveAddressFragment::class.java.simpleName
var titleBar: TitleBar? = null
private var mCountDownHelper: CountDownButtonHelper? = null
@JvmField
@AutoWired(name = KEY_EVENT_DATA_CONDITION)
@ -65,18 +63,6 @@ class LeaveAddressFragment : BaseFragment<FragmentTasksConditionLeaveAddressBind
* 初始化控件
*/
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)
}
})
binding!!.rgCalcType.setOnCheckedChangeListener { _, checkedId ->
if (checkedId == R.id.rb_calc_type_distance) {
binding!!.layoutCalcTypeDistance.visibility = View.VISIBLE
@ -85,35 +71,93 @@ class LeaveAddressFragment : BaseFragment<FragmentTasksConditionLeaveAddressBind
binding!!.layoutCalcTypeDistance.visibility = View.GONE
binding!!.layoutCalcTypeAddress.visibility = View.VISIBLE
}
try {
checkSetting(true)
} catch (e: Exception) {
e.printStackTrace()
}
}
Log.d(TAG, "initViews eventData:$eventData")
if (eventData != null) {
val settingVo = Gson().fromJson(eventData, LocationSetting::class.java)
Log.d(TAG, "initViews settingVo:$settingVo")
binding!!.rgCalcType.check(settingVo.getCalcTypeCheckId())
binding!!.tvDescription.text = settingVo.description
binding!!.etLongitude.setText(settingVo.longitude.toString())
binding!!.etLatitude.setText(settingVo.latitude.toString())
binding!!.etDistance.setText(settingVo.distance.toString())
binding!!.etAddress.setText(settingVo.address)
binding!!.rgCalcType.check(settingVo.getCalcTypeCheckId())
}
}
@SuppressLint("SetTextI18n")
override fun initListeners() {
binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this)
binding!!.btnCurrentCoordinates.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)
binding!!.etLongitude.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable?) {
try {
val changedText = s.toString()
if (changedText.isEmpty()) {
binding!!.etLongitude.setText("0")
binding!!.etLongitude.setSelection(binding!!.etLongitude.text.length) // 将光标移至文本末尾
} else {
checkSetting(true)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
})
binding!!.etLatitude.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable?) {
try {
val changedText = s.toString()
if (changedText.isEmpty()) {
binding!!.etLatitude.setText("0")
binding!!.etLatitude.setSelection(binding!!.etLatitude.text.length) // 将光标移至文本末尾
} else {
checkSetting(true)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
})
binding!!.etDistance.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable?) {
try {
val changedText = s.toString()
if (changedText.isEmpty()) {
binding!!.etDistance.setText("1")
binding!!.etDistance.setSelection(binding!!.etDistance.text.length) // 将光标移至文本末尾
} else {
checkSetting(true)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
})
binding!!.etAddress.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable?) {
try {
checkSetting(true)
} catch (e: Exception) {
e.printStackTrace()
}
}
})
}
@SingleClick
@ -122,18 +166,12 @@ class LeaveAddressFragment : BaseFragment<FragmentTasksConditionLeaveAddressBind
when (v.id) {
R.id.btn_current_coordinates -> {
if (!App.LocationClient.isStarted()) {
MaterialDialog.Builder(requireContext())
.iconRes(R.drawable.auto_task_icon_location)
.title(R.string.enable_location)
.content(R.string.enable_location_dialog)
.cancelable(false)
.positiveText(R.string.lab_yes)
.negativeText(R.string.lab_no).onPositive { _: MaterialDialog?, _: DialogAction? ->
SettingUtils.enableLocation = true
val serviceIntent = Intent(requireContext(), LocationService::class.java)
serviceIntent.action = "START"
requireContext().startService(serviceIntent)
}.show()
MaterialDialog.Builder(requireContext()).iconRes(R.drawable.auto_task_icon_location).title(R.string.enable_location).content(R.string.enable_location_dialog).cancelable(false).positiveText(R.string.lab_yes).negativeText(R.string.lab_no).onPositive { _: MaterialDialog?, _: DialogAction? ->
SettingUtils.enableLocation = true
val serviceIntent = Intent(requireContext(), LocationService::class.java)
serviceIntent.action = "START"
requireContext().startService(serviceIntent)
}.show()
return
}
@ -148,21 +186,6 @@ class LeaveAddressFragment : BaseFragment<FragmentTasksConditionLeaveAddressBind
XToastUtils.success(String.format(getString(R.string.current_address), location.address), 30000)
}
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
@ -186,25 +209,36 @@ class LeaveAddressFragment : BaseFragment<FragmentTasksConditionLeaveAddressBind
//检查设置
@SuppressLint("SetTextI18n")
private fun checkSetting(): LocationSetting {
private fun checkSetting(updateView: Boolean = false): LocationSetting {
val longitude = binding!!.etLongitude.text.toString().toDouble()
val latitude = binding!!.etLatitude.text.toString().toDouble()
val distance = binding!!.etDistance.text.toString().toDouble()
val address = binding!!.etAddress.text.toString()
var calcType = "distance"
if (binding!!.rbCalcTypeDistance.isChecked) {
if (latitude.isNaN() || longitude.isNaN() || distance.isNaN()) {
throw Exception(getString(R.string.calc_type_address_error))
val calcType = when (binding!!.rgCalcType.checkedRadioButtonId) {
R.id.rb_calc_type_distance -> {
Log.d(TAG, "longitude:$longitude latitude:$latitude distance:$distance")
if (latitude.isNaN() || longitude.isNaN() || distance.isNaN()) {
throw Exception(getString(R.string.calc_type_distance_error))
}
description = String.format(getString(R.string.to_address_distance_description), longitude, latitude, distance)
"distance"
}
description = String.format(getString(R.string.leave_address_distance_description), longitude, latitude, distance)
} else if (binding!!.rbCalcTypeAddress.isChecked) {
if (address.isEmpty()) {
throw Exception(getString(R.string.calc_type_address_error))
else -> {
if (address.isEmpty()) {
throw Exception(getString(R.string.calc_type_address_error))
}
description = String.format(getString(R.string.to_address_keyword_description), address)
"address"
}
description = String.format(getString(R.string.leave_address_keyword_description), address)
calcType = "address"
}
return LocationSetting(description, "leave", calcType, longitude, latitude, distance, address)
val settingVo = LocationSetting(description, "leave", calcType, longitude, latitude, distance, address)
if (updateView) {
binding!!.tvDescription.text = description
}
return settingVo
}
}

View File

@ -14,15 +14,12 @@ import com.idormy.sms.forwarder.entity.task.LockScreenSetting
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_LOCK_SCREEN
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 = "LockScreen")
@ -31,7 +28,6 @@ class LockScreenFragment : BaseFragment<FragmentTasksConditionLockScreenBinding?
private val TAG: String = LockScreenFragment::class.java.simpleName
var titleBar: TitleBar? = null
private var mCountDownHelper: CountDownButtonHelper? = null
@JvmField
@AutoWired(name = KEY_EVENT_DATA_CONDITION)
@ -57,18 +53,6 @@ class LockScreenFragment : BaseFragment<FragmentTasksConditionLockScreenBinding?
* 初始化控件
*/
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)
}
})
binding!!.rgAction.setOnCheckedChangeListener { _, checkedId ->
if (checkedId == R.id.rb_action_screen_off) {
binding!!.xsbTimeAfterScreenOff.visibility = View.VISIBLE
@ -77,15 +61,17 @@ class LockScreenFragment : BaseFragment<FragmentTasksConditionLockScreenBinding?
binding!!.xsbTimeAfterScreenOff.visibility = View.GONE
binding!!.xsbTimeAfterScreenOn.visibility = View.VISIBLE
}
checkSetting(true)
}
Log.d(TAG, "initViews eventData:$eventData")
if (eventData != null) {
val settingVo = Gson().fromJson(eventData, LockScreenSetting::class.java)
Log.d(TAG, "initViews settingVo:$settingVo")
binding!!.rgAction.check(settingVo.getActionCheckId())
binding!!.tvDescription.text = settingVo.description
binding!!.xsbTimeAfterScreenOff.setDefaultValue(settingVo.timeAfterScreenOff)
binding!!.xsbTimeAfterScreenOn.setDefaultValue(settingVo.timeAfterScreenOn)
binding!!.rgAction.check(settingVo.getActionCheckId())
} else {
binding!!.xsbTimeAfterScreenOff.setDefaultValue(0)
binding!!.xsbTimeAfterScreenOn.setDefaultValue(0)
@ -94,17 +80,13 @@ class LockScreenFragment : BaseFragment<FragmentTasksConditionLockScreenBinding?
@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)
}
binding!!.xsbTimeAfterScreenOff.setOnSeekBarListener { _, _ ->
checkSetting(true)
}
binding!!.xsbTimeAfterScreenOn.setOnSeekBarListener { _, _ ->
checkSetting(true)
}
}
@ -112,20 +94,6 @@ class LockScreenFragment : BaseFragment<FragmentTasksConditionLockScreenBinding?
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()
@ -150,10 +118,16 @@ class LockScreenFragment : BaseFragment<FragmentTasksConditionLockScreenBinding?
//检查设置
@SuppressLint("SetTextI18n")
private fun checkSetting(): LockScreenSetting {
private fun checkSetting(updateView: Boolean = false): LockScreenSetting {
val actionCheckId = binding!!.rgAction.checkedRadioButtonId
val timeAfterScreenOff = binding!!.xsbTimeAfterScreenOff.selectedNumber
val timeAfterScreenOn = binding!!.xsbTimeAfterScreenOn.selectedNumber
return LockScreenSetting(actionCheckId, timeAfterScreenOff, timeAfterScreenOn)
val settingVo = LockScreenSetting(actionCheckId, timeAfterScreenOff, timeAfterScreenOn)
if (updateView) {
binding!!.tvDescription.text = settingVo.description
}
return settingVo
}
}

View File

@ -2,6 +2,8 @@ package com.idormy.sms.forwarder.fragment.condition
import android.annotation.SuppressLint
import android.content.Intent
import android.text.Editable
import android.text.TextWatcher
import android.util.Log
import android.view.LayoutInflater
import android.view.View
@ -14,15 +16,12 @@ 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
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 = "Network")
@ -31,7 +30,6 @@ class NetworkFragment : BaseFragment<FragmentTasksConditionNetworkBinding?>(), V
private val TAG: String = NetworkFragment::class.java.simpleName
var titleBar: TitleBar? = null
private var mCountDownHelper: CountDownButtonHelper? = null
@JvmField
@AutoWired(name = KEY_EVENT_DATA_CONDITION)
@ -57,68 +55,45 @@ class NetworkFragment : BaseFragment<FragmentTasksConditionNetworkBinding?>(), V
* 初始化控件
*/
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)
}
})
binding!!.rgNetworkState.setOnCheckedChangeListener { _, checkedId ->
Log.d(TAG, "rgNetworkState checkedId:$checkedId")
binding!!.layoutDataSimSlot.visibility = if (checkedId == R.id.rb_net_mobile) View.VISIBLE else View.GONE
binding!!.layoutWifiSsid.visibility = if (checkedId == R.id.rb_net_wifi) View.VISIBLE else View.GONE
checkSetting(true)
}
Log.d(TAG, "initViews eventData:$eventData")
if (eventData != null) {
val settingVo = Gson().fromJson(eventData, NetworkSetting::class.java)
Log.d(TAG, "initViews settingVo:$settingVo")
binding!!.rgNetworkState.check(settingVo.getNetworkStateCheckId())
binding!!.tvDescription.text = settingVo.description
binding!!.rgDataSimSlot.check(settingVo.getDataSimSlotCheckId())
binding!!.etWifiSsid.setText(settingVo.wifiSsid)
binding!!.rgNetworkState.check(settingVo.getNetworkStateCheckId())
}
}
@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)
}
binding!!.rgDataSimSlot.setOnCheckedChangeListener { _, _ ->
checkSetting(true)
}
binding!!.etWifiSsid.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable?) {
checkSetting(true)
}
})
}
@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()
@ -142,10 +117,16 @@ class NetworkFragment : BaseFragment<FragmentTasksConditionNetworkBinding?>(), V
}
//检查设置
private fun checkSetting(): NetworkSetting {
private fun checkSetting(updateView: Boolean = false): NetworkSetting {
val networkStateCheckId = binding!!.rgNetworkState.checkedRadioButtonId
val dataSimSlotCheckId = binding!!.rgDataSimSlot.checkedRadioButtonId
val wifiSsid = binding!!.etWifiSsid.text.toString().trim()
return NetworkSetting(networkStateCheckId, dataSimSlotCheckId, wifiSsid)
val settingVo = NetworkSetting(networkStateCheckId, dataSimSlotCheckId, wifiSsid)
if (updateView) {
binding!!.tvDescription.text = settingVo.description
}
return settingVo
}
}

View File

@ -14,15 +14,12 @@ 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")
@ -31,7 +28,6 @@ class SimFragment : BaseFragment<FragmentTasksConditionSimBinding?>(), View.OnCl
private val TAG: String = SimFragment::class.java.simpleName
var titleBar: TitleBar? = null
private var mCountDownHelper: CountDownButtonHelper? = null
@JvmField
@AutoWired(name = KEY_EVENT_DATA_CONDITION)
@ -57,39 +53,21 @@ class SimFragment : BaseFragment<FragmentTasksConditionSimBinding?>(), View.OnCl
* 初始化控件
*/
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!!.tvDescription.text = settingVo.description
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)
}
binding!!.rgSimState.setOnCheckedChangeListener { _, _ ->
checkSetting(true)
}
}
@ -97,20 +75,6 @@ class SimFragment : BaseFragment<FragmentTasksConditionSimBinding?>(), View.OnCl
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()
@ -134,8 +98,14 @@ class SimFragment : BaseFragment<FragmentTasksConditionSimBinding?>(), View.OnCl
}
//检查设置
private fun checkSetting(): SimSetting {
private fun checkSetting(updateView: Boolean = false): SimSetting {
val simStateCheckId = binding!!.rgSimState.checkedRadioButtonId
return SimSetting(simStateCheckId)
val settingVo = SimSetting(simStateCheckId)
if (updateView) {
binding!!.tvDescription.text = settingVo.description
}
return settingVo
}
}

View File

@ -2,6 +2,8 @@ package com.idormy.sms.forwarder.fragment.condition
import android.annotation.SuppressLint
import android.content.Intent
import android.text.Editable
import android.text.TextWatcher
import android.util.Log
import android.view.LayoutInflater
import android.view.View
@ -17,16 +19,13 @@ import com.idormy.sms.forwarder.utils.HttpServerUtils
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.SettingUtils
import com.idormy.sms.forwarder.utils.TASK_CONDITION_TO_ADDRESS
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
import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction
import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog
@ -37,7 +36,6 @@ class ToAddressFragment : BaseFragment<FragmentTasksConditionToAddressBinding?>(
private val TAG: String = ToAddressFragment::class.java.simpleName
var titleBar: TitleBar? = null
private var mCountDownHelper: CountDownButtonHelper? = null
@JvmField
@AutoWired(name = KEY_EVENT_DATA_CONDITION)
@ -65,18 +63,6 @@ class ToAddressFragment : BaseFragment<FragmentTasksConditionToAddressBinding?>(
* 初始化控件
*/
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)
}
})
binding!!.rgCalcType.setOnCheckedChangeListener { _, checkedId ->
if (checkedId == R.id.rb_calc_type_distance) {
binding!!.layoutCalcTypeDistance.visibility = View.VISIBLE
@ -85,35 +71,93 @@ class ToAddressFragment : BaseFragment<FragmentTasksConditionToAddressBinding?>(
binding!!.layoutCalcTypeDistance.visibility = View.GONE
binding!!.layoutCalcTypeAddress.visibility = View.VISIBLE
}
try {
checkSetting(true)
} catch (e: Exception) {
e.printStackTrace()
}
}
Log.d(TAG, "initViews eventData:$eventData")
if (eventData != null) {
val settingVo = Gson().fromJson(eventData, LocationSetting::class.java)
Log.d(TAG, "initViews settingVo:$settingVo")
binding!!.rgCalcType.check(settingVo.getCalcTypeCheckId())
binding!!.tvDescription.text = settingVo.description
binding!!.etLongitude.setText(settingVo.longitude.toString())
binding!!.etLatitude.setText(settingVo.latitude.toString())
binding!!.etDistance.setText(settingVo.distance.toString())
binding!!.etAddress.setText(settingVo.address)
binding!!.rgCalcType.check(settingVo.getCalcTypeCheckId())
}
}
@SuppressLint("SetTextI18n")
override fun initListeners() {
binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this)
binding!!.btnCurrentCoordinates.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)
binding!!.etLongitude.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable?) {
try {
val changedText = s.toString()
if (changedText.isEmpty()) {
binding!!.etLongitude.setText("0")
binding!!.etLongitude.setSelection(binding!!.etLongitude.text.length) // 将光标移至文本末尾
} else {
checkSetting(true)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
})
binding!!.etLatitude.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable?) {
try {
val changedText = s.toString()
if (changedText.isEmpty()) {
binding!!.etLatitude.setText("0")
binding!!.etLatitude.setSelection(binding!!.etLatitude.text.length) // 将光标移至文本末尾
} else {
checkSetting(true)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
})
binding!!.etDistance.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable?) {
try {
val changedText = s.toString()
if (changedText.isEmpty()) {
binding!!.etDistance.setText("1")
binding!!.etDistance.setSelection(binding!!.etDistance.text.length) // 将光标移至文本末尾
} else {
checkSetting(true)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
})
binding!!.etAddress.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable?) {
try {
checkSetting(true)
} catch (e: Exception) {
e.printStackTrace()
}
}
})
}
@SingleClick
@ -122,18 +166,12 @@ class ToAddressFragment : BaseFragment<FragmentTasksConditionToAddressBinding?>(
when (v.id) {
R.id.btn_current_coordinates -> {
if (!App.LocationClient.isStarted()) {
MaterialDialog.Builder(requireContext())
.iconRes(R.drawable.auto_task_icon_location)
.title(R.string.enable_location)
.content(R.string.enable_location_dialog)
.cancelable(false)
.positiveText(R.string.lab_yes)
.negativeText(R.string.lab_no).onPositive { _: MaterialDialog?, _: DialogAction? ->
SettingUtils.enableLocation = true
val serviceIntent = Intent(requireContext(), LocationService::class.java)
serviceIntent.action = "START"
requireContext().startService(serviceIntent)
}.show()
MaterialDialog.Builder(requireContext()).iconRes(R.drawable.auto_task_icon_location).title(R.string.enable_location).content(R.string.enable_location_dialog).cancelable(false).positiveText(R.string.lab_yes).negativeText(R.string.lab_no).onPositive { _: MaterialDialog?, _: DialogAction? ->
SettingUtils.enableLocation = true
val serviceIntent = Intent(requireContext(), LocationService::class.java)
serviceIntent.action = "START"
requireContext().startService(serviceIntent)
}.show()
return
}
@ -148,21 +186,6 @@ class ToAddressFragment : BaseFragment<FragmentTasksConditionToAddressBinding?>(
XToastUtils.success(String.format(getString(R.string.current_address), location.address), 30000)
}
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
@ -186,25 +209,36 @@ class ToAddressFragment : BaseFragment<FragmentTasksConditionToAddressBinding?>(
//检查设置
@SuppressLint("SetTextI18n")
private fun checkSetting(): LocationSetting {
private fun checkSetting(updateView: Boolean = false): LocationSetting {
val longitude = binding!!.etLongitude.text.toString().toDouble()
val latitude = binding!!.etLatitude.text.toString().toDouble()
val distance = binding!!.etDistance.text.toString().toDouble()
val address = binding!!.etAddress.text.toString()
var calcType = "distance"
if (binding!!.rbCalcTypeDistance.isChecked) {
if (latitude.isNaN() || longitude.isNaN() || distance.isNaN()) {
throw Exception(getString(R.string.calc_type_address_error))
val calcType = when (binding!!.rgCalcType.checkedRadioButtonId) {
R.id.rb_calc_type_distance -> {
Log.d(TAG, "longitude:$longitude latitude:$latitude distance:$distance")
if (latitude.isNaN() || longitude.isNaN() || distance.isNaN()) {
throw Exception(getString(R.string.calc_type_distance_error))
}
description = String.format(getString(R.string.to_address_distance_description), longitude, latitude, distance)
"distance"
}
description = String.format(getString(R.string.to_address_distance_description), longitude, latitude, distance)
} else if (binding!!.rbCalcTypeAddress.isChecked) {
if (address.isEmpty()) {
throw Exception(getString(R.string.calc_type_address_error))
else -> {
if (address.isEmpty()) {
throw Exception(getString(R.string.calc_type_address_error))
}
description = String.format(getString(R.string.to_address_keyword_description), address)
"address"
}
description = String.format(getString(R.string.to_address_keyword_description), address)
calcType = "address"
}
return LocationSetting(description, "to", calcType, longitude, latitude, distance, address)
val settingVo = LocationSetting(description, "to", calcType, longitude, latitude, distance, address)
if (updateView) {
binding!!.tvDescription.text = description
}
return settingVo
}
}

View File

@ -37,9 +37,18 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/battery_level_title"
android:text="@string/task_battery"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/task_battery_tips"
android:textSize="10sp"
tools:ignore="SmallSp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
@ -171,17 +180,6 @@
android:textSize="11sp"
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" />
<com.xuexiang.xui.widget.textview.supertextview.SuperButton
android:id="@+id/btn_test"
style="@style/SuperButton.Green.Icon"
android:layout_marginStart="10dp"
android:drawableStart="@drawable/icon_test"
android:paddingStart="15dp"
android:text="@string/test"
android:textSize="11sp"
android:visibility="gone"
tools:ignore="RtlSymmetry" />
</LinearLayout>
</LinearLayout>

View File

@ -37,9 +37,18 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/battery_status_title"
android:text="@string/task_charge"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/task_battery_tips"
android:textSize="10sp"
tools:ignore="SmallSp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
@ -47,52 +56,58 @@
android:layout_marginBottom="5dp"
android:background="?attr/xui_config_color_separator_light" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/battery_status_title"
android:textStyle="bold" />
<RadioGroup
android:id="@+id/rg_status"
style="@style/rg_style"
android:orientation="vertical"
android:paddingBottom="@dimen/config_padding_5dp">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rb_battery_charging"
style="@style/rg_rb_style_match"
style="@style/rg_rb_style"
android:checked="true"
android:gravity="center_vertical"
android:text="@string/battery_charging"
tools:ignore="TouchTargetSizeCheck" />
<RadioButton
android:id="@+id/rb_battery_discharging"
style="@style/rg_rb_style_match"
style="@style/rg_rb_style"
android:text="@string/battery_discharging"
tools:ignore="TouchTargetSizeCheck" />
<RadioButton
android:id="@+id/rb_battery_not_charging"
style="@style/rg_rb_style_match"
style="@style/rg_rb_style"
android:text="@string/battery_not_charging"
tools:ignore="TouchTargetSizeCheck" />
<RadioButton
android:id="@+id/rb_battery_full"
style="@style/rg_rb_style_match"
style="@style/rg_rb_style"
android:text="@string/battery_full"
tools:ignore="TouchTargetSizeCheck" />
<RadioButton
android:id="@+id/rb_battery_unknown"
style="@style/rg_rb_style_match"
style="@style/rg_rb_style"
android:text="@string/battery_unknown"
tools:ignore="TouchTargetSizeCheck,DuplicateSpeakableTextCheck" />
</RadioGroup>
</LinearLayout>
<LinearLayout
style="@style/taskBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:background="?attr/xui_config_color_separator_light" />
<TextView
android:layout_width="match_parent"
@ -100,41 +115,34 @@
android:text="@string/battery_plugged_title"
android:textStyle="bold" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:background="?attr/xui_config_color_separator_light" />
<RadioGroup
android:id="@+id/rg_plugged"
style="@style/rg_style"
android:orientation="vertical"
android:paddingBottom="@dimen/config_padding_5dp">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rb_plugged_ac"
style="@style/rg_rb_style_match"
style="@style/rg_rb_style"
android:checked="true"
android:text="@string/battery_ac"
tools:ignore="TouchTargetSizeCheck" />
<RadioButton
android:id="@+id/rb_plugged_usb"
style="@style/rg_rb_style_match"
style="@style/rg_rb_style"
android:text="@string/battery_usb"
tools:ignore="TouchTargetSizeCheck" />
<RadioButton
android:id="@+id/rb_plugged_wireless"
style="@style/rg_rb_style_match"
style="@style/rg_rb_style"
android:text="@string/battery_wireless"
tools:ignore="TouchTargetSizeCheck" />
<RadioButton
android:id="@+id/rb_plugged_unknown"
style="@style/rg_rb_style_match"
style="@style/rg_rb_style"
android:text="@string/battery_unknown"
tools:ignore="TouchTargetSizeCheck" />
@ -172,17 +180,6 @@
android:textSize="11sp"
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" />
<com.xuexiang.xui.widget.textview.supertextview.SuperButton
android:id="@+id/btn_test"
style="@style/SuperButton.Green.Icon"
android:layout_marginStart="10dp"
android:drawableStart="@drawable/icon_test"
android:paddingStart="15dp"
android:text="@string/test"
android:textSize="11sp"
android:visibility="gone"
tools:ignore="RtlSymmetry" />
</LinearLayout>
</LinearLayout>

View File

@ -37,13 +37,15 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/cron_expression"
android:text="@string/task_cron"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/cron_expression_tips"
android:text="@string/task_cron_tips"
android:textSize="10sp"
tools:ignore="SmallSp" />

View File

@ -38,8 +38,17 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/task_leave_address"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/task_leave_address_tips"
android:textSize="10sp"
tools:ignore="SmallSp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
@ -240,17 +249,6 @@
android:textSize="11sp"
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" />
<com.xuexiang.xui.widget.textview.supertextview.SuperButton
android:id="@+id/btn_test"
style="@style/SuperButton.Green.Icon"
android:layout_marginStart="10dp"
android:drawableStart="@drawable/icon_test"
android:paddingStart="15dp"
android:text="@string/test"
android:textSize="11sp"
android:visibility="gone"
tools:ignore="RtlSymmetry" />
</LinearLayout>
</LinearLayout>

View File

@ -38,8 +38,17 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/task_lock_screen"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/task_lock_screen_tips"
android:textSize="10sp"
tools:ignore="SmallSp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
@ -135,17 +144,6 @@
android:textSize="11sp"
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" />
<com.xuexiang.xui.widget.textview.supertextview.SuperButton
android:id="@+id/btn_test"
style="@style/SuperButton.Green.Icon"
android:layout_marginStart="10dp"
android:drawableStart="@drawable/icon_test"
android:paddingStart="15dp"
android:text="@string/test"
android:textSize="11sp"
android:visibility="gone"
tools:ignore="RtlSymmetry" />
</LinearLayout>
</LinearLayout>

View File

@ -38,8 +38,17 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/task_network"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/task_network_tips"
android:textSize="10sp"
tools:ignore="SmallSp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
@ -198,17 +207,6 @@
android:textSize="11sp"
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" />
<com.xuexiang.xui.widget.textview.supertextview.SuperButton
android:id="@+id/btn_test"
style="@style/SuperButton.Green.Icon"
android:layout_marginStart="10dp"
android:drawableStart="@drawable/icon_test"
android:paddingStart="15dp"
android:text="@string/test"
android:textSize="11sp"
android:visibility="gone"
tools:ignore="RtlSymmetry" />
</LinearLayout>
</LinearLayout>

View File

@ -38,8 +38,17 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/task_sim"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/task_sim_tips"
android:textSize="10sp"
tools:ignore="SmallSp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
@ -106,17 +115,6 @@
android:textSize="11sp"
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" />
<com.xuexiang.xui.widget.textview.supertextview.SuperButton
android:id="@+id/btn_test"
style="@style/SuperButton.Green.Icon"
android:layout_marginStart="10dp"
android:drawableStart="@drawable/icon_test"
android:paddingStart="15dp"
android:text="@string/test"
android:textSize="11sp"
android:visibility="gone"
tools:ignore="RtlSymmetry" />
</LinearLayout>
</LinearLayout>

View File

@ -38,8 +38,17 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/task_to_address"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/task_to_address_tips"
android:textSize="10sp"
tools:ignore="SmallSp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
@ -240,17 +249,6 @@
android:textSize="11sp"
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" />
<com.xuexiang.xui.widget.textview.supertextview.SuperButton
android:id="@+id/btn_test"
style="@style/SuperButton.Green.Icon"
android:layout_marginStart="10dp"
android:drawableStart="@drawable/icon_test"
android:paddingStart="15dp"
android:text="@string/test"
android:textSize="11sp"
android:visibility="gone"
tools:ignore="RtlSymmetry" />
</LinearLayout>
</LinearLayout>

View File

@ -1129,13 +1129,21 @@
<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_cron_tips">Quartz Cron Expression</string>
<string name="task_to_address">To Address</string>
<string name="task_to_address_tips">Using latitude and longitude coordinates (WGS-84).</string>
<string name="task_leave_address">Leave Address</string>
<string name="task_leave_address_tips">Using latitude and longitude coordinates (WGS-84).</string>
<string name="task_network">Network</string>
<string name="task_network_tips">Trigger upon network status change.</string>
<string name="task_sim">SIM Status</string>
<string name="task_sim_tips">Trigger upon SIM Status change.</string>
<string name="task_battery">Battery</string>
<string name="task_battery_tips">Trigger when battery level meets condition.</string>
<string name="task_charge">Charge</string>
<string name="task_charge_tips">Trigger when charge status meets condition.</string>
<string name="task_lock_screen">Screen Off/On</string>
<string name="task_lock_screen_tips">Trigger upon screen lock/unlock instantly or after a set time.</string>
<string name="task_sendsms">Send Sms</string>
<string name="task_notification">Notification</string>
<string name="task_frpc">Frpc Setting</string>
@ -1149,7 +1157,6 @@
<string name="week">Week</string>
<string name="year">Year</string>
<string name="cron_expression">Cron Expression</string>
<string name="cron_expression_tips">Quartz Cron Expression</string>
<string name="every_second">Every Second</string>
<string name="every_minute">Every Minute</string>
<string name="every_hour">Every Hour</string>
@ -1201,9 +1208,9 @@
<string name="discharged_to">Discharged to the specified battery level</string>
<string name="charged_to">Charged to the specified battery level</string>
<string name="battery_discharged_to">The battery discharged to %s%%</string>
<string name="battery_discharged_below">"The battery discharged below %s%%</string>
<string name="battery_discharged_below">"The battery discharged below %s%%, keep reminding</string>
<string name="battery_charged_to">The battery charged to %s%%</string>
<string name="battery_charged_above">The battery charged above %s%%</string>
<string name="battery_charged_above">The battery charged above %s%%, keep reminding</string>
<string name="sim_state">SIM State%s</string>
<string name="sim_state_absent">Absent</string>

View File

@ -1130,13 +1130,21 @@
<string name="select_task_action">请选择动作</string>
<string name="bottom_sheet_close">关 闭</string>
<string name="task_cron">定时任务</string>
<string name="task_cron_tips">采用 Quartz Cron 表达式</string>
<string name="task_to_address">到达地点</string>
<string name="task_to_address_tips">采用经纬度坐标WGS-84坐标系</string>
<string name="task_leave_address">离开地点</string>
<string name="task_leave_address_tips">采用经纬度坐标WGS-84坐标系</string>
<string name="task_network">网络状态</string>
<string name="task_network_tips">当网络状态改变时触发</string>
<string name="task_sim">SIM卡状态</string>
<string name="task_sim_tips">当SIM卡状态改变时触发</string>
<string name="task_battery">电量使用</string>
<string name="task_battery_tips">当剩余电量满足条件时触发</string>
<string name="task_charge">充电状态</string>
<string name="task_charge_tips">当充电状态满足条件时触发</string>
<string name="task_lock_screen">锁屏解锁</string>
<string name="task_lock_screen_tips">在屏幕锁定或解锁后立即或指定时间触发</string>
<string name="task_sendsms">发送短信</string>
<string name="task_notification">通道推送</string>
<string name="task_frpc">Frpc设置</string>
@ -1150,7 +1158,6 @@
<string name="week"></string>
<string name="year"></string>
<string name="cron_expression">Cron表达式</string>
<string name="cron_expression_tips">采用 Quartz Cron 表达式</string>
<string name="every_second">每秒钟</string>
<string name="every_minute">每分钟</string>
<string name="every_hour">每小时</string>
@ -1202,9 +1209,9 @@
<string name="discharged_to">放电到指定电量</string>
<string name="charged_to">充电到指定电量</string>
<string name="battery_discharged_to">电池放电低到%s%%</string>
<string name="battery_discharged_below">电池放电低于%s%%</string>
<string name="battery_discharged_below">电池放电低于%s%%, 持续提醒</string>
<string name="battery_charged_to">电池充电达到%s%%</string>
<string name="battery_charged_above">电池充电高于%s%%</string>
<string name="battery_charged_above">电池充电高于%s%%, 持续提醒</string>
<string name="sim_state">SIM卡状态%s</string>
<string name="sim_state_absent">被移除</string>