feat(activity): 为子设备 SlaveActivity 添加调料秤重量增加高亮提醒功能
检测本机秤稳定后重量增加超过10g,高亮对应格子(红底白字),15秒后自动恢复
This commit is contained in:
@@ -2,6 +2,8 @@ package com.shuwei.dish.match.ui
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
@@ -45,6 +47,13 @@ class SlaveActivity : BaseActivity() {
|
||||
/** 已连接的主设备数量(有连接即代表主设备在线) */
|
||||
private var masterConnected = false
|
||||
|
||||
/** 各秤地址的上一次重量快照,用于计算 delta */
|
||||
private val weightSnapshot = mutableMapOf<Int, Double>()
|
||||
/** 主线程 Handler,用于延迟清除高亮 */
|
||||
private val mainHandler = Handler(Looper.getMainLooper())
|
||||
/** 当前高亮清除任务,新高亮触发时取消旧任务 */
|
||||
private var clearHighlightRunnable: Runnable? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
binding = ActivitySlaveBinding.inflate(layoutInflater)
|
||||
@@ -134,9 +143,19 @@ class SlaveActivity : BaseActivity() {
|
||||
/**
|
||||
* 监听本机 WeightUtil 回调,实时刷新秤列表
|
||||
* 22/18个秤走网格 adapter,其余走线性列表
|
||||
* 秤稳定且重量增加超过阈值时,高亮对应格子,15秒后自动恢复
|
||||
*/
|
||||
private fun listenLocalScales() {
|
||||
WeightUtil.addWeightListener(TAG) { address, state, weight ->
|
||||
// 重量快照与高亮判断(在回调线程计算,不涉及 UI)
|
||||
val baseline = weightSnapshot[address]
|
||||
val shouldHighlight = baseline != null
|
||||
&& state == WeightUtil.STATE_STABLE
|
||||
&& (weight - baseline) > WEIGHT_DELTA_THRESHOLD
|
||||
if (baseline == null || state == WeightUtil.STATE_STABLE) {
|
||||
weightSnapshot[address] = weight
|
||||
}
|
||||
|
||||
runOnUiThread {
|
||||
when {
|
||||
scale22Adapter != null -> {
|
||||
@@ -167,6 +186,19 @@ class SlaveActivity : BaseActivity() {
|
||||
linearAdapter.submitList(list)
|
||||
}
|
||||
}
|
||||
|
||||
// 触发格子高亮
|
||||
if (shouldHighlight) {
|
||||
clearHighlightRunnable?.let { mainHandler.removeCallbacks(it) }
|
||||
val pos22 = ScaleDeviceConfig.SCALE_ORDER_22.indexOf(address)
|
||||
val pos18 = ScaleDeviceConfig.SCALE_ORDER_18.indexOf(address)
|
||||
scale22Adapter?.highlightPosition(pos22)
|
||||
scale18Adapter?.highlightPosition(pos18)
|
||||
clearHighlightRunnable = Runnable {
|
||||
scale22Adapter?.clearHighlight()
|
||||
scale18Adapter?.clearHighlight()
|
||||
}.also { mainHandler.postDelayed(it, HIGHLIGHT_DURATION_MS) }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -186,11 +218,16 @@ class SlaveActivity : BaseActivity() {
|
||||
override fun onDestroy() {
|
||||
ScaleServiceManager.onMasterConnectionChanged = null
|
||||
WeightUtil.removeWeightListener(TAG)
|
||||
clearHighlightRunnable?.let { mainHandler.removeCallbacks(it) }
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val TAG = "SlaveActivity"
|
||||
/** 重量增加阈值(克),超过此值才触发高亮 */
|
||||
private const val WEIGHT_DELTA_THRESHOLD = 10.0
|
||||
/** 高亮自动恢复时间(毫秒) */
|
||||
private const val HIGHLIGHT_DURATION_MS = 15_000L
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user