docs: 归档任务 #29

This commit is contained in:
chengma
2026-08-07 15:55:18 +08:00
parent 6d863a1a8a
commit 52f11eecdc
@@ -0,0 +1,69 @@
# 29 设置页显示 PDD 安装状态并调整设备提示布局
- 类型:需求
- 父级大工单:#1
- 所属 MVP / 版本:#2 / MVP
- 状态:待验收
- 日期:2026-08-07
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/29
## 背景与目标
设置页的两个设备状态原来单独占一行,“无线地址”输入和“连接”按钮也没有完整业务实现。保存 Android 设备前没有确认该设备能否执行 PDD 任务。
目标是压缩状态信息占用的空间,并在搜索、切换设备和保存时检查所选设备是否安装拼多多。
## 最终方案
- “当前设备”和“Android 设备”的状态提示移到各自标题同行右侧,仍使用 `CaptionLabel`。
- 删除“无线地址”输入框和“连接”按钮,原位置显示只读的“PDD 应用”状态。
- 通过 `adb -s <设备号> shell pm path com.xunmeng.pinduoduo` 判断 PDD 是否安装,不遍历完整应用列表。
- 搜索完成、勾选设备变化和保存前异步检测;保存前重新检查,避免使用旧结果。
- 未安装或检测失败时不保存,并保留原有设备配置。
- 检测继续使用 `QObject + moveToThread`,设备切换后的过期结果不更新界面。
- 窗口快速关闭时安全清理已经结束或销毁的 Worker。
本任务按照 `windows-ui-ux` 的 Qt 状态反馈与长任务规则,采用标题同行的次要状态文本和非模态异步检测;检测期间只限制保存操作,搜索等无关操作仍可使用。
## 改了哪些
- `client/src/settings_ui.py`:调整标题和状态布局,移除无线地址控件,增加 PDD 状态标签。
- `client/src/android_device_service.py`:增加指定设备的包安装检测。
- `client/src/settings_ui_event.py`:增加异步检测、结果防过期、保存拦截和关闭清理。
- `client/test/test_android_device_service.py`:覆盖已安装、未安装和 ADB 错误。
- `client/test/test_settings_ui_event.py`:覆盖搜索、切换、保存拦截、检测失败和迟到结果。
## 验收结果
| 验收标准 | 结果 |
|---|---|
| 两个状态提示显示在对应标题同行 | 自动检查通过,待界面确认 |
| 保持 `CaptionLabel` 默认字号 | 通过 |
| 删除无线地址输入和连接按钮 | 通过 |
| 显示 PDD 未检测、检测中、已安装、未安装或失败状态 | 通过 |
| 仅查询 PDD 包名,不遍历全部应用 | 通过 |
| 搜索、勾选变化和保存触发检测 | 通过 |
| 未安装或检测失败时不保存 | 通过 |
| 迟到结果不会覆盖当前设备状态 | 通过 |
| 检测不阻塞界面,快速关闭安全 | 通过 |
| 原设备搜索、转 Wi-Fi、保存、删除和恢复测试继续通过 | 通过 |
## 测试
在 `client` 目录执行:
```powershell
C:/Python310/python.exe -m pytest test -q --tb=short --disable-warnings
C:/Python310/python.exe -m py_compile src/settings_ui.py src/settings_ui_event.py src/android_device_service.py test/test_android_device_service.py test/test_settings_ui_event.py
```
并在项目根目录执行 `git diff --check`,使用 `QT_QPA_PLATFORM=offscreen` 创建、显示和关闭主窗口。
- 结果:Client 全量 102 项测试通过;语法检查、差异检查和离屏主窗口启动/退出通过。
- 测试环境仍会输出已有的 PyQt5 字体目录缺失和弃用警告,不影响测试结果。
- **没验证到的部分**:真机安装 PDD、真机未安装 PDD 两种状态;不同缩放比例、主题和 Narrator 下的最终视觉效果。
## 相关提交
- `6d863a1` `feat: 检测 Android 设备 PDD 安装状态 (#29)`