Files
cmautobuy/docs/task/29-设置页显示-pdd-安装状态并调整设备提示布局.md

3.6 KiB

29 设置页显示 PDD 安装状态并调整设备提示布局

  • 类型:需求
  • 父级大工单:#1
  • 所属 MVP / 版本:#2 / MVP
  • 状态:已完成
  • 日期:2026-08-07
  • Gitea 工单:#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、保存、删除和恢复测试继续通过 通过
用户验收 2026-08-07 验收通过

测试

在 client 目录执行:

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)