Page:
T-209
Pages
00-ai-start-here
01-vision
02-requirements
03-tech-stack
04-architecture
05-coding-rules
06-tasks
07-user-stories
08-interaction-checklist
Design
Home
Integrations-shunyunbao-contract
PPT
T-001
T-002
T-003
T-004
T-101
T-102
T-103
T-104
T-201
T-202
T-203
T-204
T-205
T-206
T-207
T-208
T-209
T-210
T-211
T-212
T-213
T-214
T-215
T-216
T-217
T-218
T-219
T-220
T-221
T-222
T-223
T-224
T-225
T-226
T-227
T-228
T-229
T-230
T-231
T-232
T-233
T-234
T-235
T-236
T-237
T-238
T-239
T-240
T-241
T-242
T-243
T-244
T-245
T-246
T-247
T-248
T-249
T-250
T-251
T-252
T-253
T-254
T-255
T-256
T-257
T-258
T-259
T-260
T-261
T-262
T-263
T-264
T-265
T-266
T-267
T-268
T-269
T-270
T-271
T-272
T-273
T-274
T-275
T-276
T-277
T-278
T-279
T-280
T-281
Task-Template
Tasks
agent-context
api
clean-state-checklist
current-state
routes
Clone
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
同步来源:
docs/tasks/T-209.md· commitafc651f75a3a
id: T-209 title: 保留失败采购登录的已填写凭证 phase: 2 deps:
- T-206
status: DONE
created: 2026-07-27
context_ref:
d86a88ework_branch: null write_paths: - android-buyer/app/src/main/java/com/roubao/autopilot/MainActivity.kt
- android-buyer/app/src/main/java/com/roubao/autopilot/ui/screens/ProcurementScreen.kt
- android-buyer/app/src/test/**
- docs/tasks/T-209.md
问题 / 背景
采购任务登录页在点击“登录”后立即清空密码和设备密钥,不区分成功、网络失败、服务端 拒绝或本地校验失败。采购员无法直接更正一项输入后重试,尤其设备密钥较长时操作成本高。
已定合约
- 登录失败时,后台地址、账号、密码、设备 ID 和设备密钥都保留在当前登录页内存中。
- 密码和设备密钥仍不得写入普通 SharedPreferences、日志、错误消息或分析事件。
- 登录成功后才清理输入状态;成功会离开登录页,已加密保存的设备密钥维持现有行为。
- 重复点击受现有 busy 状态约束;本任务不改变账号鉴权、设备绑定、令牌或后端 API。
方案
让登录 UI 等待 Repository 的布尔结果,仅在成功时清空敏感输入。失败、超时和本地 校验错误保持 Compose 内存状态,不新增任何持久化字段。
验收要点
- 服务端拒绝、网络失败和本地校验失败后,五个已填写字段可直接修改并重试。
- 成功登录后不保留登录页敏感输入,设备密钥只进入既有加密存储。
- 密码和设备密钥不进入日志、普通 Preferences 或错误文案。
- Android 单元测试与 Debug 构建通过。
边界
- 不增加“记住密码”、明文自动填充或密码找回。
- 不改动 T-208 候选决策数据闭环。
执行记录
- 2026-07-27:任务已登记,待实现。
- 2026-07-27:登录 UI 改为等待 Repository 布尔结果;失败时保留 Compose 内存中的 后台地址、账号、密码、设备 ID 和设备密钥,成功才清理敏感输入。新增本地提交锁, 防止请求尚未开始时重复点击。
- 2026-07-27:
./gradlew.bat :app:compileDebugKotlin :app:testDebugUnitTest :app:assembleDebug通过;最新 Debug APK 已安装并冷启动至 PKG110,无 crash/ANR。 - 2026-07-27:首次修复后真机复测仍复现。根因是错误信息作为新的
LazyColumn项插在 登录表单之前,无 key 的表单项位置变化后被 Compose 重新创建。登录项改用稳定procurement-loginkey,并移除会在 profile 发布时重置字段的 remember key。 - 2026-07-27:PKG110 真机以无效后台地址触发“后台地址必须包含主机”;错误显示后测试 的后台地址、账号和设备 ID 仍可见。强制重启 App 后测试值消失,确认表单只在内存中 保留,未持久化凭证。