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

Closed
opened 2026-08-07 15:40:19 +08:00 by ila · 3 comments
Owner

基本信息

  • 类型:需求
  • 父级大工单:#1
  • 所属 MVP / 版本:#2 / MVP
  • 阶段:阶段 1:UI 与工程骨架 / 设备设置完善
  • 当前状态:已完成

要解决什么

设置页“当前设备”和“Android 设备”的状态提示目前各自占用卡片底部一行,信息与对应标题分离。“无线地址”输入和“连接”按钮目前只发出事件,没有正式 ADB 连接实现。已选择的 Android 设备也没有检查拼多多 App 是否安装,可能保存一台不能执行后续任务的设备。

做什么 / 不做什么

  • 做:
    • 将当前设备状态提示移到“当前设备”标题同行右侧,保持 CaptionLabel 字号;
    • 将 Android 设备状态提示移到“Android 设备”标题同行右侧,保持 CaptionLabel 字号;
    • 删除“无线地址”标签、输入框和“连接”按钮;
    • 在原无线地址行显示只读“PDD 应用”状态;
    • 使用选中设备号直接查询 com.xunmeng.pinduoduo 是否安装;
    • 搜索完成、勾选设备和保存前均在需要时检测,保存���强制使用最新检测结果;
    • 检测在现有 QObject + moveToThread 后台模型中执行,并忽略设备切换后的过期结果;
    • PDD 未安装、设备离线、未授权或检测失败时不保存,并显示可恢复提示。
  • 不做:
    • 不遍历或展示设备的完整 App 列表;
    • 不安装、启动或登录 PDD;
    • 不修改 SQLite 结构、Admin 接口或 uiautomator2 采集逻辑;
    • 不改变 USB 转 Wi-Fi 和已保存 Wi-Fi 自动恢复流程。

怎么做

  • 在 AndroidDeviceService 增加按设备号执行 adb shell pm path com.xunmeng.pinduoduo 的查询方法,返回明确的已安装/未安装结果,ADB 错误继续使用可读异常。
  • 在 settings_ui.py 使用标题行 QHBoxLayout 放置 SubtitleLabel、弹性空白和原 CaptionLabel;新增只读 PDD 应用状态标签,移除无线地址相关控件。
  • 在 settings_ui_event.py 增加独立 PDD 检测 Worker。搜索完成且已有勾选设备时检测;勾选变化时检测;点击保存时重新检测,只有当前选中设备检测为已安装才进入原保存流程。
  • Worker 返回时核对设备号,页面关闭或选择已变化时丢弃迟到结果;检测期间禁用会产生竞态的设备命令。
  • 更新现有 Android 设备服务和设置页事件测试。

预计修改文件:

  • client/src/settings_ui.py
  • client/src/settings_ui_event.py
  • client/src/android_device_service.py
  • client/test/test_android_device_service.py
  • client/test/test_settings_ui_event.py

验收标准

  • 两个卡片的状态提示分别显示在对应标题同行右侧,字号保持 CaptionLabel 默认值。
  • 设置页不再显示“无线地址”输入框和“连接”按钮。
  • 原无线地址位置显示“PDD 应用”及未检测、检测中、已安装、未安装或失败状态。
  • PDD 检测只查询 com.xunmeng.pinduoduo,不遍历完整 App 列表。
  • 搜索后自动选中、用户勾选设备和点击保存时能触发正确检测;保存使用最新检测结果。
  • 未安装 PDD 或检测失败时不会覆盖原已保存设备配置,并提示解决方法。
  • ADB 检测不阻塞 Qt 主线程,设备切换或页面关闭后的迟到结果不会更新错误状态。
  • USB 转 Wi-Fi、设备搜索、保存、删除和启动恢复的现有测试继续通过。

怎么验证

从 client/ 目录执行:

C:/Python310/python.exe -m pytest test/test_android_device_service.py test/test_settings_ui_event.py -q
C:/Python310/python.exe -m py_compile src/settings_ui.py src/settings_ui_event.py src/android_device_service.py
$env:QT_QPA_PLATFORM="offscreen"
C:/Python310/python.exe -c "from src.ui_main import MainWindow; from PyQt5.QtWidgets import QApplication; app=QApplication([]); w=MainWindow(); print('OK'); app.quit()"
Remove-Item Env:QT_QPA_PLATFORM

