feat(android): 状态 Tab 新增设备连接卡片,显示 Wi-Fi IP 与无线调试状态 #380
Open
opened 2026-10-12 14:55:18 +08:00 by ila
·
6 comments
No Branch/Tag Specified
main
fix/388-address-save-back
feat/387-cancel-by-device
fix/386-diagnostic-deadlock
fix/385-accessibility-pause
feat/384-client-key-agent-release
feat/383-collection-device-filter
feat/382-purchase-creator-filters
feat/381-syb-cancelled-block
feat/375-open-in-pdd
feat/380-status-device-connection
fix/370-horizontal-grid
feat/372-export-shop
feat/378-heartbeat-diagnostics
feat/372-export-price
feat/372-list-export
fix/377-rejected-purchase-outbox
fix/376-pre-address-spec-verification
fix/374-final-spec-confirmation
fix/373-navigation-diagnostics
fix/370-color-discovery
feat/367-last-batch-repurchase
fix/368-image-search-partial-link
integration/364-365-366-main
feat/364-purchase-failure-snapshot
integration/365-366-validation
fix/365-order-result-observation
fix/366-address-editor-ready
fix/359-auto-match-resume
feat/363-inner-code-page-size
fix/362-truncated-spec-card
fix/361-spec-probe-click
docs/agents-worktree-rules
fix/358-syb-size-weight
feat/357-syb-cancel-status
feat/356-purchase-order-filter
fix/355-syb-list-timeout
feat/353-syb-shop-multiselect
fix/354-syb-top-pagination
fix/352-syb-source-created
fix/348-reveal-swipe
feat/340-syb-excluded-products
fix/351-inner-code-apply-selection
fix/350-match-layout
fix/350-inner-code-matching
feat/349-batch-return-use
feat/347-batch-return-cancel
feat/345-yeeke-reship
fix/346-root-serves-spa
fix/344-inner-code-stall-match
fix/343-syb-writeback-session
feat/339-syb-page-size
feat/338-return-match
feat/337-yeeke-admin-ui
feat/336-yeeke-return-sync
fix/335-bottom-submit-node
fix/334-spec-probe-top-swipe
fix/333-purchaser-device-owner
fix/331-spec-panel-recognition
fix/330-syb-writeback-session
feat/327-syb-writeback-filter
feat/326-order-information
fix/325-order-result
feat/316-chrome-order-backfill
fix/307-backfill-entry
feat/305-syb-order-writeback
feat/306-order-paid-amount
release/283
fix/283-purchase-mapping-consistency
fix/230-horizontal-spec-selection
feat/263-spec-rematch
fix/262-purchase-handoff
fix/260-261-purchase-readiness
fix/259-partial-collection-link
feat/258-one-click-replace
fix/257-color-normalized-match
fix/256-collection-single-dimension
fix/255-current-page-reidentify
feat/253-one-click-link
fix/254-match-loading
fix/251-syb-spec-candidates
feat/250-continuous-collection
fix/249-local-purchase-diagnostics
fix/248-bottom-submit
fix/247-short-address-panel
fix/246-address-return-panel
fix/245-purchase-failure-diagnostics
fix/244-selected-card-duplicates
fix/243-spec-entry-recovery
feat/242-agent-order-backfill
feat/241-order-backfill-endpoint
fix/239-syb-partial-sync
fix/238-spec-panel-preswipe
feat/237-client-api-keys
feat/236-purchaser-syb-sync
fix/235-syb-pagination-overlap
release/234-integrated
fix/229-address-entry-dedup
fix/228-selection-proof-panel-transition
fix/227-address-panel-return
fix/226-reopen-pdd-on-manual-retry
fix/225-in-place-purchase-retry
fix/224-final-spec-revalidation
fix/223-probed-confirmed-mapping
chore/221-devharness-sync
feat/218-purchase-result-bubble
fix/217-agent-retry-current-spec
fix/216-syb-spec-role-order
feat/215-mandatory-live-spec-probe
feat/214-verified-purchase-actions
fix/212-syb-sync-shop-snapshot
feat/211-spec-entry-ready-wait
feat/210-order-result-payment-transition
feat/209-pdd-bottom-spec-entry
feat/200-ai-match-result-purchase-ready
feat/199-job-execution-logs
feat/198-syb-ai-parse
feat/195-scheduled-spec-auto-match
fix/197-ai-write-timeout
feat/190-syb-inline-correction
fix/193-address-entry-reveal
feat/194-one-click-spec-match
fix/192-order-result-scroll
No results found.
Labels
No items
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: OPC/goauto#380
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
基本信息
已核验事实(
origin/main23dafcf,2026-10-12)测试机只读验证(
3B668T01GF400000,PLY110,Android 16,SDK 36;Agent targetSdk 34)run-as cn.ilapage.goauto.agent)ConnectivityManager.getLinkProperties(已有ACCESS_NETWORK_STATE权限)service.adb.tls.port属性/proc/net/tcp*、ss(netlink)dumpsys adb_adb-tls-connect._tcpadb mdns services与自发查询均无回应Settings.Global.adb_wifi_enabled1(与实际开启一致)settings/content命令行工具因其自身所需系统权限被拒,不代表 API 读取结果Settings.java:Settings.Global.ADB_WIFI_ENABLED = "adb_wifi_enabled"标注@Readable(无 maxTargetSdk),targetSdk ≥ 31 的 App 可通过Settings.Global.getInt读取。尚未在 App 内真机实测;OEM 改动可能性低但未排除。代码
android/app/src/main/java/cn/ilapage/goauto/agent/ui/AgentStatusFragment.kt;onCreateView依次添加连接、当前任务、无障碍、相册权限卡片(:132–170);refreshStatus()(:245)在onResume后每REFRESH_MILLIS = 1_000L刷新一次。AgentUiKit.kt的card/cardColumn/label。ACCESS_NETWORK_STATE,无需新增权限。目标
在「状态」Tab 显示本机 Wi-Fi IP 和无线调试是否开启,方便用户用 adb 连接设备时核对。
非目标
/proc、不用 mDNS);只显示到系统设置查看的提示。方案
LinkProperties的 IPv4 地址;不是 Wi-Fi 或无 IPv4 时显示「未连接 Wi-Fi」。Settings.Global.getInt(resolver, "adb_wifi_enabled", 0):1 →「已开启」(主色),0 →「未开启」(警告色);抛SecurityException或其他异常 →「无法读取」(灰色),不崩溃、不重试刷屏。refreshStatus()每秒刷新;读取放在独立的小工具类/策略对象中便于单测。设计证据(低保真,2026-10-12)
状态:正常(有 IP、已开启);未连接 Wi-Fi;未开启;无法读取。无加载态(同步读取)。无权限边界(能看到 Agent 的人都能看到)。现有页面的小范围新增卡片,复用现有卡片样式,不需要 QuantUX 原型。
子项目影响、依赖与并行
AgentStatusFragment.kt、新增读取工具类及其单元测试。验收标准
风险与回退
adb_wifi_enabled读取,只能显示「无法读取」;不寻找绕过方式。文档影响
无长期文档影响:仅新增界面只读信息,不改变入口、配置、接口、数据或业务规则。(如用户希望把「状态 Tab 可查看 IP/无线调试」写进运维说明,可另行更新 Deployment-and-Operations。)
开始实施(2026-10-12,Claude Code)
用户:「按照subagent用sonnet做#380」。
D:/OPC/goauto-worktrees/issue-380,分支feat/380-status-device-connection,基线origin/main23dafcf。实现回写(2026-10-12,Claude Code)
用户授权:「推送分支,并在 #380 回写实现证据.装包到测试机」。实现由 Sonnet 子 Agent 完成,Claude Code 审查并复跑。Gitea MCP 不可用,回退 REST。
提交
feat/380-status-device-connection,ff8c536(基线origin/main23dafcf),已推送。ui/AgentStatusFragment.kt(+20):「相册权限」后新增「设备连接」卡片,随refreshStatus()每秒刷新。ui/DeviceConnectionInfo.kt(+85):DeviceConnectionPolicy(纯函数:选 Wi-Fi 非回环 IPv4、adb_wifi_enabled原始值 → 状态、状态 → 文案/颜色);DeviceConnectionReader(ConnectivityManager活动网络 +TRANSPORT_WIFI+LinkProperties;Settings.Global.getInt(…, "adb_wifi_enabled", 0);任何异常 → 未知),不写日志、不持久化、不上报。DeviceConnectionPolicyTest.kt(9 项):Wi-Fi 有 IPv4、非 Wi-Fi、仅 IPv6、多地址取 IPv4、跳过回环、开关 1/0/其他/异常、三种显示颜色。自定处(审查认可)
测试
testDebugUnitTest762 项 0 失败 0 跳过;assembleDebug成功;LF 换行。装机与真机(测试机
3B668T01GF400000,Android 16)d1896670…1fc7,覆盖安装成功,装后回读哈希一致(替换 #370/#379 分支改签包2469b2db…8f86)。adb_wifi_enabled(此前仅依据 AOSP@Readable推断)。待验收
真机人工验证通过(2026-10-12)
用户:「#380人工验证通过」。测试机
3B668T01GF400000(Android 16)装ff8c536改签包,用户手动完成无线调试开关与 Wi-Fi 变化检查。issue-380;装采购1/2 待授权(用户要求暂不操作);正式验收关闭待用户「#380 验收通过」。合并 main(2026-10-12,Claude Code)
f334c1d(merge: device connection card on status tab (#380))。D:/OPC/goauto-worktrees/merge-370-380,基于origin/main23dafcf)依次--no-ff合并 #3702ae3e81→ #379d45a9b9→ #380ff8c536→ #375d3d3837,无冲突;推送23dafcf..82ed666。testDebugUnitTest815 项 0 失败 0 跳过;assembleDebug成功(未改签、未安装)。Agent 版本号升级(2026-10-12,Claude Code)
用户问「为什么测试机agent显示的版本没有改变呢」:合并后的 APK 仍沿用
build.gradle.kts中 #373 设定的0.9.69/ 82 与 Debug 后缀-373-fix1。用户确认后提交 main3495de9:versionCode 83、versionName 0.9.70,去掉 Debug 后缀,不改功能。testDebugUnitTest815 项 0 失败;assembleDebug成功,aapt 读取versionCode=83 versionName=0.9.70,Debug APK SHA25672129515c078f8d7632144ca55311d610b0e60f2c079732e1a54c9bb7d97450f(未改签、未安装)。测试机安装 0.9.70(2026-10-12,Claude Code)
用户:「装到测试机」。main
3495de9的 Debug APK 经 debug.keystore 改签,SHA2567b562de2813fb7534a71f09178eefff85400b768422abd33aa474144de8d3fdb,覆盖安装测试机3B668T01GF400000(192.168.0.93:36847)成功;装后回读哈希一致,系统显示 versionCode 83 / versionName 0.9.70。安装前本地无 pending/running 采集任务。采购机未操作。