- 删除 VerificationCodeParser 及相关测试,短信捕获和推送不再解析验证码 - 飞书推送改为只发送短信原文,时间戳格式化为可读日期 - 移除主界面"只推送验证码"开关和"调试时上传完整短信正文"选项 - 移除"保存轮询间隔"按钮,开启轮询时自动保存间隔(未输入默认1秒) - 按钮文字从"开始1秒轮询验证码"改为"开始短信轮询" - 删除"打印最近30条短信"功能及相关 SmsInboxReader.logRecentMessages - SmsInboxReader 用 RecentSmsResult 替换 RecentCodeResult - FeishuWebhookConfigStore.Config 移除 filterVerificationCode/sendFullBodyDebug - 修复代码缩进不一致问题
68 lines
3.0 KiB
Markdown
68 lines
3.0 KiB
Markdown
## 1. Spec And Context Validation
|
||
|
||
- [x] 1.1 阅读 Python 参考实现,确认签名、请求体、URL、超时和成功判定
|
||
- [x] 1.2 阅读当前 Android 工程结构,确认 Java、Gradle、权限和短信接收链路现状
|
||
- [x] 1.3 生成飞书 webhook 推送 OpenSpec proposal、design、tasks 和 capability spec
|
||
- [x] 1.4 用 `npx openspec validate add-feishu-webhook-push` 校验规格结构
|
||
- [x] 1.5 后续提交或 push 前检查 diff,避免引入非预期 EOF newline 变化
|
||
|
||
## 2. Dependencies And Manifest
|
||
|
||
- [x] 2.1 在 `app/build.gradle` 新增 OkHttp 依赖
|
||
- [x] 2.2 在 `AndroidManifest.xml` 新增 `android.permission.INTERNET`
|
||
- [x] 2.3 不引入 Retrofit、RxJava、协程或 WorkManager
|
||
|
||
## 3. Signing And Request Model
|
||
|
||
- [x] 3.1 新增签名方法,使用 `timestamp + "\n" + secret` 作为 HMAC key,空消息体,HmacSHA256,Base64 NO_WRAP
|
||
- [x] 3.2 新增请求体构造方法,输出与 Python 参考实现一致的 interactive markdown JSON
|
||
- [x] 3.3 新增 webhook URL 拼接方法,处理空 id 和首尾空格
|
||
- [x] 3.4 避免在日志中输出 secret、sign 和完整 webhook URL
|
||
|
||
## 4. Network Client
|
||
|
||
- [x] 4.1 新增 `FeishuWebhookClient`
|
||
- [x] 4.2 使用 OkHttp POST JSON
|
||
- [x] 4.3 设置 10 秒请求超时
|
||
- [x] 4.4 HTTP 200 且响应 JSON `code == 0` 时返回成功
|
||
- [x] 4.5 分类返回配置缺失、签名失败、网络异常、超时、HTTP 错误、JSON 解析失败和飞书业务错误
|
||
- [x] 4.6 网络请求只在后台线程执行
|
||
|
||
## 5. Config And State
|
||
|
||
- [x] 5.1 新增 `FeishuWebhookConfigStore`,通过 `/sdcard/Android/data/{applicationId}/config/feishu.json` 保存 enabled、webhook id 和 secret
|
||
- [x] 5.2 新增最近推送状态,包含时间、成功状态、错误类型和错误摘要
|
||
- [x] 5.3 UI 展示 secret 时使用掩码
|
||
- [x] 5.4 默认推送完整短信原文,便于远端调试
|
||
- [x] 5.5 `feishu.json` 不存在时生成默认模板 `def_config_feishu.json`
|
||
|
||
## 6. UI And Manual Test
|
||
|
||
- [x] 6.1 在 `MainActivity` 增加飞书推送配置区域
|
||
- [x] 6.2 增加 webhook id 和 secret 输入入口
|
||
- [x] 6.3 增加启用/停用远端推送开关
|
||
- [x] 6.4 增加“测试推送”按钮,发送固定 markdown 测试内容
|
||
- [x] 6.5 展示最近一次推送结果,并与短信接收结果分开
|
||
|
||
## 7. SMS Flow Integration
|
||
|
||
- [x] 7.1 短信原文读取成功后构造默认 markdown 摘要
|
||
- [x] 7.2 `SmsReceiver` 保存本地结果后触发异步推送
|
||
- [x] 7.3 推送失败不影响本地短信捕获、解析和 UI 刷新
|
||
- [x] 7.4 默认推送内容包含短信原文、来源、发送方掩码和时间
|
||
|
||
## 8. Tests
|
||
|
||
- [x] 8.1 增加签名单元测试,固定输入输出对齐 Python 实现
|
||
- [x] 8.2 增加请求体构造测试
|
||
- [x] 8.3 增加响应解析测试,覆盖成功、业务错误和非法 JSON
|
||
- [x] 8.4 增加配置缺失测试
|
||
- [x] 8.5 不要求本轮编译;代码完成后通知用户
|
||
|
||
## 9. Delivery Criteria
|
||
|
||
- [x] 9.1 OpenSpec validate 通过
|
||
- [x] 9.2 相关上下文逻辑分析通过
|
||
- [x] 9.3 相关测试通过
|
||
- [x] 9.4 代码实现完成后通知用户,不强制编译
|