From 841f27e6dee97f8fe402c6d7e1bae113f8b19a42 Mon Sep 17 00:00:00 2001 From: xiaowusky Date: Mon, 11 Dec 2023 14:03:04 +0800 Subject: [PATCH] =?UTF-8?q?desc:=E8=BD=AF=E4=BB=B6=E5=B1=82=E9=9D=A2?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BC=A0=E6=84=9F=E5=99=A8=E9=80=9A=E9=81=93?= =?UTF-8?q?=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../watcher/base/BaseActivity.kt | 2 +- .../watcher/port/GasPortUtils.kt | 43 ++- .../safetywatcher/watcher/port/ParseHelper.kt | 15 +- .../safetywatcher/watcher/ui/HomeActivity.kt | 29 +- .../watcher/ui/SensorSettingActivity.kt | 39 ++- .../watcher/ui/view/CommonTopBar.kt | 4 + .../res/layout/activity_sensor_setting.xml | 321 ++++++++++-------- app/src/main/res/values/strings.xml | 3 + 8 files changed, 284 insertions(+), 172 deletions(-) diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt index acd2491..36e1a0f 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt @@ -32,7 +32,7 @@ import com.yinuo.safetywatcher.watcher.utils.trySetCommonBg abstract class BaseActivity : AppCompatActivity() { - private val baseBinding: ActivityBaseBinding by lazy { + val baseBinding: ActivityBaseBinding by lazy { ActivityBaseBinding.inflate(layoutInflater) } diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasPortUtils.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasPortUtils.kt index a116f57..6643e1a 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasPortUtils.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasPortUtils.kt @@ -14,8 +14,17 @@ object GasPortUtils { private const val READ_MSG_INTERVAL = 180L private var mInitFlag = false private var readGasMsgThread: Thread? = null; - private var toDoCmdList: ArrayList = ArrayList() - private val listeners: ArrayList<(ByteArray) -> Unit> = ArrayList<(ByteArray) -> Unit>() + private var toDoCmdList: ArrayList = ArrayList() + private val listeners: ArrayList<(ByteArray) -> Unit> = ArrayList() + private val switchStatus = booleanArrayOf(true, true, true, true, true) + + fun setSwitch(index: Int, status: Boolean) { + switchStatus[index] = status + } + + fun isSwitchOpen(index: Int): Boolean { + return switchStatus[index] + } fun addListener(listener: (ByteArray) -> Unit) { listeners.add(listener) @@ -61,16 +70,26 @@ object GasPortUtils { gasTypeDao.deleteAll() while (true) { // 延时一段时间后,发送指令读取气体数据 - Thread.sleep(READ_MSG_INTERVAL) - ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_1) - Thread.sleep(READ_MSG_INTERVAL) - ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_2) - Thread.sleep(READ_MSG_INTERVAL) - ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_3) - Thread.sleep(READ_MSG_INTERVAL) - ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_4) - Thread.sleep(READ_MSG_INTERVAL) - ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_5) + if (isSwitchOpen(0)) { + Thread.sleep(READ_MSG_INTERVAL) + ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_1) + } + if (isSwitchOpen(1)) { + Thread.sleep(READ_MSG_INTERVAL) + ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_2) + } + if (isSwitchOpen(2)) { + Thread.sleep(READ_MSG_INTERVAL) + ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_3) + } + if (isSwitchOpen(3)) { + Thread.sleep(READ_MSG_INTERVAL) + ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_4) + } + if (isSwitchOpen(4)) { + Thread.sleep(READ_MSG_INTERVAL) + ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_5) + } if (toDoCmdList.isNotEmpty()) { toDoCmdList.forEach { Thread.sleep(READ_MSG_INTERVAL) diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt index d7fa95d..0414f9e 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt @@ -26,7 +26,7 @@ import kotlin.math.pow object ParseHelper { - private val mPortRunnable = hashMapOf() + private val mPortRunnable = hashMapOf() private val mHandler = Handler(Looper.getMainLooper()) private val tempGasData = mutableListOf() private val devicesApi by lazy { @@ -294,13 +294,22 @@ object ParseHelper { var flagRunnable = mPortRunnable[index] if (flagRunnable != null) { mHandler.removeCallbacks(flagRunnable) + } else { + flagRunnable = FlagRunnable(type, index) + mPortRunnable[index] = flagRunnable } - flagRunnable = FlagRunnable(type, index) - mPortRunnable[index] = flagRunnable // 如果一段时间内没有收到消息,认为连接断开 mHandler.postDelayed(flagRunnable, GasPortUtils.CHECK_TIME) } + fun removeOutLineRunnable(index: Int) { + var flagRunnable = mPortRunnable[index] + if (flagRunnable != null) { + mHandler.removeCallbacks(flagRunnable) + mPortRunnable[index] = null + } + } + /** * 离线检查 */ diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HomeActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HomeActivity.kt index 4ac9d98..eaa4869 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HomeActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HomeActivity.kt @@ -166,19 +166,23 @@ class HomeActivity : NoOptionsActivity() { */ private fun changeViewStatus() { lifecycleScope.launch(Dispatchers.Main) { - //mHasSensorData = true - mBinding.errorView.visibility = - if (!AppData.hasCameraData()) View.VISIBLE else View.GONE + lifecycleScope.launchWhenResumed { + //mHasSensorData = true + mBinding.errorView.visibility = + if (!AppData.hasCameraData()) View.VISIBLE else View.GONE // val errorRes = // if (!AppData.hasCameraData() && !AppData.hasSensorData()) R.drawable.ic_nosingal else R.drawable.ic_icon - val errorRes = R.drawable.ic_icon - mBinding.errorView.setImageResource(errorRes) + val errorRes = R.drawable.ic_icon + mBinding.errorView.setImageResource(errorRes) + } } } private fun showTipView() { lifecycleScope.launch(Dispatchers.Main) { - mBinding.tipView.setImageBitmap(TxtOverlay.getOverlayBitmap()) + lifecycleScope.launchWhenResumed { + mBinding.tipView.setImageBitmap(TxtOverlay.getOverlayBitmap()) + } } } @@ -206,6 +210,7 @@ class HomeActivity : NoOptionsActivity() { private val warnMap = hashMapOf() + // 设置传感器 private fun setForSensor() { TxtOverlay.setTipChangeListener { @@ -238,11 +243,13 @@ class HomeActivity : NoOptionsActivity() { } } launch(Dispatchers.Main) { - if (builder.toString().isNotEmpty()) { - mBinding.tvWarn.text = builder.toString() - mBinding.tvWarn.visibility = View.VISIBLE - } else { - mBinding.tvWarn.visibility = View.GONE + lifecycleScope.launchWhenResumed { + if (builder.toString().isNotEmpty()) { + mBinding.tvWarn.text = builder.toString() + mBinding.tvWarn.visibility = View.VISIBLE + } else { + mBinding.tvWarn.visibility = View.GONE + } } } } diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/SensorSettingActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/SensorSettingActivity.kt index 545bfd1..ff7d7af 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/SensorSettingActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/SensorSettingActivity.kt @@ -11,6 +11,8 @@ import com.yinuo.safetywatcher.R import com.yinuo.safetywatcher.databinding.ActivitySensorSettingBinding import com.yinuo.safetywatcher.watcher.base.NoOptionsActivity import com.yinuo.safetywatcher.watcher.port.GasCache +import com.yinuo.safetywatcher.watcher.port.GasPortUtils +import com.yinuo.safetywatcher.watcher.port.ParseHelper import com.yinuo.safetywatcher.watcher.port.UNIT_MGM3 import com.yinuo.safetywatcher.watcher.port.UNIT_PPM import com.yinuo.safetywatcher.watcher.port.cmd.CH4_H2 @@ -88,6 +90,30 @@ class SensorSettingActivity : NoOptionsActivity() { // 设置各种监听 setListener() + + val switchOpen = GasPortUtils.isSwitchOpen(sensorIndex) + switchOp(switchOpen) + mBinding.sensorSwitch.isChecked = switchOpen + mBinding.areaSwitch.setOnClickListener { + mBinding.sensorSwitch.performClick() + } + // 开关 + mBinding.sensorSwitch.setOnCheckedChangeListener { _, isChecked -> + switchOp(isChecked) + } + } + + private fun switchOp(isChecked: Boolean) { + if (isChecked) { + mBinding.tvStatus.text = getString(R.string.sensor_status_on) + mBinding.layoutOp.visibility = View.VISIBLE + GasPortUtils.setSwitch(sensorIndex, true) + } else { + mBinding.tvStatus.text = getString(R.string.sensor_status_off) + mBinding.layoutOp.visibility = View.GONE + GasPortUtils.setSwitch(sensorIndex, false) + ParseHelper.removeOutLineRunnable(sensorIndex) + } } private fun setListener() { @@ -103,13 +129,24 @@ class SensorSettingActivity : NoOptionsActivity() { startActivity(intent) } + baseBinding.topBar.getBackArea()?.setOnKeyListener { v, keyCode, event -> + if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) { + if (event.action == KeyEvent.ACTION_DOWN) { + mBinding.areaSwitch.requestFocus() + return@setOnKeyListener true + } + } + return@setOnKeyListener false + } + /** * 昵称edittext,按键设置 */ mBinding.etName.setOnKeyListener { _, keyCode, event -> if (keyCode == KeyEvent.KEYCODE_DPAD_UP) { if (event.action == KeyEvent.ACTION_DOWN) { - tryFocusBackArea() +// tryFocusBackArea() + mBinding.areaSwitch.requestFocus() return@setOnKeyListener true } } else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) { diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/view/CommonTopBar.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/view/CommonTopBar.kt index 922d5c4..c23058d 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/view/CommonTopBar.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/view/CommonTopBar.kt @@ -176,4 +176,8 @@ class CommonTopBar : LinearLayout { fun tryFocusBackArea() { mBinding?.backArea?.requestFocus() } + + fun getBackArea(): View? { + return mBinding?.backArea + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_sensor_setting.xml b/app/src/main/res/layout/activity_sensor_setting.xml index 688c400..c03e105 100644 --- a/app/src/main/res/layout/activity_sensor_setting.xml +++ b/app/src/main/res/layout/activity_sensor_setting.xml @@ -4,180 +4,213 @@ android:layout_height="match_parent" android:orientation="vertical" android:paddingStart="@dimen/_121dp" - android:paddingTop="@dimen/_61dp"> - - + android:paddingTop="@dimen/_40dp"> - - - - - + android:layout_marginEnd="@dimen/_61dp" + android:paddingEnd="@dimen/_61dp"> - + - + + - + android:orientation="vertical"> + + + + + + + + - - - - - - - + android:layout_height="wrap_content" + android:layout_marginStart="@dimen/_20dp" + android:layout_marginTop="@dimen/_40dp" + android:orientation="horizontal"> + + + + + + + - - + android:text="@string/sensor_warn_setting_txt" + android:textColor="@color/white" + android:textSize="@dimen/_30dp" /> + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f2e4769..b7e2aa5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -87,4 +87,7 @@ 校准传感器成功 校准传感器失败 校准传感器失败, 传感器未响应! + + 通道开启 + 通道关闭