真机验证:连接一台安装 PDD 的设备和一台未安装 PDD 的设备,分别搜索、勾选和保存,核对状态及保存拦截行为;不启动 PDD,不执行采集或采购。

风险和回退

  • 删除无线地址输入后不能再从页面手动输入新 Wi-Fi ADB 地址;本项目继续使用 USB 转 Wi-Fi和已保存设备自动恢复流程。
  • 部分 Android 系统可能限制包查询;此时显示检测失败且不保存,不能误判为已安装。
  • 可独立回退本工单提交,恢复原设置页布局和设备保存行为,不涉及数据库迁移。
## 基本信息 - 类型:需求 - 父级大工单:#1 - 所属 MVP / 版本:#2 / MVP - 阶段:阶段 1:UI 与工程骨架 / 设备设置完善 - 当前状态:已完成 ## 要解决什么 设置页“当前设备”和“Android 设备”的状态提示目前各自占用卡片底部一行,信息与对应标题分离。“无线地址”输入和“连接”按钮目前只发出事件,没有正式 ADB 连接实现。已选择的 Android 设备也没有检查拼多多 App 是否安装,可能保存一台不能执行后续任务的设备。 ## 做什么 / 不做什么 - 做: - 将当前设备状态提示移到“当前设备”标题同行右侧,保持 CaptionLabel 字号; - 将 Android 设备状态提示移到“Android 设备”标题同行右侧,保持 CaptionLabel 字号; - 删除“无线地址”标签、输入框和“连接”按钮; - 在原无线地址行显示只读“PDD 应用”状态; - 使用选中设备号直接查询 `com.xunmeng.pinduoduo` 是否安装; - 搜索完成、勾选设备和保存前均在需要时检测,保存���强制使用最新检测结果; - 检测在现有 `QObject + moveToThread` 后台模型中执行,并忽略设备切换后的过期结果; - PDD 未安装、设备离线、未授权或检测失败时不保存,并显示可恢复提示。 - 不做: - 不遍历或展示设备的完整 App 列表; - 不安装、启动或登录 PDD; - 不修改 SQLite 结构、Admin 接口或 uiautomator2 采集逻辑; - 不改变 USB 转 Wi-Fi 和已保存 Wi-Fi 自动恢复流程。 ## 怎么做 - 在 `AndroidDeviceService` 增加按设备号执行 `adb shell pm path com.xunmeng.pinduoduo` 的查询方法,返回明确的已安装/未安装结果,ADB 错误继续使用可读异常。 - 在 `settings_ui.py` 使用标题行 `QHBoxLayout` 放置 SubtitleLabel、弹性空白和原 CaptionLabel;新增只读 PDD 应用状态标签,移除无线地址相关控件。 - 在 `settings_ui_event.py` 增加独立 PDD 检测 Worker。搜索完成且已有勾选设备时检测;勾选变化时检测;点击保存时重新检测,只有当前选中设备检测为已安装才进入原保存流程。 - Worker 返回时核对设备号,页面关闭或选择已变化时丢弃迟到结果;检测期间禁用会产生竞态的设备命令。 - 更新现有 Android 设备服务和设置页事件测试。 预计修改文件: - `client/src/settings_ui.py` - `client/src/settings_ui_event.py` - `client/src/android_device_service.py` - `client/test/test_android_device_service.py` - `client/test/test_settings_ui_event.py` ## 验收标准 - [x] 两个卡片的状态提示分别显示在对应标题同行右侧,字号保持 CaptionLabel 默认值。 - [x] 设置页不再显示“无线地址”输入框和“连接”按钮。 - [x] 原无线地址位置显示“PDD 应用”及未检测、检测中、已安装、未安装或失败状态。 - [x] PDD 检测只查询 `com.xunmeng.pinduoduo`,不遍历完整 App 列表。 - [x] 搜索后自动选中、用户勾选设备和点击保存时能触发正确检测;保存使用最新检测结果。 - [x] 未安装 PDD 或检测失败时不会覆盖原已保存设备配置,并提示解决方法。 - [x] ADB 检测不阻塞 Qt 主线程,设备切换或页面关闭后的迟到结果不会更新错误状态。 - [x] USB 转 Wi-Fi、设备搜索、保存、删除和启动恢复的现有测试继续通过。 ## 怎么验证 从 `client/` 目录执行: ```powershell C:/Python310/python.exe -m pytest test/test_android_device_service.py test/test_settings_ui_event.py -q C:/Python310/python.exe -m py_compile src/settings_ui.py src/settings_ui_event.py src/android_device_service.py $env:QT_QPA_PLATFORM="offscreen" C:/Python310/python.exe -c "from src.ui_main import MainWindow; from PyQt5.QtWidgets import QApplication; app=QApplication([]); w=MainWindow(); print('OK'); app.quit()" Remove-Item Env:QT_QPA_PLATFORM ``` 真机验证:连接一台安装 PDD 的设备和一台未安装 PDD 的设备,分别搜索、勾选和保存,核对状态及保存拦截行为;不启动 PDD,不执行采集或采购。 ## 风险和回退 - 删除无线地址输入后不能再从页面手动输入新 Wi-Fi ADB 地址;本项目继续使用 USB 转 Wi-Fi和已保存设备自动恢复流程。 - 部分 Android 系统可能限制包查询;此时显示检测失败且不保存,不能误判为已安装。 - 可独立回退本工单提交,恢复原设置页布局和设备保存行为,不涉及数据库迁移。
Author
Owner

