docs(05): 锚点补记三十一 —— W53 四项落地(后台通知/退出确认框/保活文案与入口/分享确认面板)+ 真机验收全过
- 三支各自的机制与判据要点,含两条「子代理纠正任务书」的记录(Miuix 0.9.3 没有 extra.* 包; proactive 判据后端放在 data 里而不是帧壳顶层——我读后端源码核过)+ 我自己补的那处 (AppPresence 补同源 StateFlow 当 key,修「去系统设置授权后回来服务没起」)。 - 真机验收逐条证据(后台通知的形状与点它回主会话、退出确认框、保活文案与「去系统设置」、 分享面板确实没被直接发出、INTERNET 来源是源码)。 - 仍未验/已知缺口如实列出(两条路去重只有单测、通知 id 覆盖、Activity 销毁后收不到帧、 转屏丢已取走的分享、S4 对照组没跑干净)。
This commit is contained in:
1 parent
62f552f87f
commit
d8e44c6692
1 file changed
+31
@@ -1661,3 +1661,34 @@ S2 我第一次测出「没生效」,差点去改代码——真因是**设备
|
||||
**主人要的**:像其他 IM 一样给一个**确认面板** —— ① **能预览**支持的文件(图片缩略图 / 文件名字与大小);② 下方一个**输入框**让用户附上文字描述;③ 由用户点「发送」才真的发出去(可取消)。
|
||||
**指派**:`W53X`(与 W53N/W53S 并行;它只许在 `ChatScreen.kt` 的分享落地那一小段动刀,其余放新文件)。
|
||||
**边界**:不动 `shareLanding` / `shareNoticeFor` / `shareWaitingNotice` 的语义,不动 `sendShared` 的「超长文本走文件」那条(主人当时的裁决),不发则不 take 之前的内容——**take 只许发生一次**(否则 effect 重跑会重复弹面板)。
|
||||
|
||||
---
|
||||
|
||||
## ★★ 锚点补记三十一 · W53 落地(主人拍板那批 + 分享确认面板)——**均已合并推送,真机验收全过**
|
||||
|
||||
### 1. 代码(`53c7494` / `6505512` / `62f552f` / `77fbedc`,均已推)
|
||||
主树全量 `--rerun` **真跑**:**110 suite / 1330 tests / 0 失败 / 0 error**(基线 1270 ⇒ +60)。三支的 worktree/分支已清、锁已放。
|
||||
- **W53N(后台通知,只做「她主动说的话」这一档)**:**读回**被丢掉的 `proactive` 判据(**核过后端**:它在帧的 **`data`** 里而不是帧壳顶层 —— `broadcast.go:44-49`;客户端两层都读,两种说法都吃得住);纯判据 `shouldNotifyProactive(inForeground, viewingTargetSession)` =「这条此刻会不会正好被看到」;去重账本(进程级、容量 64、键 = 落库行 id > IM 消息号 > 时间字面量 > 正文);点通知 ⇒ 打开 App 并切主会话;**渠道 `proactive`(DEFAULT)、通知 id=2**,与保活的 `keep_alive`(id=1) 分开。
|
||||
- **W53S(设置页两件)**:退出登录加 **Miuix `OverlayDialog`** 确认框(⚠️ **更正我任务书里的错**:Miuix 0.9.3 **没有** `extra.*` 包,对话框只有 `overlay.*` / `window.*` 两族);保活那行补「**24 小时内累计最多 6 小时**」+ 权限被拒/被撤时给「去系统设置」(`ACTION_APP_NOTIFICATION_SETTINGS` + 兜底 `ACTION_APPLICATION_DETAILS_SETTINGS`)。
|
||||
- **W53X(分享确认面板)**:分享进来**不再直接发**,弹面板(图片缩略图 / 文件 chip(复用 `DocumentChipRow`)/ 可附文字的输入框(预填分享自带的文本)/ 发送·取消);用 **`window.WindowDialog`**(⚠️ 硬理由已写进 KDoc:`OverlayDialog` 需要 Miuix `Scaffold` 提供的 composition local,而它的调用点在 `ChatScreen` 的 Scaffold **外面** ⇒ 会「不报错也不显示」);`take()` 只发生一次(effect 的键里加了 `shareConfirm == null`,面板关掉后自动接上下一条)。
|
||||
- **我自己补的一处**(`77fbedc`):W53S 标出的「去系统设置授权后回来,UI 说已开而服务其实没起」——给 `AppPresence` 补一条与 `appInForeground` **同源**的 StateFlow,让 `CyreneApp` 那个起停 effect 收它当 key(「回到前台」正是从系统设置返回必经、且必然变化的那一位)。**没加任何依赖**。
|
||||
|
||||
### 2. 真机验收(`emulator-5554` + 假后端)
|
||||
| 项 | 证据 |
|
||||
|---|---|
|
||||
| **后台通知** | App 切后台 ⇒ 注入 `proactive_message` ⇒ `NotificationRecord(pkg=top.yeij.cyrene, id=2, channel=proactive, category=msg, AUTO_CANCEL)`;通知栏显示「Cyrene / 昔涟 / 通知验收:她主动说了一句」 |
|
||||
| **点通知** | 点它 ⇒ 回前台,且**聊天页正是主会话、那条主动消息就在屏幕上**(带「发送至 网页」) |
|
||||
| **退出确认框** | 点条目 ⇒ `退出登录?` +「退出后本机会清空登录信息(服务器地址也要重填),需要重新登录」+ 取消/退出登录;取消后仍在设置页、**没登出** |
|
||||
| **保活文案与入口** | 开着时含「24 小时内累计最多 6 小时,用满会被停下」;**撤掉权限后**文案变「通知权限现在是关的,服务起不来…」+ 出现**「去系统设置」**按钮 |
|
||||
| **保活服务**(上批欠的) | 开 ⇒ `isForeground=true`、`types=dataSync`、`channel=keep_alive`、静音常驻;关 ⇒ 服务停;13+ 权限弹窗真实 |
|
||||
| **分享确认面板** | 外部 `ACTION_SEND` 分享一段文字 ⇒ **对端上行流水里没有任何 chat 帧**(确实没被直接发出),而是弹出面板(标题「发送给昔涟」+「分享的文字」预览 + 预填的输入框 + 取消/发送) |
|
||||
| **`INTERNET`** | `:app:processReleaseMainManifest` 的 merger 报告:`ADDED from app/src/main/AndroidManifest.xml` + `MERGED from [okhttp-android]` ⇒ **来源是源码** |
|
||||
|
||||
### 3. 仍未验 / 已知缺口(如实)
|
||||
- **「两条路只弹一次」只有单测**:真后端要走 IM 桥那条路由才会同时来两帧,本机造不出来。
|
||||
- **通知频率**:恒用 id=2 ⇒ 她连说几句时**后到的覆盖先到的**(KDoc 已写明;要「一事一条」得按 id 生成通知 id)。
|
||||
- **通知挂在 `SessionsViewModel`(Activity 存活期内)**:Activity 被销毁而进程被前台服务保活那一档(例如从最近任务划掉)收不到帧 ⇒ 不弹(要覆盖得把订阅提到进程级)。
|
||||
- **转屏会静默丢掉「已取走」的那份分享**(面板状态是 `remember(sessionId)`,`take()` 不可逆)——W53X 列了两条更糟的修法,我没动;要收口得把状态挪进 VM。
|
||||
- **面板里正文出现两次**(预览 3 行 + 输入框预填):W53X 问要不要删掉预览那块,**我的建议是删**(输入框已经显示且可编辑),一处小改即可 —— **等主人一句话**。
|
||||
- **S4 回收**:正向证据有了(超 3 格后回到最早的次级 ⇒ 重新拉一次 `messages`);**对照组没跑干净**(我几次点击没落到达标的抽屉行上),如实标注。
|
||||
- 给后端的一条(不影响我们):他们的注释写 `proactive` 是「帧顶」,代码实际放在 `data` 里(`broadcast.go:49`)——**我们两层都读,所以都能用**,但他们的注释值得对一下。
|
||||
Reference in new issue
Block a user