## Summary - rebuild the authenticated shell, device dashboard, device detail pages, scenes, activity timeline, account sheet, and settings experience - redesign infrared remote management and controls, including custom remotes, learn-state handling, slot isolation, and safe default content - add persisted theme controls with internal accent, color-style, and color-standard resolution while keeping dynamic color authoritative - add ABox profile defaults for the three exact gateway device names, editable starter scenes, and custom infrared remotes - persist real activity events for device commands, infrared actions, and scene execution - stabilize navigation and back behavior, including duplicate top-back protection and removal of the unfinished predictive-back option - update launcher icons and bilingual application name ## Verification - `:android:app:assembleDebug` - installed the debug APK on `emulator-5554` - manually exercised device detail navigation, settings/theme navigation, infrared management, activity records, and repeated back actions ## Notes - no automated test suite was run during the visual iteration cycle - `docs/superpowers/**` and local reference repositories are excluded from this PR Reviewed-on: #10 Co-authored-by: KremeCN <3265494849@qq.com>
5.4 KiB
5.4 KiB
红外控制硬件验证规范与记录 / Infrared Hardware Validation Guide & Records
1. 硬件环境与已知设备信息 / Hardware Environment
真实硬件验证只允许在获授权的隔离局域网中进行。文档不记录完整网关地址、IEEE 地址、凭据、令牌、红外码值或原始 SDK 响应;设备名称也应使用脱敏别名。
- 设备名称: 脱敏的红外控制器别名
- 设备类型: 红外控制器
- 网关/主机: 获授权的 ABox 智能主机
- 被控实体: 获授权的实体空调、电视或其他电器
2. 硬件测试记录表 / Hardware Validation Log
| 日期 | App Commit | 运行模式 | 脱敏 Profile | 脱敏设备名 | 脱敏操作标识 | 操作 | 耗时区间 | 脱敏错误分类 | 物理响应 | 结论 | |---|---|---|---|---|---|---|---|---|---| | 待填 | 待填 | 本地体验 | local-test | simulation-ir | test-1 | Learn/Send | 待填 | 无 | 模拟流程通过 | 仅软件验证 | | 待填 | 待填 | ABox | profile-redacted | device-redacted | operation-redacted | Learn | 待填 | 待填 | 授权遥控器完成学习 | 待真机执行 | | 待填 | 待填 | ABox | profile-redacted | device-redacted | operation-redacted | Send | 待填 | 待填 | 授权电器产生预期响应 | 待真机执行 |
3. 标准真机测试流程 (12 项用例) / Standard 12-Step Test Procedure
用例 1: 真实会话认证前置 (Authenticate Session)
- 前置: 通过登录模块对进程单例
AbsdkBridge进行登录认证。 - 步骤: 检查进入红外控制页面前,会话是否有效。
- 预期: 若未认证,真实模式操作返回会话无效错误并提示返回登录。
用例 2: 输入并保存真实设备名 (Enter and Save irDevName)
- 步骤: 在“红外设备名称”输入框中输入获授权设备名,点击“保存设备名”。
- 预期: 本地 Room 保存成功,页面显示脱敏设备名并启用学习入口。
用例 3: 学习全新唯一按键 (Learn Unique Key)
- 步骤: 点击“学习新按键”,输入显示名称(如“空调开”),点击“开始学习”;将物理遥控器对准红外控制器按下按键。
- 预期: 本地先写入
LEARNING状态,硬件捕获完成后状态自动刷新为READY,记录响应耗时与返回码。
用例 4: 立即发射已学习按键 (Send Learned Key Immediately)
- 步骤: 学习成功后,点击该按键右侧的“发射”按钮。
- 预期: ABSDK 返回
00000,实体电器执行对应操作,发射期间按钮防重复点击。
用例 5: 重复发射验证稳定性 (Repeat Send)
- 步骤: 间隔 3 秒再次点击同一按键的“发射”按钮。
- 预期: 发射稳定成功,电器再次响应,按键保持
READY状态不变。
用例 6: 重新学习同一 SDK Key (Relearn Same Key)
- 步骤: 针对已存在或失败的按键点击“重试”/重新学习。
- 预期: 复用相同的
InfraredKeyId和sdkKey,先变更为LEARNING,学习完成后恢复READY,不生成冗余记录。
用例 7: 控制器断电/离线测试 (Controller Offline)
- 步骤: 拔掉红外控制器电源,发起学习或发射。
- 预期: ABSDK 返回
20206,领域层转换为DomainError.DeviceOffline,学习按键标为FAILED,UI 提示控制器离线。
用例 8: 遥控器无信号/超时测试 (No Signal / Learning Timeout)
- 步骤: 点击“开始学习”,但不按物理遥控器任何按键,等待 SDK 返回。
- 预期: 记录实际超时等待时间与错误码(如
20204/20205),按键转换为FAILED并允许重试。
用例 9: 学习过程中离开页面 (Leave Page During Learning)
- 步骤: 点击开始学习后,立即点击“返回”离开红外页面;稍后重新进入。
- 预期: Application 协程作用域内任务继续执行,学习完成后 Room 数据库正确持久化结果,重新进入显示最新状态。
用例 10: 进程被杀死后状态恢复 (Process Interruption Recovery)
- 步骤: 在
LEARNING状态下强制杀死 App 进程并重启。 - 预期: App 启动或重新进入页面时,
RecoverInterruptedInfraredLearning将遗留的LEARNING保守恢复为FAILED,提示用户重新学习。
用例 11: Token 失效与重新登录 (Token Expiration)
- 步骤: 使远端会话失效后发起红外操作。
- 预期: 返回会话无效错误,本地会话被清除,页面提示登录失效并导航返回。
用例 12: 检查未文档化响应字段 (Inspect Undocumented Fields)
- 步骤: 仅在授权的隔离环境中确认响应是否包含已知字段;不得保存或传播原始响应。
- 安全约束: 严禁将原始响应、令牌、密码、红外码值或未脱敏网络标识打印至日志或写入测试记录。
4. 协议与硬件事实确认记录 / Observed Facts
- SDK 阻塞模式: 同步阻塞 HTTP POST 调用,由
AbsdkBridge调度至Dispatchers.IO并通过进程级Mutex串行执行。 - 数据隔离: 本地体验使用独立的模拟 profile;ABox 模式使用当前已认证 profile,二者不共享设备、遥控器或会话数据。
- 传输事实: 真实 ABSDK 使用厂商 JAR 中的明文 HTTP 传输。Debug 与 Release 暴露相同的提供方和硬件路由;项目通过显式传输标记和 manifest 的明文配置接受这一局域网集成风险。该配置不提供机密性或完整性。