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

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_DATA_CONDITION
import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_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_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.TASK_CONDITION_BATTERY
import com.idormy.sms.forwarder.utils.XToastUtils import com.idormy.sms.forwarder.utils.XToastUtils
import com.jeremyliao.liveeventbus.LiveEventBus
import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.annotation.Page
import com.xuexiang.xrouter.annotation.AutoWired import com.xuexiang.xrouter.annotation.AutoWired
import com.xuexiang.xrouter.launcher.XRouter import com.xuexiang.xrouter.launcher.XRouter
import com.xuexiang.xui.utils.CountDownButtonHelper
import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.actionbar.TitleBar
@Page(name = "Battery") @Page(name = "Battery")
@ -32,7 +29,6 @@ class BatteryFragment : BaseFragment<FragmentTasksConditionBatteryBinding?>(), V
private val TAG: String = BatteryFragment::class.java.simpleName private val TAG: String = BatteryFragment::class.java.simpleName
var titleBar: TitleBar? = null var titleBar: TitleBar? = null
private var mCountDownHelper: CountDownButtonHelper? = null
@JvmField @JvmField
@AutoWired(name = KEY_EVENT_DATA_CONDITION) @AutoWired(name = KEY_EVENT_DATA_CONDITION)
@ -60,18 +56,6 @@ class BatteryFragment : BaseFragment<FragmentTasksConditionBatteryBinding?>(), V
* 初始化控件 * 初始化控件
*/ */
override fun initViews() { 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 -> binding!!.rgStatus.setOnCheckedChangeListener { _, checkedId ->
if (checkedId == R.id.rb_battery_discharging) { if (checkedId == R.id.rb_battery_discharging) {
binding!!.xsbLevelMin.visibility = View.VISIBLE binding!!.xsbLevelMin.visibility = View.VISIBLE
@ -80,16 +64,18 @@ class BatteryFragment : BaseFragment<FragmentTasksConditionBatteryBinding?>(), V
binding!!.xsbLevelMin.visibility = View.GONE binding!!.xsbLevelMin.visibility = View.GONE
binding!!.xsbLevelMax.visibility = View.VISIBLE binding!!.xsbLevelMax.visibility = View.VISIBLE
} }
checkSetting(true)
} }
Log.d(TAG, "initViews eventData:$eventData") Log.d(TAG, "initViews eventData:$eventData")
if (eventData != null) { if (eventData != null) {
val settingVo = Gson().fromJson(eventData, BatterySetting::class.java) val settingVo = Gson().fromJson(eventData, BatterySetting::class.java)
Log.d(TAG, "initViews settingVo:$settingVo") Log.d(TAG, "initViews settingVo:$settingVo")
binding!!.rgStatus.check(settingVo.getStatusCheckId()) binding!!.tvDescription.text = settingVo.description
binding!!.xsbLevelMin.setDefaultValue(settingVo.levelMin) binding!!.xsbLevelMin.setDefaultValue(settingVo.levelMin)
binding!!.xsbLevelMax.setDefaultValue(settingVo.levelMax) binding!!.xsbLevelMax.setDefaultValue(settingVo.levelMax)
binding!!.sbKeepReminding.isChecked = settingVo.keepReminding binding!!.sbKeepReminding.isChecked = settingVo.keepReminding
binding!!.rgStatus.check(settingVo.getStatusCheckId())
} else { } else {
binding!!.xsbLevelMin.setDefaultValue(10) binding!!.xsbLevelMin.setDefaultValue(10)
binding!!.xsbLevelMax.setDefaultValue(90) binding!!.xsbLevelMax.setDefaultValue(90)
@ -98,17 +84,16 @@ class BatteryFragment : BaseFragment<FragmentTasksConditionBatteryBinding?>(), V
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
override fun initListeners() { override fun initListeners() {
binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this) binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this) binding!!.btnSave.setOnClickListener(this)
LiveEventBus.get(KEY_TEST_CONDITION, String::class.java).observe(this) { binding!!.xsbLevelMin.setOnSeekBarListener { _, _ ->
mCountDownHelper?.finish() checkSetting(true)
}
if (it == "success") { binding!!.xsbLevelMax.setOnSeekBarListener { _, _ ->
XToastUtils.success("测试通过", 30000) checkSetting(true)
} else { }
XToastUtils.error(it, 30000) binding!!.sbKeepReminding.setOnCheckedChangeListener { _, _ ->
} checkSetting(true)
} }
} }
@ -116,20 +101,6 @@ class BatteryFragment : BaseFragment<FragmentTasksConditionBatteryBinding?>(), V
override fun onClick(v: View) { override fun onClick(v: View) {
try { try {
when (v.id) { 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 -> { R.id.btn_del -> {
popToBack() popToBack()
@ -154,26 +125,34 @@ class BatteryFragment : BaseFragment<FragmentTasksConditionBatteryBinding?>(), V
//检查设置 //检查设置
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
private fun checkSetting(): BatterySetting { private fun checkSetting(updateView: Boolean = false): BatterySetting {
val levelMin = binding!!.xsbLevelMin.selectedNumber val levelMin = binding!!.xsbLevelMin.selectedNumber
val levelMax = binding!!.xsbLevelMax.selectedNumber val levelMax = binding!!.xsbLevelMax.selectedNumber
val keepReminding = binding!!.sbKeepReminding.isChecked val keepReminding = binding!!.sbKeepReminding.isChecked
val status: Int val status: Int = when (binding!!.rgStatus.checkedRadioButtonId) {
if (binding!!.rgStatus.checkedRadioButtonId == R.id.rb_battery_discharging) { R.id.rb_battery_discharging -> {
status = BatteryManager.BATTERY_STATUS_DISCHARGING description = if (keepReminding) {
description = if (keepReminding) { String.format(getString(R.string.battery_discharged_below), levelMin.toString())
String.format(getString(R.string.battery_discharged_below), levelMin.toString()) } else {
} else { String.format(getString(R.string.battery_discharged_to), levelMin.toString())
String.format(getString(R.string.battery_discharged_to), levelMin.toString()) }
BatteryManager.BATTERY_STATUS_DISCHARGING
} }
} else {
status = BatteryManager.BATTERY_STATUS_CHARGING else -> {
description = if (keepReminding) { description = if (keepReminding) {
String.format(getString(R.string.battery_charged_above), levelMax.toString()) String.format(getString(R.string.battery_charged_above), levelMax.toString())
} else { } else {
String.format(getString(R.string.battery_charged_to), levelMax.toString()) 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) 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_DATA_CONDITION
import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_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_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.TASK_CONDITION_CHARGE
import com.idormy.sms.forwarder.utils.XToastUtils import com.idormy.sms.forwarder.utils.XToastUtils
import com.jeremyliao.liveeventbus.LiveEventBus
import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.annotation.Page
import com.xuexiang.xrouter.annotation.AutoWired import com.xuexiang.xrouter.annotation.AutoWired
import com.xuexiang.xrouter.launcher.XRouter import com.xuexiang.xrouter.launcher.XRouter
import com.xuexiang.xui.utils.CountDownButtonHelper
import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.actionbar.TitleBar
@Page(name = "Charge") @Page(name = "Charge")
@ -31,7 +28,6 @@ class ChargeFragment : BaseFragment<FragmentTasksConditionChargeBinding?>(), Vie
private val TAG: String = ChargeFragment::class.java.simpleName private val TAG: String = ChargeFragment::class.java.simpleName
var titleBar: TitleBar? = null var titleBar: TitleBar? = null
private var mCountDownHelper: CountDownButtonHelper? = null
@JvmField @JvmField
@AutoWired(name = KEY_EVENT_DATA_CONDITION) @AutoWired(name = KEY_EVENT_DATA_CONDITION)
@ -57,22 +53,11 @@ class ChargeFragment : BaseFragment<FragmentTasksConditionChargeBinding?>(), Vie
* 初始化控件 * 初始化控件
*/ */
override fun initViews() { 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") Log.d(TAG, "initViews eventData:$eventData")
if (eventData != null) { if (eventData != null) {
val settingVo = Gson().fromJson(eventData, ChargeSetting::class.java) val settingVo = Gson().fromJson(eventData, ChargeSetting::class.java)
Log.d(TAG, "initViews settingVo:$settingVo") Log.d(TAG, "initViews settingVo:$settingVo")
binding!!.tvDescription.text = settingVo.description
binding!!.rgStatus.check(settingVo.getStatusCheckId()) binding!!.rgStatus.check(settingVo.getStatusCheckId())
binding!!.rgPlugged.check(settingVo.getPluggedCheckId()) binding!!.rgPlugged.check(settingVo.getPluggedCheckId())
} }
@ -80,17 +65,13 @@ class ChargeFragment : BaseFragment<FragmentTasksConditionChargeBinding?>(), Vie
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
override fun initListeners() { override fun initListeners() {
binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this) binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this) binding!!.btnSave.setOnClickListener(this)
LiveEventBus.get(KEY_TEST_CONDITION, String::class.java).observe(this) { binding!!.rgStatus.setOnCheckedChangeListener { _, _ ->
mCountDownHelper?.finish() checkSetting(true)
}
if (it == "success") { binding!!.rgPlugged.setOnCheckedChangeListener { _, _ ->
XToastUtils.success("测试通过", 30000) checkSetting(true)
} else {
XToastUtils.error(it, 30000)
}
} }
} }
@ -98,20 +79,6 @@ class ChargeFragment : BaseFragment<FragmentTasksConditionChargeBinding?>(), Vie
override fun onClick(v: View) { override fun onClick(v: View) {
try { try {
when (v.id) { 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 -> { R.id.btn_del -> {
popToBack() 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 statusCheckId = binding!!.rgStatus.checkedRadioButtonId
val pluggedCheckId = binding!!.rgPlugged.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") Log.d(TAG, "initViews eventData:$eventData")
if (eventData != null) { if (eventData != null) {
val settingVo = Gson().fromJson(eventData, CronSetting::class.java) val settingVo = Gson().fromJson(eventData, CronSetting::class.java)
binding!!.tvDescription.text = settingVo.description
expression = settingVo.expression expression = settingVo.expression
Log.d(TAG, "initViews expression:$expression") Log.d(TAG, "initViews expression:$expression")
@ -159,6 +160,7 @@ class CronFragment : BaseFragment<FragmentTasksConditionCronBinding?>(), View.On
nextTimeList.add(dateFormat.format(nextDate)) nextTimeList.add(dateFormat.format(nextDate))
times++ times++
} }
binding!!.tvDescription.text = description
binding!!.tvCronExpressionCheckTips.text = "$expression\n$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.text = String.format(getString(R.string.next_execution_times), times.toString(), nextTimeList.joinToString("\n"))
binding!!.tvNextTimeList.visibility = View.VISIBLE binding!!.tvNextTimeList.visibility = View.VISIBLE
@ -235,13 +237,6 @@ class CronFragment : BaseFragment<FragmentTasksConditionCronBinding?>(), View.On
afterSecondChanged() 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) binding!!.etSecond.setText(second)
afterSecondChanged() afterSecondChanged()
@ -405,13 +400,6 @@ class CronFragment : BaseFragment<FragmentTasksConditionCronBinding?>(), View.On
afterMinuteChanged() 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) binding!!.etMinute.setText(minute)
afterMinuteChanged() afterMinuteChanged()
@ -575,13 +563,6 @@ class CronFragment : BaseFragment<FragmentTasksConditionCronBinding?>(), View.On
afterHourChanged() 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) binding!!.etHour.setText(hour)
afterHourChanged() afterHourChanged()
@ -745,13 +726,6 @@ class CronFragment : BaseFragment<FragmentTasksConditionCronBinding?>(), View.On
afterDayChanged() 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) binding!!.etDay.setText(day)
afterDayChanged() afterDayChanged()
@ -961,13 +935,6 @@ class CronFragment : BaseFragment<FragmentTasksConditionCronBinding?>(), View.On
afterMonthChanged() 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) binding!!.etMonth.setText(month)
afterMonthChanged() afterMonthChanged()
@ -1130,13 +1097,6 @@ class CronFragment : BaseFragment<FragmentTasksConditionCronBinding?>(), View.On
afterWeekChanged() 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) binding!!.etWeek.setText(week)
afterWeekChanged() afterWeekChanged()
@ -1346,13 +1306,6 @@ class CronFragment : BaseFragment<FragmentTasksConditionCronBinding?>(), View.On
afterYearChanged() 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) binding!!.etYear.setText(year)
afterYearChanged() afterYearChanged()

View File

@ -2,6 +2,8 @@ package com.idormy.sms.forwarder.fragment.condition
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.text.Editable
import android.text.TextWatcher
import android.util.Log import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View 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_DATA_CONDITION
import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_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_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.SettingUtils
import com.idormy.sms.forwarder.utils.TASK_CONDITION_LEAVE_ADDRESS import com.idormy.sms.forwarder.utils.TASK_CONDITION_LEAVE_ADDRESS
import com.idormy.sms.forwarder.utils.XToastUtils import com.idormy.sms.forwarder.utils.XToastUtils
import com.jeremyliao.liveeventbus.LiveEventBus
import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.annotation.Page
import com.xuexiang.xrouter.annotation.AutoWired import com.xuexiang.xrouter.annotation.AutoWired
import com.xuexiang.xrouter.launcher.XRouter import com.xuexiang.xrouter.launcher.XRouter
import com.xuexiang.xui.utils.CountDownButtonHelper
import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.actionbar.TitleBar
import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction
import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog
@ -37,7 +36,6 @@ class LeaveAddressFragment : BaseFragment<FragmentTasksConditionLeaveAddressBind
private val TAG: String = LeaveAddressFragment::class.java.simpleName private val TAG: String = LeaveAddressFragment::class.java.simpleName
var titleBar: TitleBar? = null var titleBar: TitleBar? = null
private var mCountDownHelper: CountDownButtonHelper? = null
@JvmField @JvmField
@AutoWired(name = KEY_EVENT_DATA_CONDITION) @AutoWired(name = KEY_EVENT_DATA_CONDITION)
@ -65,18 +63,6 @@ class LeaveAddressFragment : BaseFragment<FragmentTasksConditionLeaveAddressBind
* 初始化控件 * 初始化控件
*/ */
override fun initViews() { 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 -> binding!!.rgCalcType.setOnCheckedChangeListener { _, checkedId ->
if (checkedId == R.id.rb_calc_type_distance) { if (checkedId == R.id.rb_calc_type_distance) {
binding!!.layoutCalcTypeDistance.visibility = View.VISIBLE binding!!.layoutCalcTypeDistance.visibility = View.VISIBLE
@ -85,35 +71,93 @@ class LeaveAddressFragment : BaseFragment<FragmentTasksConditionLeaveAddressBind
binding!!.layoutCalcTypeDistance.visibility = View.GONE binding!!.layoutCalcTypeDistance.visibility = View.GONE
binding!!.layoutCalcTypeAddress.visibility = View.VISIBLE binding!!.layoutCalcTypeAddress.visibility = View.VISIBLE
} }
try {
checkSetting(true)
} catch (e: Exception) {
e.printStackTrace()
}
} }
Log.d(TAG, "initViews eventData:$eventData") Log.d(TAG, "initViews eventData:$eventData")
if (eventData != null) { if (eventData != null) {
val settingVo = Gson().fromJson(eventData, LocationSetting::class.java) val settingVo = Gson().fromJson(eventData, LocationSetting::class.java)
Log.d(TAG, "initViews settingVo:$settingVo") Log.d(TAG, "initViews settingVo:$settingVo")
binding!!.rgCalcType.check(settingVo.getCalcTypeCheckId()) binding!!.tvDescription.text = settingVo.description
binding!!.etLongitude.setText(settingVo.longitude.toString()) binding!!.etLongitude.setText(settingVo.longitude.toString())
binding!!.etLatitude.setText(settingVo.latitude.toString()) binding!!.etLatitude.setText(settingVo.latitude.toString())
binding!!.etDistance.setText(settingVo.distance.toString()) binding!!.etDistance.setText(settingVo.distance.toString())
binding!!.etAddress.setText(settingVo.address) binding!!.etAddress.setText(settingVo.address)
binding!!.rgCalcType.check(settingVo.getCalcTypeCheckId())
} }
} }
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
override fun initListeners() { override fun initListeners() {
binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this) binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this) binding!!.btnSave.setOnClickListener(this)
binding!!.btnCurrentCoordinates.setOnClickListener(this) binding!!.btnCurrentCoordinates.setOnClickListener(this)
LiveEventBus.get(KEY_TEST_CONDITION, String::class.java).observe(this) { binding!!.etLongitude.addTextChangedListener(object : TextWatcher {
mCountDownHelper?.finish() override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
if (it == "success") { override fun afterTextChanged(s: Editable?) {
XToastUtils.success("测试通过", 30000) try {
} else { val changedText = s.toString()
XToastUtils.error(it, 30000) 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 @SingleClick
@ -122,18 +166,12 @@ class LeaveAddressFragment : BaseFragment<FragmentTasksConditionLeaveAddressBind
when (v.id) { when (v.id) {
R.id.btn_current_coordinates -> { R.id.btn_current_coordinates -> {
if (!App.LocationClient.isStarted()) { if (!App.LocationClient.isStarted()) {
MaterialDialog.Builder(requireContext()) 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? ->
.iconRes(R.drawable.auto_task_icon_location) SettingUtils.enableLocation = true
.title(R.string.enable_location) val serviceIntent = Intent(requireContext(), LocationService::class.java)
.content(R.string.enable_location_dialog) serviceIntent.action = "START"
.cancelable(false) requireContext().startService(serviceIntent)
.positiveText(R.string.lab_yes) }.show()
.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 return
} }
@ -148,21 +186,6 @@ class LeaveAddressFragment : BaseFragment<FragmentTasksConditionLeaveAddressBind
XToastUtils.success(String.format(getString(R.string.current_address), location.address), 30000) 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 -> { R.id.btn_del -> {
popToBack() popToBack()
return return
@ -186,25 +209,36 @@ class LeaveAddressFragment : BaseFragment<FragmentTasksConditionLeaveAddressBind
//检查设置 //检查设置
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
private fun checkSetting(): LocationSetting { private fun checkSetting(updateView: Boolean = false): LocationSetting {
val longitude = binding!!.etLongitude.text.toString().toDouble() val longitude = binding!!.etLongitude.text.toString().toDouble()
val latitude = binding!!.etLatitude.text.toString().toDouble() val latitude = binding!!.etLatitude.text.toString().toDouble()
val distance = binding!!.etDistance.text.toString().toDouble() val distance = binding!!.etDistance.text.toString().toDouble()
val address = binding!!.etAddress.text.toString() val address = binding!!.etAddress.text.toString()
var calcType = "distance" val calcType = when (binding!!.rgCalcType.checkedRadioButtonId) {
if (binding!!.rbCalcTypeDistance.isChecked) { R.id.rb_calc_type_distance -> {
if (latitude.isNaN() || longitude.isNaN() || distance.isNaN()) { Log.d(TAG, "longitude:$longitude latitude:$latitude distance:$distance")
throw Exception(getString(R.string.calc_type_address_error)) 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) { else -> {
if (address.isEmpty()) { if (address.isEmpty()) {
throw Exception(getString(R.string.calc_type_address_error)) 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_DATA_CONDITION
import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_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_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.TASK_CONDITION_LOCK_SCREEN
import com.idormy.sms.forwarder.utils.XToastUtils import com.idormy.sms.forwarder.utils.XToastUtils
import com.jeremyliao.liveeventbus.LiveEventBus
import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.annotation.Page
import com.xuexiang.xrouter.annotation.AutoWired import com.xuexiang.xrouter.annotation.AutoWired
import com.xuexiang.xrouter.launcher.XRouter import com.xuexiang.xrouter.launcher.XRouter
import com.xuexiang.xui.utils.CountDownButtonHelper
import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.actionbar.TitleBar
@Page(name = "LockScreen") @Page(name = "LockScreen")
@ -31,7 +28,6 @@ class LockScreenFragment : BaseFragment<FragmentTasksConditionLockScreenBinding?
private val TAG: String = LockScreenFragment::class.java.simpleName private val TAG: String = LockScreenFragment::class.java.simpleName
var titleBar: TitleBar? = null var titleBar: TitleBar? = null
private var mCountDownHelper: CountDownButtonHelper? = null
@JvmField @JvmField
@AutoWired(name = KEY_EVENT_DATA_CONDITION) @AutoWired(name = KEY_EVENT_DATA_CONDITION)
@ -57,18 +53,6 @@ class LockScreenFragment : BaseFragment<FragmentTasksConditionLockScreenBinding?
* 初始化控件 * 初始化控件
*/ */
override fun initViews() { 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 -> binding!!.rgAction.setOnCheckedChangeListener { _, checkedId ->
if (checkedId == R.id.rb_action_screen_off) { if (checkedId == R.id.rb_action_screen_off) {
binding!!.xsbTimeAfterScreenOff.visibility = View.VISIBLE binding!!.xsbTimeAfterScreenOff.visibility = View.VISIBLE
@ -77,15 +61,17 @@ class LockScreenFragment : BaseFragment<FragmentTasksConditionLockScreenBinding?
binding!!.xsbTimeAfterScreenOff.visibility = View.GONE binding!!.xsbTimeAfterScreenOff.visibility = View.GONE
binding!!.xsbTimeAfterScreenOn.visibility = View.VISIBLE binding!!.xsbTimeAfterScreenOn.visibility = View.VISIBLE
} }
checkSetting(true)
} }
Log.d(TAG, "initViews eventData:$eventData") Log.d(TAG, "initViews eventData:$eventData")
if (eventData != null) { if (eventData != null) {
val settingVo = Gson().fromJson(eventData, LockScreenSetting::class.java) val settingVo = Gson().fromJson(eventData, LockScreenSetting::class.java)
Log.d(TAG, "initViews settingVo:$settingVo") Log.d(TAG, "initViews settingVo:$settingVo")
binding!!.rgAction.check(settingVo.getActionCheckId()) binding!!.tvDescription.text = settingVo.description
binding!!.xsbTimeAfterScreenOff.setDefaultValue(settingVo.timeAfterScreenOff) binding!!.xsbTimeAfterScreenOff.setDefaultValue(settingVo.timeAfterScreenOff)
binding!!.xsbTimeAfterScreenOn.setDefaultValue(settingVo.timeAfterScreenOn) binding!!.xsbTimeAfterScreenOn.setDefaultValue(settingVo.timeAfterScreenOn)
binding!!.rgAction.check(settingVo.getActionCheckId())
} else { } else {
binding!!.xsbTimeAfterScreenOff.setDefaultValue(0) binding!!.xsbTimeAfterScreenOff.setDefaultValue(0)
binding!!.xsbTimeAfterScreenOn.setDefaultValue(0) binding!!.xsbTimeAfterScreenOn.setDefaultValue(0)
@ -94,17 +80,13 @@ class LockScreenFragment : BaseFragment<FragmentTasksConditionLockScreenBinding?
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
override fun initListeners() { override fun initListeners() {
binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this) binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this) binding!!.btnSave.setOnClickListener(this)
LiveEventBus.get(KEY_TEST_CONDITION, String::class.java).observe(this) { binding!!.xsbTimeAfterScreenOff.setOnSeekBarListener { _, _ ->
mCountDownHelper?.finish() checkSetting(true)
}
if (it == "success") { binding!!.xsbTimeAfterScreenOn.setOnSeekBarListener { _, _ ->
XToastUtils.success("测试通过", 30000) checkSetting(true)
} else {
XToastUtils.error(it, 30000)
}
} }
} }
@ -112,20 +94,6 @@ class LockScreenFragment : BaseFragment<FragmentTasksConditionLockScreenBinding?
override fun onClick(v: View) { override fun onClick(v: View) {
try { try {
when (v.id) { 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 -> { R.id.btn_del -> {
popToBack() popToBack()
@ -150,10 +118,16 @@ class LockScreenFragment : BaseFragment<FragmentTasksConditionLockScreenBinding?
//检查设置 //检查设置
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
private fun checkSetting(): LockScreenSetting { private fun checkSetting(updateView: Boolean = false): LockScreenSetting {
val actionCheckId = binding!!.rgAction.checkedRadioButtonId val actionCheckId = binding!!.rgAction.checkedRadioButtonId
val timeAfterScreenOff = binding!!.xsbTimeAfterScreenOff.selectedNumber val timeAfterScreenOff = binding!!.xsbTimeAfterScreenOff.selectedNumber
val timeAfterScreenOn = binding!!.xsbTimeAfterScreenOn.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.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.text.Editable
import android.text.TextWatcher
import android.util.Log import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View 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_DATA_CONDITION
import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_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_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.TASK_CONDITION_NETWORK
import com.idormy.sms.forwarder.utils.XToastUtils import com.idormy.sms.forwarder.utils.XToastUtils
import com.jeremyliao.liveeventbus.LiveEventBus
import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.annotation.Page
import com.xuexiang.xrouter.annotation.AutoWired import com.xuexiang.xrouter.annotation.AutoWired
import com.xuexiang.xrouter.launcher.XRouter import com.xuexiang.xrouter.launcher.XRouter
import com.xuexiang.xui.utils.CountDownButtonHelper
import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.actionbar.TitleBar
@Page(name = "Network") @Page(name = "Network")
@ -31,7 +30,6 @@ class NetworkFragment : BaseFragment<FragmentTasksConditionNetworkBinding?>(), V
private val TAG: String = NetworkFragment::class.java.simpleName private val TAG: String = NetworkFragment::class.java.simpleName
var titleBar: TitleBar? = null var titleBar: TitleBar? = null
private var mCountDownHelper: CountDownButtonHelper? = null
@JvmField @JvmField
@AutoWired(name = KEY_EVENT_DATA_CONDITION) @AutoWired(name = KEY_EVENT_DATA_CONDITION)
@ -57,68 +55,45 @@ class NetworkFragment : BaseFragment<FragmentTasksConditionNetworkBinding?>(), V
* 初始化控件 * 初始化控件
*/ */
override fun initViews() { 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 -> binding!!.rgNetworkState.setOnCheckedChangeListener { _, checkedId ->
Log.d(TAG, "rgNetworkState checkedId:$checkedId") Log.d(TAG, "rgNetworkState checkedId:$checkedId")
binding!!.layoutDataSimSlot.visibility = if (checkedId == R.id.rb_net_mobile) View.VISIBLE else View.GONE 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 binding!!.layoutWifiSsid.visibility = if (checkedId == R.id.rb_net_wifi) View.VISIBLE else View.GONE
checkSetting(true)
} }
Log.d(TAG, "initViews eventData:$eventData") Log.d(TAG, "initViews eventData:$eventData")
if (eventData != null) { if (eventData != null) {
val settingVo = Gson().fromJson(eventData, NetworkSetting::class.java) val settingVo = Gson().fromJson(eventData, NetworkSetting::class.java)
Log.d(TAG, "initViews settingVo:$settingVo") Log.d(TAG, "initViews settingVo:$settingVo")
binding!!.rgNetworkState.check(settingVo.getNetworkStateCheckId()) binding!!.tvDescription.text = settingVo.description
binding!!.rgDataSimSlot.check(settingVo.getDataSimSlotCheckId()) binding!!.rgDataSimSlot.check(settingVo.getDataSimSlotCheckId())
binding!!.etWifiSsid.setText(settingVo.wifiSsid) binding!!.etWifiSsid.setText(settingVo.wifiSsid)
binding!!.rgNetworkState.check(settingVo.getNetworkStateCheckId())
} }
} }
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
override fun initListeners() { override fun initListeners() {
binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this) binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this) binding!!.btnSave.setOnClickListener(this)
LiveEventBus.get(KEY_TEST_CONDITION, String::class.java).observe(this) { binding!!.rgDataSimSlot.setOnCheckedChangeListener { _, _ ->
mCountDownHelper?.finish() checkSetting(true)
if (it == "success") {
XToastUtils.success("测试通过", 30000)
} else {
XToastUtils.error(it, 30000)
}
} }
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 @SingleClick
override fun onClick(v: View) { override fun onClick(v: View) {
try { try {
when (v.id) { 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 -> { R.id.btn_del -> {
popToBack() 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 networkStateCheckId = binding!!.rgNetworkState.checkedRadioButtonId
val dataSimSlotCheckId = binding!!.rgDataSimSlot.checkedRadioButtonId val dataSimSlotCheckId = binding!!.rgDataSimSlot.checkedRadioButtonId
val wifiSsid = binding!!.etWifiSsid.text.toString().trim() 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_DATA_CONDITION
import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_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_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.TASK_CONDITION_SIM
import com.idormy.sms.forwarder.utils.XToastUtils import com.idormy.sms.forwarder.utils.XToastUtils
import com.jeremyliao.liveeventbus.LiveEventBus
import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.annotation.Page
import com.xuexiang.xrouter.annotation.AutoWired import com.xuexiang.xrouter.annotation.AutoWired
import com.xuexiang.xrouter.launcher.XRouter import com.xuexiang.xrouter.launcher.XRouter
import com.xuexiang.xui.utils.CountDownButtonHelper
import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.actionbar.TitleBar
@Page(name = "Sim") @Page(name = "Sim")
@ -31,7 +28,6 @@ class SimFragment : BaseFragment<FragmentTasksConditionSimBinding?>(), View.OnCl
private val TAG: String = SimFragment::class.java.simpleName private val TAG: String = SimFragment::class.java.simpleName
var titleBar: TitleBar? = null var titleBar: TitleBar? = null
private var mCountDownHelper: CountDownButtonHelper? = null
@JvmField @JvmField
@AutoWired(name = KEY_EVENT_DATA_CONDITION) @AutoWired(name = KEY_EVENT_DATA_CONDITION)
@ -57,39 +53,21 @@ class SimFragment : BaseFragment<FragmentTasksConditionSimBinding?>(), View.OnCl
* 初始化控件 * 初始化控件
*/ */
override fun initViews() { 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") Log.d(TAG, "initViews eventData:$eventData")
if (eventData != null) { if (eventData != null) {
val settingVo = Gson().fromJson(eventData, SimSetting::class.java) val settingVo = Gson().fromJson(eventData, SimSetting::class.java)
Log.d(TAG, "initViews settingVo:$settingVo") Log.d(TAG, "initViews settingVo:$settingVo")
binding!!.tvDescription.text = settingVo.description
binding!!.rgSimState.check(settingVo.getSimStateCheckId()) binding!!.rgSimState.check(settingVo.getSimStateCheckId())
} }
} }
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
override fun initListeners() { override fun initListeners() {
binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this) binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this) binding!!.btnSave.setOnClickListener(this)
LiveEventBus.get(KEY_TEST_CONDITION, String::class.java).observe(this) { binding!!.rgSimState.setOnCheckedChangeListener { _, _ ->
mCountDownHelper?.finish() checkSetting(true)
if (it == "success") {
XToastUtils.success("测试通过", 30000)
} else {
XToastUtils.error(it, 30000)
}
} }
} }
@ -97,20 +75,6 @@ class SimFragment : BaseFragment<FragmentTasksConditionSimBinding?>(), View.OnCl
override fun onClick(v: View) { override fun onClick(v: View) {
try { try {
when (v.id) { 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 -> { R.id.btn_del -> {
popToBack() 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 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.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.text.Editable
import android.text.TextWatcher
import android.util.Log import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View 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_DATA_CONDITION
import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_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_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.SettingUtils
import com.idormy.sms.forwarder.utils.TASK_CONDITION_TO_ADDRESS import com.idormy.sms.forwarder.utils.TASK_CONDITION_TO_ADDRESS
import com.idormy.sms.forwarder.utils.XToastUtils import com.idormy.sms.forwarder.utils.XToastUtils
import com.jeremyliao.liveeventbus.LiveEventBus
import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.annotation.Page
import com.xuexiang.xrouter.annotation.AutoWired import com.xuexiang.xrouter.annotation.AutoWired
import com.xuexiang.xrouter.launcher.XRouter import com.xuexiang.xrouter.launcher.XRouter
import com.xuexiang.xui.utils.CountDownButtonHelper
import com.xuexiang.xui.widget.actionbar.TitleBar import com.xuexiang.xui.widget.actionbar.TitleBar
import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction
import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog
@ -37,7 +36,6 @@ class ToAddressFragment : BaseFragment<FragmentTasksConditionToAddressBinding?>(
private val TAG: String = ToAddressFragment::class.java.simpleName private val TAG: String = ToAddressFragment::class.java.simpleName
var titleBar: TitleBar? = null var titleBar: TitleBar? = null
private var mCountDownHelper: CountDownButtonHelper? = null
@JvmField @JvmField
@AutoWired(name = KEY_EVENT_DATA_CONDITION) @AutoWired(name = KEY_EVENT_DATA_CONDITION)
@ -65,18 +63,6 @@ class ToAddressFragment : BaseFragment<FragmentTasksConditionToAddressBinding?>(
* 初始化控件 * 初始化控件
*/ */
override fun initViews() { 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 -> binding!!.rgCalcType.setOnCheckedChangeListener { _, checkedId ->
if (checkedId == R.id.rb_calc_type_distance) { if (checkedId == R.id.rb_calc_type_distance) {
binding!!.layoutCalcTypeDistance.visibility = View.VISIBLE binding!!.layoutCalcTypeDistance.visibility = View.VISIBLE
@ -85,35 +71,93 @@ class ToAddressFragment : BaseFragment<FragmentTasksConditionToAddressBinding?>(
binding!!.layoutCalcTypeDistance.visibility = View.GONE binding!!.layoutCalcTypeDistance.visibility = View.GONE
binding!!.layoutCalcTypeAddress.visibility = View.VISIBLE binding!!.layoutCalcTypeAddress.visibility = View.VISIBLE
} }
try {
checkSetting(true)
} catch (e: Exception) {
e.printStackTrace()
}
} }
Log.d(TAG, "initViews eventData:$eventData") Log.d(TAG, "initViews eventData:$eventData")
if (eventData != null) { if (eventData != null) {
val settingVo = Gson().fromJson(eventData, LocationSetting::class.java) val settingVo = Gson().fromJson(eventData, LocationSetting::class.java)
Log.d(TAG, "initViews settingVo:$settingVo") Log.d(TAG, "initViews settingVo:$settingVo")
binding!!.rgCalcType.check(settingVo.getCalcTypeCheckId()) binding!!.tvDescription.text = settingVo.description
binding!!.etLongitude.setText(settingVo.longitude.toString()) binding!!.etLongitude.setText(settingVo.longitude.toString())
binding!!.etLatitude.setText(settingVo.latitude.toString()) binding!!.etLatitude.setText(settingVo.latitude.toString())
binding!!.etDistance.setText(settingVo.distance.toString()) binding!!.etDistance.setText(settingVo.distance.toString())
binding!!.etAddress.setText(settingVo.address) binding!!.etAddress.setText(settingVo.address)
binding!!.rgCalcType.check(settingVo.getCalcTypeCheckId())
} }
} }
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
override fun initListeners() { override fun initListeners() {
binding!!.btnTest.setOnClickListener(this)
binding!!.btnDel.setOnClickListener(this) binding!!.btnDel.setOnClickListener(this)
binding!!.btnSave.setOnClickListener(this) binding!!.btnSave.setOnClickListener(this)
binding!!.btnCurrentCoordinates.setOnClickListener(this) binding!!.btnCurrentCoordinates.setOnClickListener(this)
LiveEventBus.get(KEY_TEST_CONDITION, String::class.java).observe(this) { binding!!.etLongitude.addTextChangedListener(object : TextWatcher {
mCountDownHelper?.finish() override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
if (it == "success") { override fun afterTextChanged(s: Editable?) {
XToastUtils.success("测试通过", 30000) try {
} else { val changedText = s.toString()
XToastUtils.error(it, 30000) 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 @SingleClick
@ -122,18 +166,12 @@ class ToAddressFragment : BaseFragment<FragmentTasksConditionToAddressBinding?>(
when (v.id) { when (v.id) {
R.id.btn_current_coordinates -> { R.id.btn_current_coordinates -> {
if (!App.LocationClient.isStarted()) { if (!App.LocationClient.isStarted()) {
MaterialDialog.Builder(requireContext()) 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? ->
.iconRes(R.drawable.auto_task_icon_location) SettingUtils.enableLocation = true
.title(R.string.enable_location) val serviceIntent = Intent(requireContext(), LocationService::class.java)
.content(R.string.enable_location_dialog) serviceIntent.action = "START"
.cancelable(false) requireContext().startService(serviceIntent)
.positiveText(R.string.lab_yes) }.show()
.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 return
} }
@ -148,21 +186,6 @@ class ToAddressFragment : BaseFragment<FragmentTasksConditionToAddressBinding?>(
XToastUtils.success(String.format(getString(R.string.current_address), location.address), 30000) 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 -> { R.id.btn_del -> {
popToBack() popToBack()
return return
@ -186,25 +209,36 @@ class ToAddressFragment : BaseFragment<FragmentTasksConditionToAddressBinding?>(
//检查设置 //检查设置
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
private fun checkSetting(): LocationSetting { private fun checkSetting(updateView: Boolean = false): LocationSetting {
val longitude = binding!!.etLongitude.text.toString().toDouble() val longitude = binding!!.etLongitude.text.toString().toDouble()
val latitude = binding!!.etLatitude.text.toString().toDouble() val latitude = binding!!.etLatitude.text.toString().toDouble()
val distance = binding!!.etDistance.text.toString().toDouble() val distance = binding!!.etDistance.text.toString().toDouble()
val address = binding!!.etAddress.text.toString() val address = binding!!.etAddress.text.toString()
var calcType = "distance" val calcType = when (binding!!.rgCalcType.checkedRadioButtonId) {
if (binding!!.rbCalcTypeDistance.isChecked) { R.id.rb_calc_type_distance -> {
if (latitude.isNaN() || longitude.isNaN() || distance.isNaN()) { Log.d(TAG, "longitude:$longitude latitude:$latitude distance:$distance")
throw Exception(getString(R.string.calc_type_address_error)) 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) { else -> {
if (address.isEmpty()) { if (address.isEmpty()) {
throw Exception(getString(R.string.calc_type_address_error)) 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 <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/battery_level_title" android:text="@string/task_battery"
android:textSize="18sp"
android:textStyle="bold" /> 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 <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="1dp"
@ -171,17 +180,6 @@
android:textSize="11sp" android:textSize="11sp"
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" /> 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>
</LinearLayout> </LinearLayout>

View File

@ -37,9 +37,18 @@
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/battery_status_title" android:text="@string/task_charge"
android:textSize="18sp"
android:textStyle="bold" /> 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 <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="1dp"
@ -47,52 +56,58 @@
android:layout_marginBottom="5dp" android:layout_marginBottom="5dp"
android:background="?attr/xui_config_color_separator_light" /> 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 <RadioGroup
android:id="@+id/rg_status" android:id="@+id/rg_status"
style="@style/rg_style" android:layout_width="match_parent"
android:orientation="vertical" android:layout_height="wrap_content"
android:paddingBottom="@dimen/config_padding_5dp"> android:orientation="horizontal">
<RadioButton <RadioButton
android:id="@+id/rb_battery_charging" android:id="@+id/rb_battery_charging"
style="@style/rg_rb_style_match" style="@style/rg_rb_style"
android:checked="true" android:checked="true"
android:gravity="center_vertical"
android:text="@string/battery_charging" android:text="@string/battery_charging"
tools:ignore="TouchTargetSizeCheck" /> tools:ignore="TouchTargetSizeCheck" />
<RadioButton <RadioButton
android:id="@+id/rb_battery_discharging" android:id="@+id/rb_battery_discharging"
style="@style/rg_rb_style_match" style="@style/rg_rb_style"
android:text="@string/battery_discharging" android:text="@string/battery_discharging"
tools:ignore="TouchTargetSizeCheck" /> tools:ignore="TouchTargetSizeCheck" />
<RadioButton <RadioButton
android:id="@+id/rb_battery_not_charging" android:id="@+id/rb_battery_not_charging"
style="@style/rg_rb_style_match" style="@style/rg_rb_style"
android:text="@string/battery_not_charging" android:text="@string/battery_not_charging"
tools:ignore="TouchTargetSizeCheck" /> tools:ignore="TouchTargetSizeCheck" />
<RadioButton <RadioButton
android:id="@+id/rb_battery_full" android:id="@+id/rb_battery_full"
style="@style/rg_rb_style_match" style="@style/rg_rb_style"
android:text="@string/battery_full" android:text="@string/battery_full"
tools:ignore="TouchTargetSizeCheck" /> tools:ignore="TouchTargetSizeCheck" />
<RadioButton <RadioButton
android:id="@+id/rb_battery_unknown" android:id="@+id/rb_battery_unknown"
style="@style/rg_rb_style_match" style="@style/rg_rb_style"
android:text="@string/battery_unknown" android:text="@string/battery_unknown"
tools:ignore="TouchTargetSizeCheck,DuplicateSpeakableTextCheck" /> tools:ignore="TouchTargetSizeCheck,DuplicateSpeakableTextCheck" />
</RadioGroup> </RadioGroup>
</LinearLayout> <View
android:layout_width="match_parent"
<LinearLayout android:layout_height="1dp"
style="@style/taskBarStyle" android:layout_marginTop="5dp"
android:layout_width="match_parent" android:layout_marginBottom="5dp"
android:layout_height="wrap_content" android:background="?attr/xui_config_color_separator_light" />
android:orientation="vertical">
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -100,41 +115,34 @@
android:text="@string/battery_plugged_title" android:text="@string/battery_plugged_title"
android:textStyle="bold" /> 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 <RadioGroup
android:id="@+id/rg_plugged" android:id="@+id/rg_plugged"
style="@style/rg_style" android:layout_width="match_parent"
android:orientation="vertical" android:layout_height="wrap_content"
android:paddingBottom="@dimen/config_padding_5dp"> android:orientation="horizontal">
<RadioButton <RadioButton
android:id="@+id/rb_plugged_ac" android:id="@+id/rb_plugged_ac"
style="@style/rg_rb_style_match" style="@style/rg_rb_style"
android:checked="true" android:checked="true"
android:text="@string/battery_ac" android:text="@string/battery_ac"
tools:ignore="TouchTargetSizeCheck" /> tools:ignore="TouchTargetSizeCheck" />
<RadioButton <RadioButton
android:id="@+id/rb_plugged_usb" android:id="@+id/rb_plugged_usb"
style="@style/rg_rb_style_match" style="@style/rg_rb_style"
android:text="@string/battery_usb" android:text="@string/battery_usb"
tools:ignore="TouchTargetSizeCheck" /> tools:ignore="TouchTargetSizeCheck" />
<RadioButton <RadioButton
android:id="@+id/rb_plugged_wireless" android:id="@+id/rb_plugged_wireless"
style="@style/rg_rb_style_match" style="@style/rg_rb_style"
android:text="@string/battery_wireless" android:text="@string/battery_wireless"
tools:ignore="TouchTargetSizeCheck" /> tools:ignore="TouchTargetSizeCheck" />
<RadioButton <RadioButton
android:id="@+id/rb_plugged_unknown" android:id="@+id/rb_plugged_unknown"
style="@style/rg_rb_style_match" style="@style/rg_rb_style"
android:text="@string/battery_unknown" android:text="@string/battery_unknown"
tools:ignore="TouchTargetSizeCheck" /> tools:ignore="TouchTargetSizeCheck" />
@ -172,17 +180,6 @@
android:textSize="11sp" android:textSize="11sp"
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" /> 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>
</LinearLayout> </LinearLayout>

View File

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

View File

@ -38,8 +38,17 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/task_leave_address" android:text="@string/task_leave_address"
android:textSize="18sp"
android:textStyle="bold" /> 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 <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="1dp"
@ -240,17 +249,6 @@
android:textSize="11sp" android:textSize="11sp"
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" /> 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>
</LinearLayout> </LinearLayout>

View File

@ -38,8 +38,17 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/task_lock_screen" android:text="@string/task_lock_screen"
android:textSize="18sp"
android:textStyle="bold" /> 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 <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="1dp"
@ -135,17 +144,6 @@
android:textSize="11sp" android:textSize="11sp"
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" /> 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>
</LinearLayout> </LinearLayout>

View File

@ -38,8 +38,17 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/task_network" android:text="@string/task_network"
android:textSize="18sp"
android:textStyle="bold" /> 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 <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="1dp"
@ -198,17 +207,6 @@
android:textSize="11sp" android:textSize="11sp"
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" /> 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>
</LinearLayout> </LinearLayout>

View File

@ -38,8 +38,17 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/task_sim" android:text="@string/task_sim"
android:textSize="18sp"
android:textStyle="bold" /> 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 <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="1dp"
@ -106,17 +115,6 @@
android:textSize="11sp" android:textSize="11sp"
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" /> 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>
</LinearLayout> </LinearLayout>

View File

@ -38,8 +38,17 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/task_to_address" android:text="@string/task_to_address"
android:textSize="18sp"
android:textStyle="bold" /> 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 <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="1dp"
@ -240,17 +249,6 @@
android:textSize="11sp" android:textSize="11sp"
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" /> 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>
</LinearLayout> </LinearLayout>

View File

@ -1129,13 +1129,21 @@
<string name="select_task_action">Please select action</string> <string name="select_task_action">Please select action</string>
<string name="bottom_sheet_close">Close</string> <string name="bottom_sheet_close">Close</string>
<string name="task_cron">Cron</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">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">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">Network</string>
<string name="task_network_tips">Trigger upon network status change.</string>
<string name="task_sim">SIM Status</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">Battery</string>
<string name="task_battery_tips">Trigger when battery level meets condition.</string>
<string name="task_charge">Charge</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">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_sendsms">Send Sms</string>
<string name="task_notification">Notification</string> <string name="task_notification">Notification</string>
<string name="task_frpc">Frpc Setting</string> <string name="task_frpc">Frpc Setting</string>
@ -1149,7 +1157,6 @@
<string name="week">Week</string> <string name="week">Week</string>
<string name="year">Year</string> <string name="year">Year</string>
<string name="cron_expression">Cron Expression</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_second">Every Second</string>
<string name="every_minute">Every Minute</string> <string name="every_minute">Every Minute</string>
<string name="every_hour">Every Hour</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="discharged_to">Discharged to the specified battery level</string>
<string name="charged_to">Charged 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_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_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">SIM State%s</string>
<string name="sim_state_absent">Absent</string> <string name="sim_state_absent">Absent</string>

View File

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