目标:消除主线程对灯控锁的等待,合并重复灯光请求,避免稳定重量回调持续创建 Rx 任务和重复执行 RootCmd。
架构:LightController 负责普通灯光、临时闪烁和持续报警三种模式的状态协调,所有厂商灯控调用都进入唯一的 ScheduledExecutorService。公共接口只更新目标状态并立即返回;LightDriver 隔离厂商 SDK,便于 JVM 单元测试验证去重、优先级和恢复行为。
技术栈:Java 8、Android、JUnit 4、ScheduledExecutorService、AtomicReference、AtomicBoolean。
JAVA_HOME=$(/usr/libexec/java_home -v 1.8) sh ./gradlew :app:testDebugUnitTest --tests com.zhct.traybinding.hardware.LightControllerTest
新增 LightDriver.java 与 AithingsLightDriver.java;接口只包含开关和亮度设置,生产实现只转发厂商 SDK。
保留两套重量读取路径现有的绿灯请求,避免改变首次亮灯和硬件失败后的再次请求行为;由 LightController 在调用入口去重,同一绿灯请求不投递新任务、不执行 RootCmd。页面、弹窗和报警已有的显式灯光入口保持不变。
git diff --check 通过,源码仓库无过程文档。在 WeightSingle116 提示词工程的 change_records 下保存同名 Markdown 与 HTML,并更新总 CHANGELOG。