实施记录(2026-08-07)

代码已完成并进入待验收:

  • 两处状态提示已移到对应卡片标题同行,保留 CaptionLabel 字号;
  • 已移除“无线地址”输入和“连接”按钮,原位置改为 PDD 应用状态;
  • 搜索、切换勾选设备和保存前会异步检查 com.xunmeng.pinduoduo;
  • 未安装或检测失败时拦截保存,设备切换后的过期结果不会覆盖当前状态;
  • 修复快速关闭窗口时后台 Worker 已销毁导致的清理竞态。

验证结果:Client 全量 102 passed;语法检查、离屏主窗口启动/退出、git diff --check 均通过。真机安装/未安装两种状态仍需验收。

代码提交:6d863a1 feat: 检测 Android 设备 PDD 安装状态 (#29)

## 实施记录(2026-08-07) 代码已完成并进入待验收: - 两处状态提示已移到对应卡片标题同行,保留 `CaptionLabel` 字号; - 已移除“无线地址”输入和“连接”按钮,原位置改为 PDD 应用状态; - 搜索、切换勾选设备和保存前会异步检查 `com.xunmeng.pinduoduo`; - 未安装或检测失败时拦截保存,设备切换后的过期结果不会覆盖当前状态; - 修复快速关闭窗口时后台 Worker 已销毁导致的清理竞态。 验证结果:Client 全量 `102 passed`;语法检查、离屏主窗口启动/退出、`git diff --check` 均通过。真机安装/未安装两种状态仍需验收。 代码提交:`6d863a1` `feat: 检测 Android 设备 PDD 安装状态 (#29)`
Author
Owner

本地任务归档已提交:

  • 文档:docs/task/29-设置页显示-pdd-安装状态并调整设备提示布局.md
  • 归档提交:52f11ee docs: 归档任务 #29

工单保持“待验收”和打开状态;用户验收后再关闭并更新父工单。

本地任务归档已提交: - 文档:`docs/task/29-设置页显示-pdd-安装状态并调整设备提示布局.md` - 归档提交:`52f11ee` `docs: 归档任务 #29` 工单保持“待验收”和打开状态;用户验收后再关闭并更新父工单。
ila closed this issue 2026-08-07 15:57:30 +08:00
Author
Owner

用户于 2026-08-07 确认验收通过。工单已关闭,父工单 #1、#2 已同步勾选。验收记录提交:d2decc7。

用户于 2026-08-07 确认验收通过。工单已关闭,父工单 #1、#2 已同步勾选。验收记录提交:`d2decc7`。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#29